├── .env.example ├── .gitignore ├── package.json ├── pnpm-lock.yaml ├── src ├── app.ts ├── config │ └── mongo.ts ├── controllers │ ├── auth.ts │ ├── blog.ts │ ├── item.ts │ ├── order.ts │ └── upload.ts ├── interfaces │ ├── auth.interface.ts │ ├── car.interface.ts │ ├── req-ext.ts │ ├── storage.ts │ └── user.interface.ts ├── middleware │ ├── file.ts │ ├── log.ts │ └── session.ts ├── models │ ├── item.ts │ ├── storage.ts │ └── user.ts ├── routes │ ├── auth.ts │ ├── blogs.ts │ ├── index.ts │ ├── item.ts │ ├── order.ts │ └── upload.ts ├── services │ ├── auth.ts │ ├── item.ts │ ├── order.ts │ └── storage.ts └── utils │ ├── bcrypt.handle.ts │ ├── error.handle.ts │ └── jwt.handle.ts ├── storage └── .gitkeep └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | PORT=3002 2 | DB_URI= 3 | JWT_SECRET=secreto.01 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | storage/* 3 | !storage/.gitkeep 4 | .env 5 | dist/ -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api-rest-ts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "nodemon ./src/app.ts", 8 | "build": "tsc", 9 | "start": "node ./dist/app.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "bcryptjs": "^2.4.3", 16 | "cors": "^2.8.5", 17 | "dotenv": "^16.4.0", 18 | "express": "^4.18.2", 19 | "jsonwebtoken": "^8.5.1", 20 | "mongoose": "^6.12.6", 21 | "multer": "1.4.5-lts.1" 22 | }, 23 | "devDependencies": { 24 | "@types/bcryptjs": "^2.4.6", 25 | "@types/cors": "^2.8.17", 26 | "@types/express": "^4.17.21", 27 | "@types/jsonwebtoken": "^8.5.9", 28 | "@types/multer": "^1.4.11" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | bcryptjs: 9 | specifier: ^2.4.3 10 | version: 2.4.3 11 | cors: 12 | specifier: ^2.8.5 13 | version: 2.8.5 14 | dotenv: 15 | specifier: ^16.4.0 16 | version: 16.4.0 17 | express: 18 | specifier: ^4.18.2 19 | version: 4.18.2 20 | jsonwebtoken: 21 | specifier: ^8.5.1 22 | version: 8.5.1 23 | mongoose: 24 | specifier: ^6.12.6 25 | version: 6.12.6 26 | multer: 27 | specifier: 1.4.5-lts.1 28 | version: 1.4.5-lts.1 29 | 30 | devDependencies: 31 | '@types/bcryptjs': 32 | specifier: ^2.4.6 33 | version: 2.4.6 34 | '@types/cors': 35 | specifier: ^2.8.17 36 | version: 2.8.17 37 | '@types/express': 38 | specifier: ^4.17.21 39 | version: 4.17.21 40 | '@types/jsonwebtoken': 41 | specifier: ^8.5.9 42 | version: 8.5.9 43 | '@types/multer': 44 | specifier: ^1.4.11 45 | version: 1.4.11 46 | 47 | packages: 48 | 49 | /@aws-crypto/crc32@3.0.0: 50 | resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} 51 | requiresBuild: true 52 | dependencies: 53 | '@aws-crypto/util': 3.0.0 54 | '@aws-sdk/types': 3.496.0 55 | tslib: 1.14.1 56 | dev: false 57 | optional: true 58 | 59 | /@aws-crypto/ie11-detection@3.0.0: 60 | resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} 61 | requiresBuild: true 62 | dependencies: 63 | tslib: 1.14.1 64 | dev: false 65 | optional: true 66 | 67 | /@aws-crypto/sha256-browser@3.0.0: 68 | resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} 69 | requiresBuild: true 70 | dependencies: 71 | '@aws-crypto/ie11-detection': 3.0.0 72 | '@aws-crypto/sha256-js': 3.0.0 73 | '@aws-crypto/supports-web-crypto': 3.0.0 74 | '@aws-crypto/util': 3.0.0 75 | '@aws-sdk/types': 3.496.0 76 | '@aws-sdk/util-locate-window': 3.495.0 77 | '@aws-sdk/util-utf8-browser': 3.259.0 78 | tslib: 1.14.1 79 | dev: false 80 | optional: true 81 | 82 | /@aws-crypto/sha256-js@3.0.0: 83 | resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} 84 | requiresBuild: true 85 | dependencies: 86 | '@aws-crypto/util': 3.0.0 87 | '@aws-sdk/types': 3.496.0 88 | tslib: 1.14.1 89 | dev: false 90 | optional: true 91 | 92 | /@aws-crypto/supports-web-crypto@3.0.0: 93 | resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} 94 | requiresBuild: true 95 | dependencies: 96 | tslib: 1.14.1 97 | dev: false 98 | optional: true 99 | 100 | /@aws-crypto/util@3.0.0: 101 | resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} 102 | requiresBuild: true 103 | dependencies: 104 | '@aws-sdk/types': 3.496.0 105 | '@aws-sdk/util-utf8-browser': 3.259.0 106 | tslib: 1.14.1 107 | dev: false 108 | optional: true 109 | 110 | /@aws-sdk/client-cognito-identity@3.498.0: 111 | resolution: {integrity: sha512-v+OEcWep69mZGSralXYpyQQB2J91LizbsdvwizLxVPZ6dxnJKS/P/Gbugoqpu3VMVUqFGZ627HwByJ3I1YLV3A==} 112 | engines: {node: '>=14.0.0'} 113 | requiresBuild: true 114 | dependencies: 115 | '@aws-crypto/sha256-browser': 3.0.0 116 | '@aws-crypto/sha256-js': 3.0.0 117 | '@aws-sdk/client-sts': 3.496.0 118 | '@aws-sdk/core': 3.496.0 119 | '@aws-sdk/credential-provider-node': 3.496.0 120 | '@aws-sdk/middleware-host-header': 3.496.0 121 | '@aws-sdk/middleware-logger': 3.496.0 122 | '@aws-sdk/middleware-recursion-detection': 3.496.0 123 | '@aws-sdk/middleware-signing': 3.496.0 124 | '@aws-sdk/middleware-user-agent': 3.496.0 125 | '@aws-sdk/region-config-resolver': 3.496.0 126 | '@aws-sdk/types': 3.496.0 127 | '@aws-sdk/util-endpoints': 3.496.0 128 | '@aws-sdk/util-user-agent-browser': 3.496.0 129 | '@aws-sdk/util-user-agent-node': 3.496.0 130 | '@smithy/config-resolver': 2.1.1 131 | '@smithy/core': 1.3.1 132 | '@smithy/fetch-http-handler': 2.4.1 133 | '@smithy/hash-node': 2.1.1 134 | '@smithy/invalid-dependency': 2.1.1 135 | '@smithy/middleware-content-length': 2.1.1 136 | '@smithy/middleware-endpoint': 2.4.1 137 | '@smithy/middleware-retry': 2.1.1 138 | '@smithy/middleware-serde': 2.1.1 139 | '@smithy/middleware-stack': 2.1.1 140 | '@smithy/node-config-provider': 2.2.1 141 | '@smithy/node-http-handler': 2.3.1 142 | '@smithy/protocol-http': 3.1.1 143 | '@smithy/smithy-client': 2.3.1 144 | '@smithy/types': 2.9.1 145 | '@smithy/url-parser': 2.1.1 146 | '@smithy/util-base64': 2.1.1 147 | '@smithy/util-body-length-browser': 2.1.1 148 | '@smithy/util-body-length-node': 2.2.1 149 | '@smithy/util-defaults-mode-browser': 2.1.1 150 | '@smithy/util-defaults-mode-node': 2.1.1 151 | '@smithy/util-endpoints': 1.1.1 152 | '@smithy/util-retry': 2.1.1 153 | '@smithy/util-utf8': 2.1.1 154 | tslib: 2.6.2 155 | transitivePeerDependencies: 156 | - aws-crt 157 | dev: false 158 | optional: true 159 | 160 | /@aws-sdk/client-sso@3.496.0: 161 | resolution: {integrity: sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==} 162 | engines: {node: '>=14.0.0'} 163 | requiresBuild: true 164 | dependencies: 165 | '@aws-crypto/sha256-browser': 3.0.0 166 | '@aws-crypto/sha256-js': 3.0.0 167 | '@aws-sdk/core': 3.496.0 168 | '@aws-sdk/middleware-host-header': 3.496.0 169 | '@aws-sdk/middleware-logger': 3.496.0 170 | '@aws-sdk/middleware-recursion-detection': 3.496.0 171 | '@aws-sdk/middleware-user-agent': 3.496.0 172 | '@aws-sdk/region-config-resolver': 3.496.0 173 | '@aws-sdk/types': 3.496.0 174 | '@aws-sdk/util-endpoints': 3.496.0 175 | '@aws-sdk/util-user-agent-browser': 3.496.0 176 | '@aws-sdk/util-user-agent-node': 3.496.0 177 | '@smithy/config-resolver': 2.1.1 178 | '@smithy/core': 1.3.1 179 | '@smithy/fetch-http-handler': 2.4.1 180 | '@smithy/hash-node': 2.1.1 181 | '@smithy/invalid-dependency': 2.1.1 182 | '@smithy/middleware-content-length': 2.1.1 183 | '@smithy/middleware-endpoint': 2.4.1 184 | '@smithy/middleware-retry': 2.1.1 185 | '@smithy/middleware-serde': 2.1.1 186 | '@smithy/middleware-stack': 2.1.1 187 | '@smithy/node-config-provider': 2.2.1 188 | '@smithy/node-http-handler': 2.3.1 189 | '@smithy/protocol-http': 3.1.1 190 | '@smithy/smithy-client': 2.3.1 191 | '@smithy/types': 2.9.1 192 | '@smithy/url-parser': 2.1.1 193 | '@smithy/util-base64': 2.1.1 194 | '@smithy/util-body-length-browser': 2.1.1 195 | '@smithy/util-body-length-node': 2.2.1 196 | '@smithy/util-defaults-mode-browser': 2.1.1 197 | '@smithy/util-defaults-mode-node': 2.1.1 198 | '@smithy/util-endpoints': 1.1.1 199 | '@smithy/util-retry': 2.1.1 200 | '@smithy/util-utf8': 2.1.1 201 | tslib: 2.6.2 202 | transitivePeerDependencies: 203 | - aws-crt 204 | dev: false 205 | optional: true 206 | 207 | /@aws-sdk/client-sts@3.496.0: 208 | resolution: {integrity: sha512-3pSdqgegdwbK3CT1WvGHhA+Bf91R9cr8G1Ynp+iU2wZvy8ueJfMUk0NYfjo3EEv0YhSbMLKuduzZfvQHFHXYhw==} 209 | engines: {node: '>=14.0.0'} 210 | requiresBuild: true 211 | dependencies: 212 | '@aws-crypto/sha256-browser': 3.0.0 213 | '@aws-crypto/sha256-js': 3.0.0 214 | '@aws-sdk/core': 3.496.0 215 | '@aws-sdk/credential-provider-node': 3.496.0 216 | '@aws-sdk/middleware-host-header': 3.496.0 217 | '@aws-sdk/middleware-logger': 3.496.0 218 | '@aws-sdk/middleware-recursion-detection': 3.496.0 219 | '@aws-sdk/middleware-user-agent': 3.496.0 220 | '@aws-sdk/region-config-resolver': 3.496.0 221 | '@aws-sdk/types': 3.496.0 222 | '@aws-sdk/util-endpoints': 3.496.0 223 | '@aws-sdk/util-user-agent-browser': 3.496.0 224 | '@aws-sdk/util-user-agent-node': 3.496.0 225 | '@smithy/config-resolver': 2.1.1 226 | '@smithy/core': 1.3.1 227 | '@smithy/fetch-http-handler': 2.4.1 228 | '@smithy/hash-node': 2.1.1 229 | '@smithy/invalid-dependency': 2.1.1 230 | '@smithy/middleware-content-length': 2.1.1 231 | '@smithy/middleware-endpoint': 2.4.1 232 | '@smithy/middleware-retry': 2.1.1 233 | '@smithy/middleware-serde': 2.1.1 234 | '@smithy/middleware-stack': 2.1.1 235 | '@smithy/node-config-provider': 2.2.1 236 | '@smithy/node-http-handler': 2.3.1 237 | '@smithy/protocol-http': 3.1.1 238 | '@smithy/smithy-client': 2.3.1 239 | '@smithy/types': 2.9.1 240 | '@smithy/url-parser': 2.1.1 241 | '@smithy/util-base64': 2.1.1 242 | '@smithy/util-body-length-browser': 2.1.1 243 | '@smithy/util-body-length-node': 2.2.1 244 | '@smithy/util-defaults-mode-browser': 2.1.1 245 | '@smithy/util-defaults-mode-node': 2.1.1 246 | '@smithy/util-endpoints': 1.1.1 247 | '@smithy/util-middleware': 2.1.1 248 | '@smithy/util-retry': 2.1.1 249 | '@smithy/util-utf8': 2.1.1 250 | fast-xml-parser: 4.2.5 251 | tslib: 2.6.2 252 | transitivePeerDependencies: 253 | - aws-crt 254 | dev: false 255 | optional: true 256 | 257 | /@aws-sdk/core@3.496.0: 258 | resolution: {integrity: sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==} 259 | engines: {node: '>=14.0.0'} 260 | requiresBuild: true 261 | dependencies: 262 | '@smithy/core': 1.3.1 263 | '@smithy/protocol-http': 3.1.1 264 | '@smithy/signature-v4': 2.1.1 265 | '@smithy/smithy-client': 2.3.1 266 | '@smithy/types': 2.9.1 267 | tslib: 2.6.2 268 | dev: false 269 | optional: true 270 | 271 | /@aws-sdk/credential-provider-cognito-identity@3.498.0: 272 | resolution: {integrity: sha512-A4XgSkt+4hxmLOPMdw5vHgL2mFRkpw7/5uGMU2GfxErZGds401SyLdJBsCj0+A4dJ0LlEs+5owkYZHVR6jBEbg==} 273 | engines: {node: '>=14.0.0'} 274 | requiresBuild: true 275 | dependencies: 276 | '@aws-sdk/client-cognito-identity': 3.498.0 277 | '@aws-sdk/types': 3.496.0 278 | '@smithy/property-provider': 2.1.1 279 | '@smithy/types': 2.9.1 280 | tslib: 2.6.2 281 | transitivePeerDependencies: 282 | - aws-crt 283 | dev: false 284 | optional: true 285 | 286 | /@aws-sdk/credential-provider-env@3.496.0: 287 | resolution: {integrity: sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==} 288 | engines: {node: '>=14.0.0'} 289 | requiresBuild: true 290 | dependencies: 291 | '@aws-sdk/types': 3.496.0 292 | '@smithy/property-provider': 2.1.1 293 | '@smithy/types': 2.9.1 294 | tslib: 2.6.2 295 | dev: false 296 | optional: true 297 | 298 | /@aws-sdk/credential-provider-http@3.496.0: 299 | resolution: {integrity: sha512-iphFlFX0qDFsE24XmFlcKmsR4uyNaqQrK+Y18mwSZMs1yWtL4Sck0rcTXU/cU2W3/xisjh7xFXK5L5aowjMZOg==} 300 | engines: {node: '>=14.0.0'} 301 | requiresBuild: true 302 | dependencies: 303 | '@aws-sdk/types': 3.496.0 304 | '@smithy/fetch-http-handler': 2.4.1 305 | '@smithy/node-http-handler': 2.3.1 306 | '@smithy/property-provider': 2.1.1 307 | '@smithy/protocol-http': 3.1.1 308 | '@smithy/smithy-client': 2.3.1 309 | '@smithy/types': 2.9.1 310 | '@smithy/util-stream': 2.1.1 311 | tslib: 2.6.2 312 | dev: false 313 | optional: true 314 | 315 | /@aws-sdk/credential-provider-ini@3.496.0: 316 | resolution: {integrity: sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==} 317 | engines: {node: '>=14.0.0'} 318 | requiresBuild: true 319 | dependencies: 320 | '@aws-sdk/credential-provider-env': 3.496.0 321 | '@aws-sdk/credential-provider-process': 3.496.0 322 | '@aws-sdk/credential-provider-sso': 3.496.0 323 | '@aws-sdk/credential-provider-web-identity': 3.496.0 324 | '@aws-sdk/types': 3.496.0 325 | '@smithy/credential-provider-imds': 2.2.1 326 | '@smithy/property-provider': 2.1.1 327 | '@smithy/shared-ini-file-loader': 2.3.1 328 | '@smithy/types': 2.9.1 329 | tslib: 2.6.2 330 | transitivePeerDependencies: 331 | - aws-crt 332 | dev: false 333 | optional: true 334 | 335 | /@aws-sdk/credential-provider-node@3.496.0: 336 | resolution: {integrity: sha512-IVF9RvLePfRa5S5/eBIRChJCWOzQkGwM8P/L79Gl84u/cH2oSG4NtUI/YTDlrtmnYn7YsGhINSV0WnzfF2twfQ==} 337 | engines: {node: '>=14.0.0'} 338 | requiresBuild: true 339 | dependencies: 340 | '@aws-sdk/credential-provider-env': 3.496.0 341 | '@aws-sdk/credential-provider-ini': 3.496.0 342 | '@aws-sdk/credential-provider-process': 3.496.0 343 | '@aws-sdk/credential-provider-sso': 3.496.0 344 | '@aws-sdk/credential-provider-web-identity': 3.496.0 345 | '@aws-sdk/types': 3.496.0 346 | '@smithy/credential-provider-imds': 2.2.1 347 | '@smithy/property-provider': 2.1.1 348 | '@smithy/shared-ini-file-loader': 2.3.1 349 | '@smithy/types': 2.9.1 350 | tslib: 2.6.2 351 | transitivePeerDependencies: 352 | - aws-crt 353 | dev: false 354 | optional: true 355 | 356 | /@aws-sdk/credential-provider-process@3.496.0: 357 | resolution: {integrity: sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==} 358 | engines: {node: '>=14.0.0'} 359 | requiresBuild: true 360 | dependencies: 361 | '@aws-sdk/types': 3.496.0 362 | '@smithy/property-provider': 2.1.1 363 | '@smithy/shared-ini-file-loader': 2.3.1 364 | '@smithy/types': 2.9.1 365 | tslib: 2.6.2 366 | dev: false 367 | optional: true 368 | 369 | /@aws-sdk/credential-provider-sso@3.496.0: 370 | resolution: {integrity: sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==} 371 | engines: {node: '>=14.0.0'} 372 | requiresBuild: true 373 | dependencies: 374 | '@aws-sdk/client-sso': 3.496.0 375 | '@aws-sdk/token-providers': 3.496.0 376 | '@aws-sdk/types': 3.496.0 377 | '@smithy/property-provider': 2.1.1 378 | '@smithy/shared-ini-file-loader': 2.3.1 379 | '@smithy/types': 2.9.1 380 | tslib: 2.6.2 381 | transitivePeerDependencies: 382 | - aws-crt 383 | dev: false 384 | optional: true 385 | 386 | /@aws-sdk/credential-provider-web-identity@3.496.0: 387 | resolution: {integrity: sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==} 388 | engines: {node: '>=14.0.0'} 389 | requiresBuild: true 390 | dependencies: 391 | '@aws-sdk/types': 3.496.0 392 | '@smithy/property-provider': 2.1.1 393 | '@smithy/types': 2.9.1 394 | tslib: 2.6.2 395 | dev: false 396 | optional: true 397 | 398 | /@aws-sdk/credential-providers@3.498.0: 399 | resolution: {integrity: sha512-dkOJMtHeR8V9OFnXImDCAGLE27oEJEzx6BQTfE2+FTxxj3OKeoRa47ikZOuZpeygjr1niOydZy+iSfpjGIMiCQ==} 400 | engines: {node: '>=14.0.0'} 401 | requiresBuild: true 402 | dependencies: 403 | '@aws-sdk/client-cognito-identity': 3.498.0 404 | '@aws-sdk/client-sso': 3.496.0 405 | '@aws-sdk/client-sts': 3.496.0 406 | '@aws-sdk/credential-provider-cognito-identity': 3.498.0 407 | '@aws-sdk/credential-provider-env': 3.496.0 408 | '@aws-sdk/credential-provider-http': 3.496.0 409 | '@aws-sdk/credential-provider-ini': 3.496.0 410 | '@aws-sdk/credential-provider-node': 3.496.0 411 | '@aws-sdk/credential-provider-process': 3.496.0 412 | '@aws-sdk/credential-provider-sso': 3.496.0 413 | '@aws-sdk/credential-provider-web-identity': 3.496.0 414 | '@aws-sdk/types': 3.496.0 415 | '@smithy/credential-provider-imds': 2.2.1 416 | '@smithy/property-provider': 2.1.1 417 | '@smithy/types': 2.9.1 418 | tslib: 2.6.2 419 | transitivePeerDependencies: 420 | - aws-crt 421 | dev: false 422 | optional: true 423 | 424 | /@aws-sdk/middleware-host-header@3.496.0: 425 | resolution: {integrity: sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==} 426 | engines: {node: '>=14.0.0'} 427 | requiresBuild: true 428 | dependencies: 429 | '@aws-sdk/types': 3.496.0 430 | '@smithy/protocol-http': 3.1.1 431 | '@smithy/types': 2.9.1 432 | tslib: 2.6.2 433 | dev: false 434 | optional: true 435 | 436 | /@aws-sdk/middleware-logger@3.496.0: 437 | resolution: {integrity: sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==} 438 | engines: {node: '>=14.0.0'} 439 | requiresBuild: true 440 | dependencies: 441 | '@aws-sdk/types': 3.496.0 442 | '@smithy/types': 2.9.1 443 | tslib: 2.6.2 444 | dev: false 445 | optional: true 446 | 447 | /@aws-sdk/middleware-recursion-detection@3.496.0: 448 | resolution: {integrity: sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==} 449 | engines: {node: '>=14.0.0'} 450 | requiresBuild: true 451 | dependencies: 452 | '@aws-sdk/types': 3.496.0 453 | '@smithy/protocol-http': 3.1.1 454 | '@smithy/types': 2.9.1 455 | tslib: 2.6.2 456 | dev: false 457 | optional: true 458 | 459 | /@aws-sdk/middleware-signing@3.496.0: 460 | resolution: {integrity: sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==} 461 | engines: {node: '>=14.0.0'} 462 | requiresBuild: true 463 | dependencies: 464 | '@aws-sdk/types': 3.496.0 465 | '@smithy/property-provider': 2.1.1 466 | '@smithy/protocol-http': 3.1.1 467 | '@smithy/signature-v4': 2.1.1 468 | '@smithy/types': 2.9.1 469 | '@smithy/util-middleware': 2.1.1 470 | tslib: 2.6.2 471 | dev: false 472 | optional: true 473 | 474 | /@aws-sdk/middleware-user-agent@3.496.0: 475 | resolution: {integrity: sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==} 476 | engines: {node: '>=14.0.0'} 477 | requiresBuild: true 478 | dependencies: 479 | '@aws-sdk/types': 3.496.0 480 | '@aws-sdk/util-endpoints': 3.496.0 481 | '@smithy/protocol-http': 3.1.1 482 | '@smithy/types': 2.9.1 483 | tslib: 2.6.2 484 | dev: false 485 | optional: true 486 | 487 | /@aws-sdk/region-config-resolver@3.496.0: 488 | resolution: {integrity: sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==} 489 | engines: {node: '>=14.0.0'} 490 | requiresBuild: true 491 | dependencies: 492 | '@aws-sdk/types': 3.496.0 493 | '@smithy/node-config-provider': 2.2.1 494 | '@smithy/types': 2.9.1 495 | '@smithy/util-config-provider': 2.2.1 496 | '@smithy/util-middleware': 2.1.1 497 | tslib: 2.6.2 498 | dev: false 499 | optional: true 500 | 501 | /@aws-sdk/token-providers@3.496.0: 502 | resolution: {integrity: sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==} 503 | engines: {node: '>=14.0.0'} 504 | requiresBuild: true 505 | dependencies: 506 | '@aws-crypto/sha256-browser': 3.0.0 507 | '@aws-crypto/sha256-js': 3.0.0 508 | '@aws-sdk/middleware-host-header': 3.496.0 509 | '@aws-sdk/middleware-logger': 3.496.0 510 | '@aws-sdk/middleware-recursion-detection': 3.496.0 511 | '@aws-sdk/middleware-user-agent': 3.496.0 512 | '@aws-sdk/region-config-resolver': 3.496.0 513 | '@aws-sdk/types': 3.496.0 514 | '@aws-sdk/util-endpoints': 3.496.0 515 | '@aws-sdk/util-user-agent-browser': 3.496.0 516 | '@aws-sdk/util-user-agent-node': 3.496.0 517 | '@smithy/config-resolver': 2.1.1 518 | '@smithy/fetch-http-handler': 2.4.1 519 | '@smithy/hash-node': 2.1.1 520 | '@smithy/invalid-dependency': 2.1.1 521 | '@smithy/middleware-content-length': 2.1.1 522 | '@smithy/middleware-endpoint': 2.4.1 523 | '@smithy/middleware-retry': 2.1.1 524 | '@smithy/middleware-serde': 2.1.1 525 | '@smithy/middleware-stack': 2.1.1 526 | '@smithy/node-config-provider': 2.2.1 527 | '@smithy/node-http-handler': 2.3.1 528 | '@smithy/property-provider': 2.1.1 529 | '@smithy/protocol-http': 3.1.1 530 | '@smithy/shared-ini-file-loader': 2.3.1 531 | '@smithy/smithy-client': 2.3.1 532 | '@smithy/types': 2.9.1 533 | '@smithy/url-parser': 2.1.1 534 | '@smithy/util-base64': 2.1.1 535 | '@smithy/util-body-length-browser': 2.1.1 536 | '@smithy/util-body-length-node': 2.2.1 537 | '@smithy/util-defaults-mode-browser': 2.1.1 538 | '@smithy/util-defaults-mode-node': 2.1.1 539 | '@smithy/util-endpoints': 1.1.1 540 | '@smithy/util-retry': 2.1.1 541 | '@smithy/util-utf8': 2.1.1 542 | tslib: 2.6.2 543 | transitivePeerDependencies: 544 | - aws-crt 545 | dev: false 546 | optional: true 547 | 548 | /@aws-sdk/types@3.496.0: 549 | resolution: {integrity: sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==} 550 | engines: {node: '>=14.0.0'} 551 | requiresBuild: true 552 | dependencies: 553 | '@smithy/types': 2.9.1 554 | tslib: 2.6.2 555 | dev: false 556 | optional: true 557 | 558 | /@aws-sdk/util-endpoints@3.496.0: 559 | resolution: {integrity: sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==} 560 | engines: {node: '>=14.0.0'} 561 | requiresBuild: true 562 | dependencies: 563 | '@aws-sdk/types': 3.496.0 564 | '@smithy/types': 2.9.1 565 | '@smithy/util-endpoints': 1.1.1 566 | tslib: 2.6.2 567 | dev: false 568 | optional: true 569 | 570 | /@aws-sdk/util-locate-window@3.495.0: 571 | resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} 572 | engines: {node: '>=14.0.0'} 573 | requiresBuild: true 574 | dependencies: 575 | tslib: 2.6.2 576 | dev: false 577 | optional: true 578 | 579 | /@aws-sdk/util-user-agent-browser@3.496.0: 580 | resolution: {integrity: sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==} 581 | requiresBuild: true 582 | dependencies: 583 | '@aws-sdk/types': 3.496.0 584 | '@smithy/types': 2.9.1 585 | bowser: 2.11.0 586 | tslib: 2.6.2 587 | dev: false 588 | optional: true 589 | 590 | /@aws-sdk/util-user-agent-node@3.496.0: 591 | resolution: {integrity: sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==} 592 | engines: {node: '>=14.0.0'} 593 | requiresBuild: true 594 | peerDependencies: 595 | aws-crt: '>=1.0.0' 596 | peerDependenciesMeta: 597 | aws-crt: 598 | optional: true 599 | dependencies: 600 | '@aws-sdk/types': 3.496.0 601 | '@smithy/node-config-provider': 2.2.1 602 | '@smithy/types': 2.9.1 603 | tslib: 2.6.2 604 | dev: false 605 | optional: true 606 | 607 | /@aws-sdk/util-utf8-browser@3.259.0: 608 | resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} 609 | requiresBuild: true 610 | dependencies: 611 | tslib: 2.6.2 612 | dev: false 613 | optional: true 614 | 615 | /@mongodb-js/saslprep@1.1.4: 616 | resolution: {integrity: sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==} 617 | requiresBuild: true 618 | dependencies: 619 | sparse-bitfield: 3.0.3 620 | dev: false 621 | optional: true 622 | 623 | /@smithy/abort-controller@2.1.1: 624 | resolution: {integrity: sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==} 625 | engines: {node: '>=14.0.0'} 626 | requiresBuild: true 627 | dependencies: 628 | '@smithy/types': 2.9.1 629 | tslib: 2.6.2 630 | dev: false 631 | optional: true 632 | 633 | /@smithy/config-resolver@2.1.1: 634 | resolution: {integrity: sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==} 635 | engines: {node: '>=14.0.0'} 636 | requiresBuild: true 637 | dependencies: 638 | '@smithy/node-config-provider': 2.2.1 639 | '@smithy/types': 2.9.1 640 | '@smithy/util-config-provider': 2.2.1 641 | '@smithy/util-middleware': 2.1.1 642 | tslib: 2.6.2 643 | dev: false 644 | optional: true 645 | 646 | /@smithy/core@1.3.1: 647 | resolution: {integrity: sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==} 648 | engines: {node: '>=14.0.0'} 649 | requiresBuild: true 650 | dependencies: 651 | '@smithy/middleware-endpoint': 2.4.1 652 | '@smithy/middleware-retry': 2.1.1 653 | '@smithy/middleware-serde': 2.1.1 654 | '@smithy/protocol-http': 3.1.1 655 | '@smithy/smithy-client': 2.3.1 656 | '@smithy/types': 2.9.1 657 | '@smithy/util-middleware': 2.1.1 658 | tslib: 2.6.2 659 | dev: false 660 | optional: true 661 | 662 | /@smithy/credential-provider-imds@2.2.1: 663 | resolution: {integrity: sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==} 664 | engines: {node: '>=14.0.0'} 665 | requiresBuild: true 666 | dependencies: 667 | '@smithy/node-config-provider': 2.2.1 668 | '@smithy/property-provider': 2.1.1 669 | '@smithy/types': 2.9.1 670 | '@smithy/url-parser': 2.1.1 671 | tslib: 2.6.2 672 | dev: false 673 | optional: true 674 | 675 | /@smithy/eventstream-codec@2.1.1: 676 | resolution: {integrity: sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==} 677 | requiresBuild: true 678 | dependencies: 679 | '@aws-crypto/crc32': 3.0.0 680 | '@smithy/types': 2.9.1 681 | '@smithy/util-hex-encoding': 2.1.1 682 | tslib: 2.6.2 683 | dev: false 684 | optional: true 685 | 686 | /@smithy/fetch-http-handler@2.4.1: 687 | resolution: {integrity: sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==} 688 | requiresBuild: true 689 | dependencies: 690 | '@smithy/protocol-http': 3.1.1 691 | '@smithy/querystring-builder': 2.1.1 692 | '@smithy/types': 2.9.1 693 | '@smithy/util-base64': 2.1.1 694 | tslib: 2.6.2 695 | dev: false 696 | optional: true 697 | 698 | /@smithy/hash-node@2.1.1: 699 | resolution: {integrity: sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==} 700 | engines: {node: '>=14.0.0'} 701 | requiresBuild: true 702 | dependencies: 703 | '@smithy/types': 2.9.1 704 | '@smithy/util-buffer-from': 2.1.1 705 | '@smithy/util-utf8': 2.1.1 706 | tslib: 2.6.2 707 | dev: false 708 | optional: true 709 | 710 | /@smithy/invalid-dependency@2.1.1: 711 | resolution: {integrity: sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==} 712 | requiresBuild: true 713 | dependencies: 714 | '@smithy/types': 2.9.1 715 | tslib: 2.6.2 716 | dev: false 717 | optional: true 718 | 719 | /@smithy/is-array-buffer@2.1.1: 720 | resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} 721 | engines: {node: '>=14.0.0'} 722 | requiresBuild: true 723 | dependencies: 724 | tslib: 2.6.2 725 | dev: false 726 | optional: true 727 | 728 | /@smithy/middleware-content-length@2.1.1: 729 | resolution: {integrity: sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==} 730 | engines: {node: '>=14.0.0'} 731 | requiresBuild: true 732 | dependencies: 733 | '@smithy/protocol-http': 3.1.1 734 | '@smithy/types': 2.9.1 735 | tslib: 2.6.2 736 | dev: false 737 | optional: true 738 | 739 | /@smithy/middleware-endpoint@2.4.1: 740 | resolution: {integrity: sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==} 741 | engines: {node: '>=14.0.0'} 742 | requiresBuild: true 743 | dependencies: 744 | '@smithy/middleware-serde': 2.1.1 745 | '@smithy/node-config-provider': 2.2.1 746 | '@smithy/shared-ini-file-loader': 2.3.1 747 | '@smithy/types': 2.9.1 748 | '@smithy/url-parser': 2.1.1 749 | '@smithy/util-middleware': 2.1.1 750 | tslib: 2.6.2 751 | dev: false 752 | optional: true 753 | 754 | /@smithy/middleware-retry@2.1.1: 755 | resolution: {integrity: sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==} 756 | engines: {node: '>=14.0.0'} 757 | requiresBuild: true 758 | dependencies: 759 | '@smithy/node-config-provider': 2.2.1 760 | '@smithy/protocol-http': 3.1.1 761 | '@smithy/service-error-classification': 2.1.1 762 | '@smithy/smithy-client': 2.3.1 763 | '@smithy/types': 2.9.1 764 | '@smithy/util-middleware': 2.1.1 765 | '@smithy/util-retry': 2.1.1 766 | tslib: 2.6.2 767 | uuid: 8.3.2 768 | dev: false 769 | optional: true 770 | 771 | /@smithy/middleware-serde@2.1.1: 772 | resolution: {integrity: sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==} 773 | engines: {node: '>=14.0.0'} 774 | requiresBuild: true 775 | dependencies: 776 | '@smithy/types': 2.9.1 777 | tslib: 2.6.2 778 | dev: false 779 | optional: true 780 | 781 | /@smithy/middleware-stack@2.1.1: 782 | resolution: {integrity: sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==} 783 | engines: {node: '>=14.0.0'} 784 | requiresBuild: true 785 | dependencies: 786 | '@smithy/types': 2.9.1 787 | tslib: 2.6.2 788 | dev: false 789 | optional: true 790 | 791 | /@smithy/node-config-provider@2.2.1: 792 | resolution: {integrity: sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==} 793 | engines: {node: '>=14.0.0'} 794 | requiresBuild: true 795 | dependencies: 796 | '@smithy/property-provider': 2.1.1 797 | '@smithy/shared-ini-file-loader': 2.3.1 798 | '@smithy/types': 2.9.1 799 | tslib: 2.6.2 800 | dev: false 801 | optional: true 802 | 803 | /@smithy/node-http-handler@2.3.1: 804 | resolution: {integrity: sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==} 805 | engines: {node: '>=14.0.0'} 806 | requiresBuild: true 807 | dependencies: 808 | '@smithy/abort-controller': 2.1.1 809 | '@smithy/protocol-http': 3.1.1 810 | '@smithy/querystring-builder': 2.1.1 811 | '@smithy/types': 2.9.1 812 | tslib: 2.6.2 813 | dev: false 814 | optional: true 815 | 816 | /@smithy/property-provider@2.1.1: 817 | resolution: {integrity: sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==} 818 | engines: {node: '>=14.0.0'} 819 | requiresBuild: true 820 | dependencies: 821 | '@smithy/types': 2.9.1 822 | tslib: 2.6.2 823 | dev: false 824 | optional: true 825 | 826 | /@smithy/protocol-http@3.1.1: 827 | resolution: {integrity: sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==} 828 | engines: {node: '>=14.0.0'} 829 | requiresBuild: true 830 | dependencies: 831 | '@smithy/types': 2.9.1 832 | tslib: 2.6.2 833 | dev: false 834 | optional: true 835 | 836 | /@smithy/querystring-builder@2.1.1: 837 | resolution: {integrity: sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==} 838 | engines: {node: '>=14.0.0'} 839 | requiresBuild: true 840 | dependencies: 841 | '@smithy/types': 2.9.1 842 | '@smithy/util-uri-escape': 2.1.1 843 | tslib: 2.6.2 844 | dev: false 845 | optional: true 846 | 847 | /@smithy/querystring-parser@2.1.1: 848 | resolution: {integrity: sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==} 849 | engines: {node: '>=14.0.0'} 850 | requiresBuild: true 851 | dependencies: 852 | '@smithy/types': 2.9.1 853 | tslib: 2.6.2 854 | dev: false 855 | optional: true 856 | 857 | /@smithy/service-error-classification@2.1.1: 858 | resolution: {integrity: sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==} 859 | engines: {node: '>=14.0.0'} 860 | requiresBuild: true 861 | dependencies: 862 | '@smithy/types': 2.9.1 863 | dev: false 864 | optional: true 865 | 866 | /@smithy/shared-ini-file-loader@2.3.1: 867 | resolution: {integrity: sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==} 868 | engines: {node: '>=14.0.0'} 869 | requiresBuild: true 870 | dependencies: 871 | '@smithy/types': 2.9.1 872 | tslib: 2.6.2 873 | dev: false 874 | optional: true 875 | 876 | /@smithy/signature-v4@2.1.1: 877 | resolution: {integrity: sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==} 878 | engines: {node: '>=14.0.0'} 879 | requiresBuild: true 880 | dependencies: 881 | '@smithy/eventstream-codec': 2.1.1 882 | '@smithy/is-array-buffer': 2.1.1 883 | '@smithy/types': 2.9.1 884 | '@smithy/util-hex-encoding': 2.1.1 885 | '@smithy/util-middleware': 2.1.1 886 | '@smithy/util-uri-escape': 2.1.1 887 | '@smithy/util-utf8': 2.1.1 888 | tslib: 2.6.2 889 | dev: false 890 | optional: true 891 | 892 | /@smithy/smithy-client@2.3.1: 893 | resolution: {integrity: sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==} 894 | engines: {node: '>=14.0.0'} 895 | requiresBuild: true 896 | dependencies: 897 | '@smithy/middleware-endpoint': 2.4.1 898 | '@smithy/middleware-stack': 2.1.1 899 | '@smithy/protocol-http': 3.1.1 900 | '@smithy/types': 2.9.1 901 | '@smithy/util-stream': 2.1.1 902 | tslib: 2.6.2 903 | dev: false 904 | optional: true 905 | 906 | /@smithy/types@2.9.1: 907 | resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==} 908 | engines: {node: '>=14.0.0'} 909 | requiresBuild: true 910 | dependencies: 911 | tslib: 2.6.2 912 | dev: false 913 | optional: true 914 | 915 | /@smithy/url-parser@2.1.1: 916 | resolution: {integrity: sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==} 917 | requiresBuild: true 918 | dependencies: 919 | '@smithy/querystring-parser': 2.1.1 920 | '@smithy/types': 2.9.1 921 | tslib: 2.6.2 922 | dev: false 923 | optional: true 924 | 925 | /@smithy/util-base64@2.1.1: 926 | resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} 927 | engines: {node: '>=14.0.0'} 928 | requiresBuild: true 929 | dependencies: 930 | '@smithy/util-buffer-from': 2.1.1 931 | tslib: 2.6.2 932 | dev: false 933 | optional: true 934 | 935 | /@smithy/util-body-length-browser@2.1.1: 936 | resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} 937 | requiresBuild: true 938 | dependencies: 939 | tslib: 2.6.2 940 | dev: false 941 | optional: true 942 | 943 | /@smithy/util-body-length-node@2.2.1: 944 | resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} 945 | engines: {node: '>=14.0.0'} 946 | requiresBuild: true 947 | dependencies: 948 | tslib: 2.6.2 949 | dev: false 950 | optional: true 951 | 952 | /@smithy/util-buffer-from@2.1.1: 953 | resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} 954 | engines: {node: '>=14.0.0'} 955 | requiresBuild: true 956 | dependencies: 957 | '@smithy/is-array-buffer': 2.1.1 958 | tslib: 2.6.2 959 | dev: false 960 | optional: true 961 | 962 | /@smithy/util-config-provider@2.2.1: 963 | resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} 964 | engines: {node: '>=14.0.0'} 965 | requiresBuild: true 966 | dependencies: 967 | tslib: 2.6.2 968 | dev: false 969 | optional: true 970 | 971 | /@smithy/util-defaults-mode-browser@2.1.1: 972 | resolution: {integrity: sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==} 973 | engines: {node: '>= 10.0.0'} 974 | requiresBuild: true 975 | dependencies: 976 | '@smithy/property-provider': 2.1.1 977 | '@smithy/smithy-client': 2.3.1 978 | '@smithy/types': 2.9.1 979 | bowser: 2.11.0 980 | tslib: 2.6.2 981 | dev: false 982 | optional: true 983 | 984 | /@smithy/util-defaults-mode-node@2.1.1: 985 | resolution: {integrity: sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==} 986 | engines: {node: '>= 10.0.0'} 987 | requiresBuild: true 988 | dependencies: 989 | '@smithy/config-resolver': 2.1.1 990 | '@smithy/credential-provider-imds': 2.2.1 991 | '@smithy/node-config-provider': 2.2.1 992 | '@smithy/property-provider': 2.1.1 993 | '@smithy/smithy-client': 2.3.1 994 | '@smithy/types': 2.9.1 995 | tslib: 2.6.2 996 | dev: false 997 | optional: true 998 | 999 | /@smithy/util-endpoints@1.1.1: 1000 | resolution: {integrity: sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==} 1001 | engines: {node: '>= 14.0.0'} 1002 | requiresBuild: true 1003 | dependencies: 1004 | '@smithy/node-config-provider': 2.2.1 1005 | '@smithy/types': 2.9.1 1006 | tslib: 2.6.2 1007 | dev: false 1008 | optional: true 1009 | 1010 | /@smithy/util-hex-encoding@2.1.1: 1011 | resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} 1012 | engines: {node: '>=14.0.0'} 1013 | requiresBuild: true 1014 | dependencies: 1015 | tslib: 2.6.2 1016 | dev: false 1017 | optional: true 1018 | 1019 | /@smithy/util-middleware@2.1.1: 1020 | resolution: {integrity: sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==} 1021 | engines: {node: '>=14.0.0'} 1022 | requiresBuild: true 1023 | dependencies: 1024 | '@smithy/types': 2.9.1 1025 | tslib: 2.6.2 1026 | dev: false 1027 | optional: true 1028 | 1029 | /@smithy/util-retry@2.1.1: 1030 | resolution: {integrity: sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==} 1031 | engines: {node: '>= 14.0.0'} 1032 | requiresBuild: true 1033 | dependencies: 1034 | '@smithy/service-error-classification': 2.1.1 1035 | '@smithy/types': 2.9.1 1036 | tslib: 2.6.2 1037 | dev: false 1038 | optional: true 1039 | 1040 | /@smithy/util-stream@2.1.1: 1041 | resolution: {integrity: sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==} 1042 | engines: {node: '>=14.0.0'} 1043 | requiresBuild: true 1044 | dependencies: 1045 | '@smithy/fetch-http-handler': 2.4.1 1046 | '@smithy/node-http-handler': 2.3.1 1047 | '@smithy/types': 2.9.1 1048 | '@smithy/util-base64': 2.1.1 1049 | '@smithy/util-buffer-from': 2.1.1 1050 | '@smithy/util-hex-encoding': 2.1.1 1051 | '@smithy/util-utf8': 2.1.1 1052 | tslib: 2.6.2 1053 | dev: false 1054 | optional: true 1055 | 1056 | /@smithy/util-uri-escape@2.1.1: 1057 | resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} 1058 | engines: {node: '>=14.0.0'} 1059 | requiresBuild: true 1060 | dependencies: 1061 | tslib: 2.6.2 1062 | dev: false 1063 | optional: true 1064 | 1065 | /@smithy/util-utf8@2.1.1: 1066 | resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} 1067 | engines: {node: '>=14.0.0'} 1068 | requiresBuild: true 1069 | dependencies: 1070 | '@smithy/util-buffer-from': 2.1.1 1071 | tslib: 2.6.2 1072 | dev: false 1073 | optional: true 1074 | 1075 | /@types/bcryptjs@2.4.6: 1076 | resolution: {integrity: sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==} 1077 | dev: true 1078 | 1079 | /@types/body-parser@1.19.5: 1080 | resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 1081 | dependencies: 1082 | '@types/connect': 3.4.38 1083 | '@types/node': 20.11.6 1084 | dev: true 1085 | 1086 | /@types/connect@3.4.38: 1087 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 1088 | dependencies: 1089 | '@types/node': 20.11.6 1090 | dev: true 1091 | 1092 | /@types/cors@2.8.17: 1093 | resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} 1094 | dependencies: 1095 | '@types/node': 20.11.6 1096 | dev: true 1097 | 1098 | /@types/express-serve-static-core@4.17.41: 1099 | resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} 1100 | dependencies: 1101 | '@types/node': 20.11.6 1102 | '@types/qs': 6.9.11 1103 | '@types/range-parser': 1.2.7 1104 | '@types/send': 0.17.4 1105 | dev: true 1106 | 1107 | /@types/express@4.17.21: 1108 | resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} 1109 | dependencies: 1110 | '@types/body-parser': 1.19.5 1111 | '@types/express-serve-static-core': 4.17.41 1112 | '@types/qs': 6.9.11 1113 | '@types/serve-static': 1.15.5 1114 | dev: true 1115 | 1116 | /@types/http-errors@2.0.4: 1117 | resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} 1118 | dev: true 1119 | 1120 | /@types/jsonwebtoken@8.5.9: 1121 | resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} 1122 | dependencies: 1123 | '@types/node': 20.11.6 1124 | dev: true 1125 | 1126 | /@types/mime@1.3.5: 1127 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 1128 | dev: true 1129 | 1130 | /@types/mime@3.0.4: 1131 | resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} 1132 | dev: true 1133 | 1134 | /@types/multer@1.4.11: 1135 | resolution: {integrity: sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==} 1136 | dependencies: 1137 | '@types/express': 4.17.21 1138 | dev: true 1139 | 1140 | /@types/node@20.11.6: 1141 | resolution: {integrity: sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q==} 1142 | dependencies: 1143 | undici-types: 5.26.5 1144 | 1145 | /@types/qs@6.9.11: 1146 | resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} 1147 | dev: true 1148 | 1149 | /@types/range-parser@1.2.7: 1150 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 1151 | dev: true 1152 | 1153 | /@types/send@0.17.4: 1154 | resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} 1155 | dependencies: 1156 | '@types/mime': 1.3.5 1157 | '@types/node': 20.11.6 1158 | dev: true 1159 | 1160 | /@types/serve-static@1.15.5: 1161 | resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} 1162 | dependencies: 1163 | '@types/http-errors': 2.0.4 1164 | '@types/mime': 3.0.4 1165 | '@types/node': 20.11.6 1166 | dev: true 1167 | 1168 | /@types/webidl-conversions@7.0.3: 1169 | resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} 1170 | dev: false 1171 | 1172 | /@types/whatwg-url@8.2.2: 1173 | resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} 1174 | dependencies: 1175 | '@types/node': 20.11.6 1176 | '@types/webidl-conversions': 7.0.3 1177 | dev: false 1178 | 1179 | /accepts@1.3.8: 1180 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 1181 | engines: {node: '>= 0.6'} 1182 | dependencies: 1183 | mime-types: 2.1.35 1184 | negotiator: 0.6.3 1185 | dev: false 1186 | 1187 | /append-field@1.0.0: 1188 | resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} 1189 | dev: false 1190 | 1191 | /array-flatten@1.1.1: 1192 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 1193 | dev: false 1194 | 1195 | /base64-js@1.5.1: 1196 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 1197 | dev: false 1198 | 1199 | /bcryptjs@2.4.3: 1200 | resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} 1201 | dev: false 1202 | 1203 | /body-parser@1.20.1: 1204 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} 1205 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1206 | dependencies: 1207 | bytes: 3.1.2 1208 | content-type: 1.0.5 1209 | debug: 2.6.9 1210 | depd: 2.0.0 1211 | destroy: 1.2.0 1212 | http-errors: 2.0.0 1213 | iconv-lite: 0.4.24 1214 | on-finished: 2.4.1 1215 | qs: 6.11.0 1216 | raw-body: 2.5.1 1217 | type-is: 1.6.18 1218 | unpipe: 1.0.0 1219 | transitivePeerDependencies: 1220 | - supports-color 1221 | dev: false 1222 | 1223 | /bowser@2.11.0: 1224 | resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} 1225 | requiresBuild: true 1226 | dev: false 1227 | optional: true 1228 | 1229 | /bson@4.7.2: 1230 | resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} 1231 | engines: {node: '>=6.9.0'} 1232 | dependencies: 1233 | buffer: 5.7.1 1234 | dev: false 1235 | 1236 | /buffer-equal-constant-time@1.0.1: 1237 | resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} 1238 | dev: false 1239 | 1240 | /buffer-from@1.1.2: 1241 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1242 | dev: false 1243 | 1244 | /buffer@5.7.1: 1245 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 1246 | dependencies: 1247 | base64-js: 1.5.1 1248 | ieee754: 1.2.1 1249 | dev: false 1250 | 1251 | /busboy@1.6.0: 1252 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 1253 | engines: {node: '>=10.16.0'} 1254 | dependencies: 1255 | streamsearch: 1.1.0 1256 | dev: false 1257 | 1258 | /bytes@3.1.2: 1259 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 1260 | engines: {node: '>= 0.8'} 1261 | dev: false 1262 | 1263 | /call-bind@1.0.5: 1264 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 1265 | dependencies: 1266 | function-bind: 1.1.2 1267 | get-intrinsic: 1.2.2 1268 | set-function-length: 1.2.0 1269 | dev: false 1270 | 1271 | /concat-stream@1.6.2: 1272 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} 1273 | engines: {'0': node >= 0.8} 1274 | dependencies: 1275 | buffer-from: 1.1.2 1276 | inherits: 2.0.4 1277 | readable-stream: 2.3.8 1278 | typedarray: 0.0.6 1279 | dev: false 1280 | 1281 | /content-disposition@0.5.4: 1282 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 1283 | engines: {node: '>= 0.6'} 1284 | dependencies: 1285 | safe-buffer: 5.2.1 1286 | dev: false 1287 | 1288 | /content-type@1.0.5: 1289 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 1290 | engines: {node: '>= 0.6'} 1291 | dev: false 1292 | 1293 | /cookie-signature@1.0.6: 1294 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 1295 | dev: false 1296 | 1297 | /cookie@0.5.0: 1298 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1299 | engines: {node: '>= 0.6'} 1300 | dev: false 1301 | 1302 | /core-util-is@1.0.3: 1303 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 1304 | dev: false 1305 | 1306 | /cors@2.8.5: 1307 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 1308 | engines: {node: '>= 0.10'} 1309 | dependencies: 1310 | object-assign: 4.1.1 1311 | vary: 1.1.2 1312 | dev: false 1313 | 1314 | /debug@2.6.9: 1315 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1316 | peerDependencies: 1317 | supports-color: '*' 1318 | peerDependenciesMeta: 1319 | supports-color: 1320 | optional: true 1321 | dependencies: 1322 | ms: 2.0.0 1323 | dev: false 1324 | 1325 | /debug@4.3.4: 1326 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1327 | engines: {node: '>=6.0'} 1328 | peerDependencies: 1329 | supports-color: '*' 1330 | peerDependenciesMeta: 1331 | supports-color: 1332 | optional: true 1333 | dependencies: 1334 | ms: 2.1.2 1335 | dev: false 1336 | 1337 | /define-data-property@1.1.1: 1338 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 1339 | engines: {node: '>= 0.4'} 1340 | dependencies: 1341 | get-intrinsic: 1.2.2 1342 | gopd: 1.0.1 1343 | has-property-descriptors: 1.0.1 1344 | dev: false 1345 | 1346 | /depd@2.0.0: 1347 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1348 | engines: {node: '>= 0.8'} 1349 | dev: false 1350 | 1351 | /destroy@1.2.0: 1352 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1353 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1354 | dev: false 1355 | 1356 | /dotenv@16.4.0: 1357 | resolution: {integrity: sha512-WvImr5kpN5NGNn7KaDjJnLTh5rDVLZiDf/YLA8T1ZEZEBZNEDOE+mnkS0PVjPax8ZxBP5zC5SLMB3/9VV5de9g==} 1358 | engines: {node: '>=12'} 1359 | dev: false 1360 | 1361 | /ecdsa-sig-formatter@1.0.11: 1362 | resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} 1363 | dependencies: 1364 | safe-buffer: 5.2.1 1365 | dev: false 1366 | 1367 | /ee-first@1.1.1: 1368 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1369 | dev: false 1370 | 1371 | /encodeurl@1.0.2: 1372 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1373 | engines: {node: '>= 0.8'} 1374 | dev: false 1375 | 1376 | /escape-html@1.0.3: 1377 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1378 | dev: false 1379 | 1380 | /etag@1.8.1: 1381 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 1382 | engines: {node: '>= 0.6'} 1383 | dev: false 1384 | 1385 | /express@4.18.2: 1386 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} 1387 | engines: {node: '>= 0.10.0'} 1388 | dependencies: 1389 | accepts: 1.3.8 1390 | array-flatten: 1.1.1 1391 | body-parser: 1.20.1 1392 | content-disposition: 0.5.4 1393 | content-type: 1.0.5 1394 | cookie: 0.5.0 1395 | cookie-signature: 1.0.6 1396 | debug: 2.6.9 1397 | depd: 2.0.0 1398 | encodeurl: 1.0.2 1399 | escape-html: 1.0.3 1400 | etag: 1.8.1 1401 | finalhandler: 1.2.0 1402 | fresh: 0.5.2 1403 | http-errors: 2.0.0 1404 | merge-descriptors: 1.0.1 1405 | methods: 1.1.2 1406 | on-finished: 2.4.1 1407 | parseurl: 1.3.3 1408 | path-to-regexp: 0.1.7 1409 | proxy-addr: 2.0.7 1410 | qs: 6.11.0 1411 | range-parser: 1.2.1 1412 | safe-buffer: 5.2.1 1413 | send: 0.18.0 1414 | serve-static: 1.15.0 1415 | setprototypeof: 1.2.0 1416 | statuses: 2.0.1 1417 | type-is: 1.6.18 1418 | utils-merge: 1.0.1 1419 | vary: 1.1.2 1420 | transitivePeerDependencies: 1421 | - supports-color 1422 | dev: false 1423 | 1424 | /fast-xml-parser@4.2.5: 1425 | resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} 1426 | hasBin: true 1427 | requiresBuild: true 1428 | dependencies: 1429 | strnum: 1.0.5 1430 | dev: false 1431 | optional: true 1432 | 1433 | /finalhandler@1.2.0: 1434 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} 1435 | engines: {node: '>= 0.8'} 1436 | dependencies: 1437 | debug: 2.6.9 1438 | encodeurl: 1.0.2 1439 | escape-html: 1.0.3 1440 | on-finished: 2.4.1 1441 | parseurl: 1.3.3 1442 | statuses: 2.0.1 1443 | unpipe: 1.0.0 1444 | transitivePeerDependencies: 1445 | - supports-color 1446 | dev: false 1447 | 1448 | /forwarded@0.2.0: 1449 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1450 | engines: {node: '>= 0.6'} 1451 | dev: false 1452 | 1453 | /fresh@0.5.2: 1454 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 1455 | engines: {node: '>= 0.6'} 1456 | dev: false 1457 | 1458 | /function-bind@1.1.2: 1459 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1460 | dev: false 1461 | 1462 | /get-intrinsic@1.2.2: 1463 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 1464 | dependencies: 1465 | function-bind: 1.1.2 1466 | has-proto: 1.0.1 1467 | has-symbols: 1.0.3 1468 | hasown: 2.0.0 1469 | dev: false 1470 | 1471 | /gopd@1.0.1: 1472 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1473 | dependencies: 1474 | get-intrinsic: 1.2.2 1475 | dev: false 1476 | 1477 | /has-property-descriptors@1.0.1: 1478 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 1479 | dependencies: 1480 | get-intrinsic: 1.2.2 1481 | dev: false 1482 | 1483 | /has-proto@1.0.1: 1484 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1485 | engines: {node: '>= 0.4'} 1486 | dev: false 1487 | 1488 | /has-symbols@1.0.3: 1489 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1490 | engines: {node: '>= 0.4'} 1491 | dev: false 1492 | 1493 | /hasown@2.0.0: 1494 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1495 | engines: {node: '>= 0.4'} 1496 | dependencies: 1497 | function-bind: 1.1.2 1498 | dev: false 1499 | 1500 | /http-errors@2.0.0: 1501 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 1502 | engines: {node: '>= 0.8'} 1503 | dependencies: 1504 | depd: 2.0.0 1505 | inherits: 2.0.4 1506 | setprototypeof: 1.2.0 1507 | statuses: 2.0.1 1508 | toidentifier: 1.0.1 1509 | dev: false 1510 | 1511 | /iconv-lite@0.4.24: 1512 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1513 | engines: {node: '>=0.10.0'} 1514 | dependencies: 1515 | safer-buffer: 2.1.2 1516 | dev: false 1517 | 1518 | /ieee754@1.2.1: 1519 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1520 | dev: false 1521 | 1522 | /inherits@2.0.4: 1523 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1524 | dev: false 1525 | 1526 | /ip@2.0.0: 1527 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} 1528 | dev: false 1529 | 1530 | /ipaddr.js@1.9.1: 1531 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1532 | engines: {node: '>= 0.10'} 1533 | dev: false 1534 | 1535 | /isarray@1.0.0: 1536 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1537 | dev: false 1538 | 1539 | /jsonwebtoken@8.5.1: 1540 | resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} 1541 | engines: {node: '>=4', npm: '>=1.4.28'} 1542 | dependencies: 1543 | jws: 3.2.2 1544 | lodash.includes: 4.3.0 1545 | lodash.isboolean: 3.0.3 1546 | lodash.isinteger: 4.0.4 1547 | lodash.isnumber: 3.0.3 1548 | lodash.isplainobject: 4.0.6 1549 | lodash.isstring: 4.0.1 1550 | lodash.once: 4.1.1 1551 | ms: 2.1.3 1552 | semver: 5.7.2 1553 | dev: false 1554 | 1555 | /jwa@1.4.1: 1556 | resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} 1557 | dependencies: 1558 | buffer-equal-constant-time: 1.0.1 1559 | ecdsa-sig-formatter: 1.0.11 1560 | safe-buffer: 5.2.1 1561 | dev: false 1562 | 1563 | /jws@3.2.2: 1564 | resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} 1565 | dependencies: 1566 | jwa: 1.4.1 1567 | safe-buffer: 5.2.1 1568 | dev: false 1569 | 1570 | /kareem@2.5.1: 1571 | resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} 1572 | engines: {node: '>=12.0.0'} 1573 | dev: false 1574 | 1575 | /lodash.includes@4.3.0: 1576 | resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} 1577 | dev: false 1578 | 1579 | /lodash.isboolean@3.0.3: 1580 | resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} 1581 | dev: false 1582 | 1583 | /lodash.isinteger@4.0.4: 1584 | resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} 1585 | dev: false 1586 | 1587 | /lodash.isnumber@3.0.3: 1588 | resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} 1589 | dev: false 1590 | 1591 | /lodash.isplainobject@4.0.6: 1592 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} 1593 | dev: false 1594 | 1595 | /lodash.isstring@4.0.1: 1596 | resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} 1597 | dev: false 1598 | 1599 | /lodash.once@4.1.1: 1600 | resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} 1601 | dev: false 1602 | 1603 | /media-typer@0.3.0: 1604 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 1605 | engines: {node: '>= 0.6'} 1606 | dev: false 1607 | 1608 | /memory-pager@1.5.0: 1609 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} 1610 | requiresBuild: true 1611 | dev: false 1612 | optional: true 1613 | 1614 | /merge-descriptors@1.0.1: 1615 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 1616 | dev: false 1617 | 1618 | /methods@1.1.2: 1619 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 1620 | engines: {node: '>= 0.6'} 1621 | dev: false 1622 | 1623 | /mime-db@1.52.0: 1624 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1625 | engines: {node: '>= 0.6'} 1626 | dev: false 1627 | 1628 | /mime-types@2.1.35: 1629 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1630 | engines: {node: '>= 0.6'} 1631 | dependencies: 1632 | mime-db: 1.52.0 1633 | dev: false 1634 | 1635 | /mime@1.6.0: 1636 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1637 | engines: {node: '>=4'} 1638 | hasBin: true 1639 | dev: false 1640 | 1641 | /minimist@1.2.8: 1642 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1643 | dev: false 1644 | 1645 | /mkdirp@0.5.6: 1646 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 1647 | hasBin: true 1648 | dependencies: 1649 | minimist: 1.2.8 1650 | dev: false 1651 | 1652 | /mongodb-connection-string-url@2.6.0: 1653 | resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} 1654 | dependencies: 1655 | '@types/whatwg-url': 8.2.2 1656 | whatwg-url: 11.0.0 1657 | dev: false 1658 | 1659 | /mongodb@4.17.2: 1660 | resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==} 1661 | engines: {node: '>=12.9.0'} 1662 | dependencies: 1663 | bson: 4.7.2 1664 | mongodb-connection-string-url: 2.6.0 1665 | socks: 2.7.1 1666 | optionalDependencies: 1667 | '@aws-sdk/credential-providers': 3.498.0 1668 | '@mongodb-js/saslprep': 1.1.4 1669 | transitivePeerDependencies: 1670 | - aws-crt 1671 | dev: false 1672 | 1673 | /mongoose@6.12.6: 1674 | resolution: {integrity: sha512-VFxDnWj8esgswwplmpQYMT+lYcvuIhl76WDLz/vgp41/FOhBPM/n3GjyztK8R3r2ljsM6kudvKgqLhfcZEih1Q==} 1675 | engines: {node: '>=12.0.0'} 1676 | dependencies: 1677 | bson: 4.7.2 1678 | kareem: 2.5.1 1679 | mongodb: 4.17.2 1680 | mpath: 0.9.0 1681 | mquery: 4.0.3 1682 | ms: 2.1.3 1683 | sift: 16.0.1 1684 | transitivePeerDependencies: 1685 | - aws-crt 1686 | - supports-color 1687 | dev: false 1688 | 1689 | /mpath@0.9.0: 1690 | resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} 1691 | engines: {node: '>=4.0.0'} 1692 | dev: false 1693 | 1694 | /mquery@4.0.3: 1695 | resolution: {integrity: sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==} 1696 | engines: {node: '>=12.0.0'} 1697 | dependencies: 1698 | debug: 4.3.4 1699 | transitivePeerDependencies: 1700 | - supports-color 1701 | dev: false 1702 | 1703 | /ms@2.0.0: 1704 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1705 | dev: false 1706 | 1707 | /ms@2.1.2: 1708 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1709 | dev: false 1710 | 1711 | /ms@2.1.3: 1712 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1713 | dev: false 1714 | 1715 | /multer@1.4.5-lts.1: 1716 | resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} 1717 | engines: {node: '>= 6.0.0'} 1718 | dependencies: 1719 | append-field: 1.0.0 1720 | busboy: 1.6.0 1721 | concat-stream: 1.6.2 1722 | mkdirp: 0.5.6 1723 | object-assign: 4.1.1 1724 | type-is: 1.6.18 1725 | xtend: 4.0.2 1726 | dev: false 1727 | 1728 | /negotiator@0.6.3: 1729 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 1730 | engines: {node: '>= 0.6'} 1731 | dev: false 1732 | 1733 | /object-assign@4.1.1: 1734 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1735 | engines: {node: '>=0.10.0'} 1736 | dev: false 1737 | 1738 | /object-inspect@1.13.1: 1739 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1740 | dev: false 1741 | 1742 | /on-finished@2.4.1: 1743 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1744 | engines: {node: '>= 0.8'} 1745 | dependencies: 1746 | ee-first: 1.1.1 1747 | dev: false 1748 | 1749 | /parseurl@1.3.3: 1750 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1751 | engines: {node: '>= 0.8'} 1752 | dev: false 1753 | 1754 | /path-to-regexp@0.1.7: 1755 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} 1756 | dev: false 1757 | 1758 | /process-nextick-args@2.0.1: 1759 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1760 | dev: false 1761 | 1762 | /proxy-addr@2.0.7: 1763 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1764 | engines: {node: '>= 0.10'} 1765 | dependencies: 1766 | forwarded: 0.2.0 1767 | ipaddr.js: 1.9.1 1768 | dev: false 1769 | 1770 | /punycode@2.3.1: 1771 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1772 | engines: {node: '>=6'} 1773 | dev: false 1774 | 1775 | /qs@6.11.0: 1776 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 1777 | engines: {node: '>=0.6'} 1778 | dependencies: 1779 | side-channel: 1.0.4 1780 | dev: false 1781 | 1782 | /range-parser@1.2.1: 1783 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1784 | engines: {node: '>= 0.6'} 1785 | dev: false 1786 | 1787 | /raw-body@2.5.1: 1788 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} 1789 | engines: {node: '>= 0.8'} 1790 | dependencies: 1791 | bytes: 3.1.2 1792 | http-errors: 2.0.0 1793 | iconv-lite: 0.4.24 1794 | unpipe: 1.0.0 1795 | dev: false 1796 | 1797 | /readable-stream@2.3.8: 1798 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1799 | dependencies: 1800 | core-util-is: 1.0.3 1801 | inherits: 2.0.4 1802 | isarray: 1.0.0 1803 | process-nextick-args: 2.0.1 1804 | safe-buffer: 5.1.2 1805 | string_decoder: 1.1.1 1806 | util-deprecate: 1.0.2 1807 | dev: false 1808 | 1809 | /safe-buffer@5.1.2: 1810 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1811 | dev: false 1812 | 1813 | /safe-buffer@5.2.1: 1814 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1815 | dev: false 1816 | 1817 | /safer-buffer@2.1.2: 1818 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1819 | dev: false 1820 | 1821 | /semver@5.7.2: 1822 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1823 | hasBin: true 1824 | dev: false 1825 | 1826 | /send@0.18.0: 1827 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} 1828 | engines: {node: '>= 0.8.0'} 1829 | dependencies: 1830 | debug: 2.6.9 1831 | depd: 2.0.0 1832 | destroy: 1.2.0 1833 | encodeurl: 1.0.2 1834 | escape-html: 1.0.3 1835 | etag: 1.8.1 1836 | fresh: 0.5.2 1837 | http-errors: 2.0.0 1838 | mime: 1.6.0 1839 | ms: 2.1.3 1840 | on-finished: 2.4.1 1841 | range-parser: 1.2.1 1842 | statuses: 2.0.1 1843 | transitivePeerDependencies: 1844 | - supports-color 1845 | dev: false 1846 | 1847 | /serve-static@1.15.0: 1848 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} 1849 | engines: {node: '>= 0.8.0'} 1850 | dependencies: 1851 | encodeurl: 1.0.2 1852 | escape-html: 1.0.3 1853 | parseurl: 1.3.3 1854 | send: 0.18.0 1855 | transitivePeerDependencies: 1856 | - supports-color 1857 | dev: false 1858 | 1859 | /set-function-length@1.2.0: 1860 | resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} 1861 | engines: {node: '>= 0.4'} 1862 | dependencies: 1863 | define-data-property: 1.1.1 1864 | function-bind: 1.1.2 1865 | get-intrinsic: 1.2.2 1866 | gopd: 1.0.1 1867 | has-property-descriptors: 1.0.1 1868 | dev: false 1869 | 1870 | /setprototypeof@1.2.0: 1871 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1872 | dev: false 1873 | 1874 | /side-channel@1.0.4: 1875 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1876 | dependencies: 1877 | call-bind: 1.0.5 1878 | get-intrinsic: 1.2.2 1879 | object-inspect: 1.13.1 1880 | dev: false 1881 | 1882 | /sift@16.0.1: 1883 | resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} 1884 | dev: false 1885 | 1886 | /smart-buffer@4.2.0: 1887 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 1888 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 1889 | dev: false 1890 | 1891 | /socks@2.7.1: 1892 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} 1893 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} 1894 | dependencies: 1895 | ip: 2.0.0 1896 | smart-buffer: 4.2.0 1897 | dev: false 1898 | 1899 | /sparse-bitfield@3.0.3: 1900 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} 1901 | requiresBuild: true 1902 | dependencies: 1903 | memory-pager: 1.5.0 1904 | dev: false 1905 | optional: true 1906 | 1907 | /statuses@2.0.1: 1908 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1909 | engines: {node: '>= 0.8'} 1910 | dev: false 1911 | 1912 | /streamsearch@1.1.0: 1913 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1914 | engines: {node: '>=10.0.0'} 1915 | dev: false 1916 | 1917 | /string_decoder@1.1.1: 1918 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1919 | dependencies: 1920 | safe-buffer: 5.1.2 1921 | dev: false 1922 | 1923 | /strnum@1.0.5: 1924 | resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} 1925 | requiresBuild: true 1926 | dev: false 1927 | optional: true 1928 | 1929 | /toidentifier@1.0.1: 1930 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1931 | engines: {node: '>=0.6'} 1932 | dev: false 1933 | 1934 | /tr46@3.0.0: 1935 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} 1936 | engines: {node: '>=12'} 1937 | dependencies: 1938 | punycode: 2.3.1 1939 | dev: false 1940 | 1941 | /tslib@1.14.1: 1942 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1943 | requiresBuild: true 1944 | dev: false 1945 | optional: true 1946 | 1947 | /tslib@2.6.2: 1948 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1949 | requiresBuild: true 1950 | dev: false 1951 | optional: true 1952 | 1953 | /type-is@1.6.18: 1954 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1955 | engines: {node: '>= 0.6'} 1956 | dependencies: 1957 | media-typer: 0.3.0 1958 | mime-types: 2.1.35 1959 | dev: false 1960 | 1961 | /typedarray@0.0.6: 1962 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} 1963 | dev: false 1964 | 1965 | /undici-types@5.26.5: 1966 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1967 | 1968 | /unpipe@1.0.0: 1969 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1970 | engines: {node: '>= 0.8'} 1971 | dev: false 1972 | 1973 | /util-deprecate@1.0.2: 1974 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1975 | dev: false 1976 | 1977 | /utils-merge@1.0.1: 1978 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 1979 | engines: {node: '>= 0.4.0'} 1980 | dev: false 1981 | 1982 | /uuid@8.3.2: 1983 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 1984 | hasBin: true 1985 | requiresBuild: true 1986 | dev: false 1987 | optional: true 1988 | 1989 | /vary@1.1.2: 1990 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1991 | engines: {node: '>= 0.8'} 1992 | dev: false 1993 | 1994 | /webidl-conversions@7.0.0: 1995 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 1996 | engines: {node: '>=12'} 1997 | dev: false 1998 | 1999 | /whatwg-url@11.0.0: 2000 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} 2001 | engines: {node: '>=12'} 2002 | dependencies: 2003 | tr46: 3.0.0 2004 | webidl-conversions: 7.0.0 2005 | dev: false 2006 | 2007 | /xtend@4.0.2: 2008 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 2009 | engines: {node: '>=0.4'} 2010 | dev: false 2011 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import "dotenv/config"; 2 | import express from "express"; 3 | import cors from "cors"; 4 | import { router } from "./routes"; 5 | import db from "./config/mongo"; 6 | const PORT = process.env.PORT || 3001; 7 | const app = express(); 8 | app.use(cors()); 9 | app.use(express.json()); 10 | app.use(router); 11 | db().then(() => console.log("Conexion Ready")); 12 | app.listen(PORT, () => console.log(`Listo por el puerto ${PORT}`)); 13 | -------------------------------------------------------------------------------- /src/config/mongo.ts: -------------------------------------------------------------------------------- 1 | import "dotenv/config"; 2 | import mongoose, { connect } from "mongoose"; 3 | 4 | async function dbConnect(): Promise { 5 | mongoose.set('strictQuery', false); 6 | const DB_URI = process.env.DB_URI; 7 | await connect(DB_URI); 8 | } 9 | 10 | export default dbConnect; 11 | -------------------------------------------------------------------------------- /src/controllers/auth.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { registerNewUser, loginUser } from "../services/auth"; 3 | 4 | const registerCtrl = async ({ body }: Request, res: Response) => { 5 | const responseUser = await registerNewUser(body); 6 | res.send(responseUser); 7 | }; 8 | 9 | const loginCtrl = async ({ body }: Request, res: Response) => { 10 | const { email, password } = body; 11 | const responseUser = await loginUser({ email, password }); 12 | 13 | if (responseUser === "PASSWORD_INCORRECT") { 14 | res.status(403); 15 | res.send(responseUser); 16 | } else { 17 | res.send(responseUser); 18 | } 19 | }; 20 | 21 | export { loginCtrl, registerCtrl }; 22 | -------------------------------------------------------------------------------- /src/controllers/blog.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import dbConnect from "../config/mongo"; 3 | import { handleHttp } from "../utils/error.handle"; 4 | 5 | const getItem = (req: Request, res: Response) => { 6 | try { 7 | } catch (e) { 8 | handleHttp(res, "ERROR_GET_BLOG"); 9 | } 10 | }; 11 | 12 | const getItems = (req: Request, res: Response) => { 13 | try { 14 | } catch (e) { 15 | handleHttp(res, "ERROR_GET_BLOGS"); 16 | } 17 | }; 18 | 19 | const updateItem = (req: Request, res: Response) => { 20 | try { 21 | } catch (e) { 22 | handleHttp(res, "ERROR_UPDATE_BLOG"); 23 | } 24 | }; 25 | 26 | const postItem = ({ body }: Request, res: Response) => { 27 | try { 28 | res.send(body); 29 | } catch (e) { 30 | handleHttp(res, "ERROR_POST_BLOG"); 31 | } 32 | }; 33 | 34 | const deleteItem = (req: Request, res: Response) => { 35 | try { 36 | } catch (e) { 37 | handleHttp(res, "ERROR_DELETE_BLOG"); 38 | } 39 | }; 40 | 41 | export { getItem, getItems, postItem, updateItem, deleteItem }; 42 | -------------------------------------------------------------------------------- /src/controllers/item.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import dbConnect from "../config/mongo"; 3 | import { 4 | insertCar, 5 | getCars, 6 | getCar, 7 | updateCar, 8 | deleteCar, 9 | } from "../services/item"; 10 | import { handleHttp } from "../utils/error.handle"; 11 | 12 | const getItem = async ({ params }: Request, res: Response) => { 13 | try { 14 | const { id } = params; 15 | const response = await getCar(id); 16 | const data = response ? response : "NOT_FOUND"; 17 | res.send(data); 18 | } catch (e) { 19 | handleHttp(res, "ERROR_GET_ITEM"); 20 | } 21 | }; 22 | 23 | const getItems = async (req: Request, res: Response) => { 24 | try { 25 | const response = await getCars(); 26 | res.send(response); 27 | } catch (e) { 28 | handleHttp(res, "ERROR_GET_ITEMS"); 29 | } 30 | }; 31 | 32 | const updateItem = async ({ params, body }: Request, res: Response) => { 33 | try { 34 | const { id } = params; 35 | const response = await updateCar(id, body); 36 | res.send(response); 37 | } catch (e) { 38 | handleHttp(res, "ERROR_UPDATE_ITEM"); 39 | } 40 | }; 41 | 42 | const postItem = async ({ body }: Request, res: Response) => { 43 | try { 44 | const responseItem = await insertCar(body); 45 | res.send(responseItem); 46 | } catch (e) { 47 | handleHttp(res, "ERROR_POST_ITEM", e); 48 | } 49 | }; 50 | 51 | const deleteItem = async ({ params }: Request, res: Response) => { 52 | try { 53 | const { id } = params; 54 | const response = await deleteCar(id); 55 | res.send(response); 56 | } catch (e) { 57 | handleHttp(res, "ERROR_DELETE_ITEM"); 58 | } 59 | }; 60 | 61 | export { getItem, getItems, postItem, updateItem, deleteItem }; 62 | -------------------------------------------------------------------------------- /src/controllers/order.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { JwtPayload } from "jsonwebtoken"; 3 | import { RequestExt } from "../interfaces/req-ext"; 4 | import { handleHttp } from "../utils/error.handle"; 5 | 6 | const getItems = (req: RequestExt, res: Response) => { 7 | try { 8 | res.send({ 9 | data: "ESTO SOLO LO VE LAS PERSONS CON SESSION / JWT", 10 | user: req.user, 11 | }); 12 | } catch (e) { 13 | handleHttp(res, "ERROR_GET_BLOGS"); 14 | } 15 | }; 16 | 17 | export { getItems }; 18 | -------------------------------------------------------------------------------- /src/controllers/upload.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import dbConnect from "../config/mongo"; 3 | import { RequestExt } from "../interfaces/req-ext"; 4 | import { Storage } from "../interfaces/storage"; 5 | import { registerUpload } from "../services/storage"; 6 | import { handleHttp } from "../utils/error.handle"; 7 | 8 | const getFile = async (req: RequestExt, res: Response) => { 9 | try { 10 | const { user, file } = req; 11 | const dataToRegister: Storage = { 12 | fileName: `${file?.filename}`, 13 | idUser: `${user?.id}`, 14 | path: `${file?.path}`, 15 | }; 16 | const response = await registerUpload(dataToRegister); 17 | res.send(response); 18 | } catch (e) { 19 | handleHttp(res, "ERROR_GET_BLOG"); 20 | } 21 | }; 22 | 23 | export { getFile }; 24 | -------------------------------------------------------------------------------- /src/interfaces/auth.interface.ts: -------------------------------------------------------------------------------- 1 | export interface Auth { 2 | email: string; 3 | password: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/interfaces/car.interface.ts: -------------------------------------------------------------------------------- 1 | export interface Car { 2 | color: string; 3 | gas: "gasoline" | "electric"; 4 | year: number; 5 | description: string; 6 | price: number; 7 | name: string; 8 | } 9 | -------------------------------------------------------------------------------- /src/interfaces/req-ext.ts: -------------------------------------------------------------------------------- 1 | import { JwtPayload } from "jsonwebtoken"; 2 | import { Request } from "express"; 3 | 4 | export interface RequestExt extends Request { 5 | user?: JwtPayload | { id: string }; 6 | } 7 | -------------------------------------------------------------------------------- /src/interfaces/storage.ts: -------------------------------------------------------------------------------- 1 | export interface Storage { 2 | fileName: string; 3 | path: string; 4 | idUser: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/interfaces/user.interface.ts: -------------------------------------------------------------------------------- 1 | import { Auth } from "./auth.interface"; 2 | 3 | export interface User extends Auth { 4 | name: string; 5 | description: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/middleware/file.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | import multer, { diskStorage } from "multer"; 3 | 4 | const PATH_STORAGE = `${process.cwd()}/storage`; 5 | 6 | const storage = diskStorage({ 7 | destination(req: Request, file: Express.Multer.File, cb: any) { 8 | cb(null, PATH_STORAGE); 9 | }, 10 | filename(req: Request, file: Express.Multer.File, cb: any) { 11 | const ext = file.originalname.split(".").pop(); 12 | const fileNameRandom = `image-${Date.now()}.${ext}`; 13 | cb(null, fileNameRandom); 14 | }, 15 | }); 16 | 17 | const multerMiddleware = multer({ storage }); 18 | 19 | export default multerMiddleware; 20 | -------------------------------------------------------------------------------- /src/middleware/log.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from "express"; 2 | 3 | const logMiddleware = (req: Request, res: Response, next: NextFunction) => { 4 | const header = req.headers; 5 | const userAgent = header["user-agent"]; 6 | console.log("user-agent", userAgent); 7 | next(); 8 | }; 9 | 10 | export { logMiddleware }; 11 | -------------------------------------------------------------------------------- /src/middleware/session.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from "express"; 2 | import { JwtPayload } from "jsonwebtoken"; 3 | import { RequestExt } from "../interfaces/req-ext"; 4 | import { verifyToken } from "../utils/jwt.handle"; 5 | 6 | const checkJwt = (req: RequestExt, res: Response, next: NextFunction) => { 7 | try { 8 | const jwtByUser = req.headers.authorization || ""; 9 | const jwt = jwtByUser.split(" ").pop(); // 11111 10 | const isUser = verifyToken(`${jwt}`) as { id: string }; 11 | if (!isUser) { 12 | res.status(401); 13 | res.send("NO_TIENES_UN_JWT_VALIDO"); 14 | } else { 15 | req.user = isUser; 16 | next(); 17 | } 18 | } catch (e) { 19 | console.log({ e }); 20 | res.status(400); 21 | res.send("SESSION_NO_VALIDAD"); 22 | } 23 | }; 24 | 25 | export { checkJwt }; 26 | -------------------------------------------------------------------------------- /src/models/item.ts: -------------------------------------------------------------------------------- 1 | import { Schema, Types, model, Model } from "mongoose"; 2 | import { Car } from "../interfaces/car.interface"; 3 | 4 | const ItemSchema = new Schema( 5 | { 6 | name: { 7 | type: String, 8 | required: true, 9 | }, 10 | color: { 11 | type: String, 12 | required: true, 13 | }, 14 | gas: { 15 | type: String, 16 | enum: ["gasoline", "electric"], 17 | required: true, 18 | }, 19 | year: { 20 | type: Number, 21 | required: true, 22 | }, 23 | description: { 24 | type: String, 25 | required: true, 26 | }, 27 | price: { 28 | type: Number, 29 | required: true, 30 | }, 31 | }, 32 | { 33 | timestamps: true, 34 | versionKey: false, 35 | } 36 | ); 37 | 38 | const ItemModel = model("items", ItemSchema); 39 | export default ItemModel; 40 | -------------------------------------------------------------------------------- /src/models/storage.ts: -------------------------------------------------------------------------------- 1 | import { Schema, Types, model, Model } from "mongoose"; 2 | import { Storage } from "../interfaces/storage"; 3 | 4 | const StorageSchema = new Schema( 5 | { 6 | fileName: { 7 | type: String, 8 | }, 9 | idUser: { 10 | type: String, 11 | }, 12 | path: { 13 | type: String, 14 | }, 15 | }, 16 | { 17 | versionKey: false, 18 | timestamps: true, 19 | } 20 | ); 21 | 22 | const StorageModel = model("storage", StorageSchema); 23 | export default StorageModel; 24 | -------------------------------------------------------------------------------- /src/models/user.ts: -------------------------------------------------------------------------------- 1 | import { Schema, Types, model, Model } from "mongoose"; 2 | import { User } from "../interfaces/user.interface"; 3 | 4 | const UserSchema = new Schema( 5 | { 6 | name: { 7 | required: true, 8 | type: String, 9 | }, 10 | password: { 11 | type: String, 12 | required: true, 13 | }, 14 | email: { 15 | type: String, 16 | required: true, 17 | unique: true, 18 | }, 19 | description: { 20 | type: String, 21 | default: "Soy la descripcion", 22 | }, 23 | }, 24 | { 25 | versionKey: false, 26 | timestamps: true, 27 | } 28 | ); 29 | 30 | const UserModel = model("users", UserSchema); 31 | export default UserModel; 32 | -------------------------------------------------------------------------------- /src/routes/auth.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { registerCtrl, loginCtrl } from "../controllers/auth"; 3 | 4 | const router = Router(); 5 | router.post("/register", registerCtrl); 6 | router.post("/login", loginCtrl); 7 | 8 | export { router }; 9 | -------------------------------------------------------------------------------- /src/routes/blogs.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | 3 | const router = Router(); 4 | 5 | export { router }; 6 | -------------------------------------------------------------------------------- /src/routes/index.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { readdirSync } from "fs"; 3 | 4 | const PATH_ROUTER = `${__dirname}`; 5 | const router = Router(); 6 | 7 | /** 8 | * 9 | * @returns 10 | */ 11 | const cleanFileName = (fileName: string) => { 12 | const file = fileName.split(".").shift(); 13 | return file; 14 | }; 15 | 16 | readdirSync(PATH_ROUTER).filter((fileName) => { 17 | const cleanName = cleanFileName(fileName); 18 | if (cleanName !== "index") { 19 | import(`./${cleanName}`).then((moduleRouter) => { 20 | router.use(`/${cleanName}`, moduleRouter.router); 21 | }); 22 | } 23 | }); 24 | 25 | export { router }; 26 | -------------------------------------------------------------------------------- /src/routes/item.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | import { 3 | deleteItem, 4 | getItem, 5 | getItems, 6 | postItem, 7 | updateItem, 8 | } from "../controllers/item"; 9 | import { logMiddleware } from "../middleware/log"; 10 | 11 | const router = Router(); 12 | 13 | router.get("/", getItems); 14 | 15 | router.get("/:id", logMiddleware, getItem); 16 | 17 | router.post("/", postItem); 18 | 19 | router.put("/:id", updateItem); 20 | 21 | router.delete("/:id", deleteItem); 22 | 23 | export { router }; 24 | -------------------------------------------------------------------------------- /src/routes/order.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { getItems } from "../controllers/order"; 3 | import { checkJwt } from "../middleware/session"; 4 | /** 5 | * Esta ruta solo puede acceder las personas que tienen session activa! 6 | * que tenga un JWT valido! 7 | */ 8 | const router = Router(); 9 | 10 | router.get("/", checkJwt, getItems); 11 | 12 | export { router }; 13 | -------------------------------------------------------------------------------- /src/routes/upload.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { getFile } from "../controllers/upload"; 3 | import multerMiddleware from "../middleware/file"; 4 | import { checkJwt } from "../middleware/session"; 5 | 6 | const router = Router(); 7 | 8 | router.post("/", checkJwt, multerMiddleware.single("myfile"), getFile); 9 | 10 | export { router }; 11 | -------------------------------------------------------------------------------- /src/services/auth.ts: -------------------------------------------------------------------------------- 1 | import { Auth } from "../interfaces/auth.interface"; 2 | import { User } from "../interfaces/user.interface"; 3 | import UserModel from "../models/user"; 4 | import { encrypt, verified } from "../utils/bcrypt.handle"; 5 | import { generateToken } from "../utils/jwt.handle"; 6 | 7 | const registerNewUser = async ({ email, password, name }: User) => { 8 | const checkIs = await UserModel.findOne({ email }); 9 | if (checkIs) return "ALREADY_USER"; 10 | const passHash = await encrypt(password); //TODO 12345678 11 | const registerNewUser = await UserModel.create({ 12 | email, 13 | password: passHash, 14 | name, 15 | }); 16 | //TODO 123456 17 | return registerNewUser; 18 | }; 19 | 20 | const loginUser = async ({ email, password }: Auth) => { 21 | const checkIs = await UserModel.findOne({ email }); 22 | if (!checkIs) return "NOT_FOUND_USER"; 23 | 24 | const passwordHash = checkIs.password; //TODO el encriptado! 25 | const isCorrect = await verified(password, passwordHash); 26 | 27 | if (!isCorrect) return "PASSWORD_INCORRECT"; 28 | 29 | const token = generateToken(checkIs.email); 30 | const data = { 31 | token, 32 | user: checkIs, 33 | }; 34 | return data; 35 | }; 36 | 37 | export { registerNewUser, loginUser }; 38 | -------------------------------------------------------------------------------- /src/services/item.ts: -------------------------------------------------------------------------------- 1 | import { Car } from "../interfaces/car.interface"; 2 | import ItemModel from "../models/item"; 3 | 4 | const insertCar = async (item: Car) => { 5 | const responseInsert = await ItemModel.create(item); 6 | return responseInsert; 7 | }; 8 | 9 | const getCars = async () => { 10 | const responseItem = await ItemModel.find({}); 11 | return responseItem; 12 | }; 13 | 14 | const getCar = async (id: string) => { 15 | const responseItem = await ItemModel.findOne({ _id: id }); 16 | return responseItem; 17 | }; 18 | 19 | const updateCar = async (id: string, data: Car) => { 20 | const responseItem = await ItemModel.findOneAndUpdate({ _id: id }, data, { 21 | new: true, 22 | }); 23 | return responseItem; 24 | }; 25 | 26 | const deleteCar = async (id: string) => { 27 | const responseItem = await ItemModel.remove({ _id: id }); 28 | return responseItem; 29 | }; 30 | 31 | export { insertCar, getCars, getCar, updateCar, deleteCar }; 32 | -------------------------------------------------------------------------------- /src/services/order.ts: -------------------------------------------------------------------------------- 1 | import { Car } from "../interfaces/car.interface"; 2 | import ItemModel from "../models/item"; 3 | 4 | const getOrders = async () => { 5 | const responseItem = await ItemModel.find({}); 6 | return responseItem; 7 | }; 8 | 9 | export { getOrders }; 10 | -------------------------------------------------------------------------------- /src/services/storage.ts: -------------------------------------------------------------------------------- 1 | import { Storage } from "../interfaces/storage"; 2 | import StorageModel from "../models/storage"; 3 | 4 | const registerUpload = async ({ fileName, idUser, path }: Storage) => { 5 | const responseItem = await StorageModel.create({ fileName, idUser, path }); 6 | return responseItem; 7 | }; 8 | 9 | export { registerUpload }; 10 | -------------------------------------------------------------------------------- /src/utils/bcrypt.handle.ts: -------------------------------------------------------------------------------- 1 | import { hash, compare } from "bcryptjs"; 2 | 3 | const encrypt = async (pass: string) => { 4 | const passwordHash = await hash(pass, 8); 5 | return passwordHash; 6 | }; 7 | 8 | const verified = async (pass: string, passHash: string) => { 9 | const isCorrect = await compare(pass, passHash); 10 | return isCorrect; 11 | }; 12 | 13 | export { encrypt, verified }; 14 | -------------------------------------------------------------------------------- /src/utils/error.handle.ts: -------------------------------------------------------------------------------- 1 | import { Response } from "express"; 2 | 3 | const handleHttp = (res: Response, error: string, errorRaw?: any) => { 4 | console.log(errorRaw); 5 | res.status(500); 6 | res.send({ error }); 7 | }; 8 | 9 | export { handleHttp }; 10 | -------------------------------------------------------------------------------- /src/utils/jwt.handle.ts: -------------------------------------------------------------------------------- 1 | import { sign, verify } from "jsonwebtoken"; 2 | const JWT_SECRET = process.env.JWT_SECRET || "token.01010101"; 3 | 4 | const generateToken = (id: string) => { 5 | const jwt = sign({ id }, JWT_SECRET, { 6 | expiresIn: "2h", 7 | }); 8 | return jwt; 9 | }; 10 | 11 | const verifyToken = (jwt: string) => { 12 | const isOk = verify(jwt, JWT_SECRET); 13 | return isOk; 14 | }; 15 | 16 | export { generateToken, verifyToken }; 17 | -------------------------------------------------------------------------------- /storage/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leifermendez/curso-api-typescript/3e6334531ae7198ac129d9a740d3660d870474d9/storage/.gitkeep -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "module": "commonjs", 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "skipLibCheck": true, 9 | "outDir": "./dist" 10 | } 11 | } 12 | --------------------------------------------------------------------------------