diff options
author | 2023-08-15 19:13:58 +0200 | |
---|---|---|
committer | 2023-08-15 19:48:24 +0200 | |
commit | 4d28ac359b25d89d0dbb42dd3a6d32269eebc619 (patch) | |
tree | 0a67803954dd46a18e3628d0dc85204e7ac6889e | |
parent | bdb0762696ccf028c30b2957b93a01da7bf67571 (diff) | |
download | auth-service-4d28ac359b25d89d0dbb42dd3a6d32269eebc619.tar.gz auth-service-4d28ac359b25d89d0dbb42dd3a6d32269eebc619.tar.bz2 auth-service-4d28ac359b25d89d0dbb42dd3a6d32269eebc619.zip |
add cors, logout, change name
-rw-r--r-- | .env.example | 3 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | db/mongoose.js | 2 | ||||
-rw-r--r-- | docker-compose.yml | 8 | ||||
-rw-r--r-- | index.js | 8 | ||||
-rw-r--r-- | model/User.js | 28 | ||||
-rw-r--r-- | package-lock.json | 743 | ||||
-rw-r--r-- | package.json | 3 | ||||
-rw-r--r-- | routes/auth.js | 119 | ||||
-rw-r--r-- | routes/index.js | 106 |
10 files changed, 513 insertions, 508 deletions
diff --git a/.env.example b/.env.example index 3a28520..6607bc1 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ PORT= DB_CONNECT= -JWT_SECRET= +RSA_PASS= +TOKEN_EXPIRES_IN= @@ -1,2 +1,3 @@ node_modules/ +cert/ .env diff --git a/db/mongoose.js b/db/mongoose.js index 3b357d3..106d6fd 100644 --- a/db/mongoose.js +++ b/db/mongoose.js @@ -4,6 +4,6 @@ mongoose.set('strictQuery', true) mongoose.connect( process.env.DB_CONNECT, - { dbName: 'auth' }, + { dbName: 'auth-service' }, () => { console.log('Successfully connected to db.') }, ) diff --git a/docker-compose.yml b/docker-compose.yml index df4b7f8..f67aae8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,14 @@ version: "2" services: web: - image: auth - container_name: auth + image: auth-service + container_name: auth-service expose: - "3000" restart: unless-stopped environment: - - VIRTUAL_HOST=auth.pruss.it - - LETSENCRYPT_HOST=auth.pruss.it + - VIRTUAL_HOST=auth.api.pruss.it + - LETSENCRYPT_HOST=auth.api.pruss.it - LETSENCRYPT_EMAIL=mail@pruss.it networks: @@ -1,14 +1,16 @@ const express = require('express') -const authRoutes = require('./routes/auth') +const routes = require('./routes') +const cors = require('cors') require('dotenv-safe').config() require('./db/mongoose') const app = express() const port = process.env.PORT +app.use(cors()); app.use(express.json()) -app.use('/', authRoutes) +app.use('/', routes) app.listen(port, () => { - console.log("Server is up on port " + port + ".") + console.log("Auth service is up on port " + port + ".") }); diff --git a/model/User.js b/model/User.js index cbd1e60..ce34cbe 100644 --- a/model/User.js +++ b/model/User.js @@ -47,15 +47,11 @@ const userSchema = new mongoose.Schema({ userSchema.statics.checkRefreshToken = async (email, refresh) => { const user = await User.findOne({ email }) - if (!user) { - throw new Error('User not found') - } + if (!user) throw new Error('User not found') const isMatch = await bcrypt.compare(refresh, user.refresh) - if (!isMatch) { - throw new Error('Wrong refresh token') - } + if (!isMatch) throw new Error('Wrong refresh token') return user } @@ -63,31 +59,27 @@ userSchema.statics.checkRefreshToken = async (email, refresh) => { userSchema.statics.findByCredentials = async (email, password) => { const user = await User.findOne({ email }) - if (!user) { - throw new Error('Unable to login') - } + if (!user) throw new Error('Unable to login') const isMatch = await bcrypt.compare(password, user.password) - if (!isMatch) { - throw new Error('Unable to login') - } + if (!isMatch) throw new Error('Unable to login') return user } userSchema.statics.newRefreshToken = async (user) => { const newRefreshToken = randomBytes(32).toString('hex') + user.refresh = newRefreshToken + await user.save() - try { - await user.save() - return newRefreshToken - } catch(err) { - return '' - } + return newRefreshToken } +userSchema.statics.removeRefreshToken = async (email) => ( + await User.findOneAndUpdate({ email }, { refresh: '' }) +) userSchema.pre('save', async function(next){ const user = this diff --git a/package-lock.json b/package-lock.json index 415e938..c4b1b8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { - "name": "auth", + "name": "auth-service", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "auth", + "name": "auth-service", "version": "1.0.0", "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", + "cors": "^2.8.5", "dotenv-safe": "^8.2.0", "express": "^4.17.3", "jsonwebtoken": "^9.0.1", @@ -120,44 +121,44 @@ "optional": true }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.388.0.tgz", - "integrity": "sha512-5sCogMJ1utRlwLQiameyOrrcyhueknbsC2YK1G9Y7pgmgUl2zzUo7htQS2luW71SeBHiwkTQa3OZjbmGsotJvg==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.391.0.tgz", + "integrity": "sha512-5mlkdrLP6sTG6D+q/qFw6vPVegFGSy1XcVUdERmWo6fvR7mYlRNETGC5sNsGPcMhnN3MCviqxCJmXpwnsP7okg==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.388.0", - "@aws-sdk/credential-provider-node": "3.388.0", - "@aws-sdk/middleware-host-header": "3.387.0", - "@aws-sdk/middleware-logger": "3.387.0", - "@aws-sdk/middleware-recursion-detection": "3.387.0", - "@aws-sdk/middleware-signing": "3.387.0", - "@aws-sdk/middleware-user-agent": "3.387.0", - "@aws-sdk/types": "3.387.0", - "@aws-sdk/util-endpoints": "3.387.0", - "@aws-sdk/util-user-agent-browser": "3.387.0", - "@aws-sdk/util-user-agent-node": "3.387.0", - "@smithy/config-resolver": "^2.0.2", - "@smithy/fetch-http-handler": "^2.0.2", - "@smithy/hash-node": "^2.0.2", - "@smithy/invalid-dependency": "^2.0.2", - "@smithy/middleware-content-length": "^2.0.2", - "@smithy/middleware-endpoint": "^2.0.2", - "@smithy/middleware-retry": "^2.0.2", - "@smithy/middleware-serde": "^2.0.2", + "@aws-sdk/client-sts": "3.391.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/node-http-handler": "^2.0.2", - "@smithy/protocol-http": "^2.0.2", - "@smithy/smithy-client": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.2", - "@smithy/util-defaults-mode-node": "^2.0.2", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -167,41 +168,41 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.387.0.tgz", - "integrity": "sha512-E7uKSvbA0XMKSN5KLInf52hmMpe9/OKo6N9OPffGXdn3fNEQlvyQq3meUkqG7Is0ldgsQMz5EUBNtNybXzr3tQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.391.0.tgz", + "integrity": "sha512-aT+O1CbWIWYlCtWK6g3ZaMvFNImOgFGurOEPscuedqzG5UQc1bRtRrGYShLyzcZgfXP+s0cKYJqgGeRNoWiwqA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.387.0", - "@aws-sdk/middleware-logger": "3.387.0", - "@aws-sdk/middleware-recursion-detection": "3.387.0", - "@aws-sdk/middleware-user-agent": "3.387.0", - "@aws-sdk/types": "3.387.0", - "@aws-sdk/util-endpoints": "3.387.0", - "@aws-sdk/util-user-agent-browser": "3.387.0", - "@aws-sdk/util-user-agent-node": "3.387.0", - "@smithy/config-resolver": "^2.0.2", - "@smithy/fetch-http-handler": "^2.0.2", - "@smithy/hash-node": "^2.0.2", - "@smithy/invalid-dependency": "^2.0.2", - "@smithy/middleware-content-length": "^2.0.2", - "@smithy/middleware-endpoint": "^2.0.2", - "@smithy/middleware-retry": "^2.0.2", - "@smithy/middleware-serde": "^2.0.2", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/node-http-handler": "^2.0.2", - "@smithy/protocol-http": "^2.0.2", - "@smithy/smithy-client": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.2", - "@smithy/util-defaults-mode-node": "^2.0.2", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -211,44 +212,44 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.388.0.tgz", - "integrity": "sha512-y9FAcAYHT8O6T/jqhgsIQUb4gLiSTKD3xtzudDvjmFi8gl0oRIY1npbeckSiK6k07VQugm2s64I0nDnDxtWsBg==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.391.0.tgz", + "integrity": "sha512-y+KmorcUx9o5O99sXVPbhGUpsLpfhzYRaYCqxArLsyzZTCO6XDXMi8vg/xtS+b703j9lWEl5GxAv2oBaEwEnhQ==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.388.0", - "@aws-sdk/middleware-host-header": "3.387.0", - "@aws-sdk/middleware-logger": "3.387.0", - "@aws-sdk/middleware-recursion-detection": "3.387.0", - "@aws-sdk/middleware-sdk-sts": "3.387.0", - "@aws-sdk/middleware-signing": "3.387.0", - "@aws-sdk/middleware-user-agent": "3.387.0", - "@aws-sdk/types": "3.387.0", - "@aws-sdk/util-endpoints": "3.387.0", - "@aws-sdk/util-user-agent-browser": "3.387.0", - "@aws-sdk/util-user-agent-node": "3.387.0", - "@smithy/config-resolver": "^2.0.2", - "@smithy/fetch-http-handler": "^2.0.2", - "@smithy/hash-node": "^2.0.2", - "@smithy/invalid-dependency": "^2.0.2", - "@smithy/middleware-content-length": "^2.0.2", - "@smithy/middleware-endpoint": "^2.0.2", - "@smithy/middleware-retry": "^2.0.2", - "@smithy/middleware-serde": "^2.0.2", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-sdk-sts": "3.391.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/node-http-handler": "^2.0.2", - "@smithy/protocol-http": "^2.0.2", - "@smithy/smithy-client": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", + "@smithy/protocol-http": "^2.0.3", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.2", - "@smithy/util-defaults-mode-node": "^2.0.2", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "fast-xml-parser": "4.2.5", @@ -259,15 +260,15 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.388.0.tgz", - "integrity": "sha512-j1oyBc0/O76YouOC2wMZuQUfHOjfrKWgBibIwrwqEqacYWMx/IBxZkk9j2fFerIVaKhhMNkZHAGb+qBx0urR/Q==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.391.0.tgz", + "integrity": "sha512-60B2WDGJOijluCzeTQDzPWgGuAhYKTcYnK5fNMi9xzHBqw+IhPaGYcmAx1bQGY7SuoZBqVgt1h6fiNxY8TWO5w==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.388.0", - "@aws-sdk/types": "3.387.0", + "@aws-sdk/client-cognito-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -275,14 +276,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.387.0.tgz", - "integrity": "sha512-PVqNk7XPIYe5CMYNvELkcALtkl/pIM8/uPtqEtTg+mgnZBeL4fAmgXZiZMahQo1DxP5t/JaK384f6JG+A0qDjA==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.391.0.tgz", + "integrity": "sha512-mAzICedcg4bfL0mM5O6QTd9mQ331NLse1DMr6XL21ZZiLB48ej19L7AGV2xq5QwVbqKU3IVv1myRyhvpDM9jMg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -290,20 +291,20 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.388.0.tgz", - "integrity": "sha512-3dg3A8AiZ5vXkSAYyyI3V/AW3Eo6KQJyE/glA+Nr2M0oAjT4z3vHhS3pf2B+hfKGZBTuKKgxusrrhrQABd/Diw==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.391.0.tgz", + "integrity": "sha512-DJZmbmRMqNSfSV7UF8eBVhADz16KAMCTxnFuvgioHHfYUTZQEhCxRHI8jJqYWxhLTriS7AuTBIWr+1AIbwsCTA==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.387.0", - "@aws-sdk/credential-provider-process": "3.387.0", - "@aws-sdk/credential-provider-sso": "3.388.0", - "@aws-sdk/credential-provider-web-identity": "3.387.0", - "@aws-sdk/types": "3.387.0", + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -311,21 +312,21 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.388.0.tgz", - "integrity": "sha512-BqWAkIG08gj/wevpesaZhAjALjfUNVjseHQRk+DNUoHIfyibW7Ahf3q/GIPs11dA2o8ECwR9/fo68Sq+sK799A==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.391.0.tgz", + "integrity": "sha512-LXHQwsTw4WBwRzD9swu8254Hao5MoIaGXIzbhX4EQ84dtOkKYbwiY4pDpLfcHcw3B1lFKkVclMze8WAs4EdEww==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.387.0", - "@aws-sdk/credential-provider-ini": "3.388.0", - "@aws-sdk/credential-provider-process": "3.387.0", - "@aws-sdk/credential-provider-sso": "3.388.0", - "@aws-sdk/credential-provider-web-identity": "3.387.0", - "@aws-sdk/types": "3.387.0", + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -333,15 +334,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.387.0.tgz", - "integrity": "sha512-tQScLHmDlqkQN+mqw4s3cxepEUeHYDhFl5eH+J8puvPqWjXMYpCEdY79SAtWs6SZd4CWiZ0VLeYU6xQBZengbQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.391.0.tgz", + "integrity": "sha512-KMlzPlBI+hBmXDo+EoFZdLgCVRkRa9B9iEE6x0+hQQ6g9bW6HI7cDRVdceR1ZoPasSaNAZ9QOXMTIBxTpn0sPQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -349,17 +350,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.388.0.tgz", - "integrity": "sha512-RH02+rntaO0UhnSBr42n+7q8HOztc+Dets/hh6cWovf3Yi9s9ghLgYLN9FXpSosfot3XkmT/HOCa+CphAmGN9A==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.391.0.tgz", + "integrity": "sha512-FT/WoiRHiKys+FcRwvjui0yKuzNtJdn2uGuI1hYE0gpW1wVmW02ouufLckJTmcw09THUZ4w53OoCVU5OY00p8A==", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.387.0", - "@aws-sdk/token-providers": "3.388.0", - "@aws-sdk/types": "3.387.0", + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/token-providers": "3.391.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -367,14 +368,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.387.0.tgz", - "integrity": "sha512-6ueMPl+J3KWv6ZaAWF4Z138QCuBVFZRVAgwbtP3BNqWrrs4Q6TPksOQJ79lRDMpv0EUoyVl04B6lldNlhN8RdA==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.391.0.tgz", + "integrity": "sha512-n0vYg82B8bc4rxKltVbVqclev7hx+elyS9pEnZs3YbnbWJq0qqsznXmDfLqd1TcWpa09PGXcah0nsRDolVThsA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -382,25 +383,25 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.388.0.tgz", - "integrity": "sha512-5opHLYjj6rHrw2OaxE+IcLhC9JfiopPH7hRknzKjFnSrJ+HjzcHCML5xghwHLJOLGcoWU40CCSlwJVPLlJluMw==", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.388.0", - "@aws-sdk/client-sso": "3.387.0", - "@aws-sdk/client-sts": "3.388.0", - "@aws-sdk/credential-provider-cognito-identity": "3.388.0", - "@aws-sdk/credential-provider-env": "3.387.0", - "@aws-sdk/credential-provider-ini": "3.388.0", - "@aws-sdk/credential-provider-node": "3.388.0", - "@aws-sdk/credential-provider-process": "3.387.0", - "@aws-sdk/credential-provider-sso": "3.388.0", - "@aws-sdk/credential-provider-web-identity": "3.387.0", - "@aws-sdk/types": "3.387.0", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.391.0.tgz", + "integrity": "sha512-J2fh74zUC3qZnbZol95T9w9PTgmx9NfyIy5JVs43rISdvgnAkD9fXd6YbBfQOxl9Xx9HiZW7Fa3hTxma7d/zlA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.391.0", + "@aws-sdk/client-sso": "3.391.0", + "@aws-sdk/client-sts": "3.391.0", + "@aws-sdk/credential-provider-cognito-identity": "3.391.0", + "@aws-sdk/credential-provider-env": "3.391.0", + "@aws-sdk/credential-provider-ini": "3.391.0", + "@aws-sdk/credential-provider-node": "3.391.0", + "@aws-sdk/credential-provider-process": "3.391.0", + "@aws-sdk/credential-provider-sso": "3.391.0", + "@aws-sdk/credential-provider-web-identity": "3.391.0", + "@aws-sdk/types": "3.391.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -408,14 +409,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.387.0.tgz", - "integrity": "sha512-EWm9PXSr8dSp7hnRth1U7OfelXQp9dLf1yS1kUL+UhppYDJpjhdP7ql3NI4xJKw8e76sP2FuJYEuzWnJHuWoyQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.391.0.tgz", + "integrity": "sha512-+nyNr0rb2ixY7mU48nibr7L7gsw37y4oELhqgnNKhcjZDJ34imBwKIMFa64n21FdftmhcjR8IdSpzXE9xrkJ8g==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@smithy/protocol-http": "^2.0.2", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -423,13 +424,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.387.0.tgz", - "integrity": "sha512-FjAvJr1XyaInT81RxUwgifnbXoFJrRBFc64XeFJgFanGIQCWLYxRrK2HV9eBpao/AycbmuoHgLd/f0sa4hZFoQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.391.0.tgz", + "integrity": "sha512-KOwl5zo16b17JDhqILHBStccBQ2w35em7+/6vdkJdUII6OU8aVIFTlIQT9wOUvd4do6biIRBMZG3IK0Rg7mRDQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -437,14 +438,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.387.0.tgz", - "integrity": "sha512-ZF45T785ru8OwvYZw6awD9Z76OwSMM1eZzj2eY+FDz1cHfkpLjxEiti2iIH1FxbyK7n9ZqDUx29lVlCv238YyQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.391.0.tgz", + "integrity": "sha512-hVR3z59G7pX4pjDQs9Ag1tMgbLeGXOzeAAaNP9fEtHSd3KBMAGQgN3K3b9WPjzE2W0EoloHRJMK4qxZErdde2g==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@smithy/protocol-http": "^2.0.2", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -452,14 +453,14 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.387.0.tgz", - "integrity": "sha512-7ZzRKOJ4V/JDQmKz9z+FjZqw59mrMATEMLR6ff0H0JHMX0Uk5IX8TQB058ss+ar14qeJ4UcteYzCqHNI0O1BHw==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.391.0.tgz", + "integrity": "sha512-6ZXI3Z4QU+TnT5PwKWloGmRHG81tWeI18/zxf9wWzrO2NhYFvITzEJH0vWLLiXdWtn/BYfLULXtDvkTaepbI5A==", "optional": true, "dependencies": { - "@aws-sdk/middleware-signing": "3.387.0", - "@aws-sdk/types": "3.387.0", - "@smithy/types": "^2.1.0", + "@aws-sdk/middleware-signing": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -467,16 +468,16 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.387.0.tgz", - "integrity": "sha512-oJXlE0MES8gxNLo137PPNNiOICQGOaETTvq3kBSJgb/gtEAxQajMIlaNT7s1wsjOAruFHt4975nCXuY4lpx7GQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.391.0.tgz", + "integrity": "sha512-2pAJJlZqaHc0d+cz2FTVrQmWi8ygKfqfczHUo/loCtOaMNtWXBHb/JsLEecs6cXdizy6gi3YsLz6VZYwY4Ssxw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", + "@aws-sdk/types": "3.391.0", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.2", + "@smithy/protocol-http": "^2.0.3", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, @@ -485,15 +486,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.387.0.tgz", - "integrity": "sha512-hTfFTwDtp86xS98BKa+RFuLfcvGftxwzrbZeisZV8hdb4ZhvNXjSxnvM3vetW0GUEnY9xHPSGyp2ERRTinPKFQ==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.391.0.tgz", + "integrity": "sha512-LdK9uMNA14zqRw3B79Mhy7GX36qld/GYo93xuu+lr+AQ98leZEdc6GUbrtNDI3fP1Z8TMQcyHUKBml4/B+wXpQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@aws-sdk/util-endpoints": "3.387.0", - "@smithy/protocol-http": "^2.0.2", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@smithy/protocol-http": "^2.0.3", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -501,43 +502,43 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.388.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.388.0.tgz", - "integrity": "sha512-2lo1gFJl624kfjo/YdU6zW+k6dEwhoqjNkDNbOZEFgS1KDofHe9GX8W4/ReKb0Ggho5/EcjzZ53/1CjkzUq4tA==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.391.0.tgz", + "integrity": "sha512-kgfArsKLDJE71qQjfXiHiM5cZqgDHlMsqEx35+A65GmTWJaS1PGDqu3ZvVVU8E5mxnCCLw7vho21fsjvH6TBpg==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.387.0", - "@aws-sdk/middleware-logger": "3.387.0", - "@aws-sdk/middleware-recursion-detection": "3.387.0", - "@aws-sdk/middleware-user-agent": "3.387.0", - "@aws-sdk/types": "3.387.0", - "@aws-sdk/util-endpoints": "3.387.0", - "@aws-sdk/util-user-agent-browser": "3.387.0", - "@aws-sdk/util-user-agent-node": "3.387.0", - "@smithy/config-resolver": "^2.0.2", - "@smithy/fetch-http-handler": "^2.0.2", - "@smithy/hash-node": "^2.0.2", - "@smithy/invalid-dependency": "^2.0.2", - "@smithy/middleware-content-length": "^2.0.2", - "@smithy/middleware-endpoint": "^2.0.2", - "@smithy/middleware-retry": "^2.0.2", - "@smithy/middleware-serde": "^2.0.2", + "@aws-sdk/middleware-host-header": "3.391.0", + "@aws-sdk/middleware-logger": "3.391.0", + "@aws-sdk/middleware-recursion-detection": "3.391.0", + "@aws-sdk/middleware-user-agent": "3.391.0", + "@aws-sdk/types": "3.391.0", + "@aws-sdk/util-endpoints": "3.391.0", + "@aws-sdk/util-user-agent-browser": "3.391.0", + "@aws-sdk/util-user-agent-node": "3.391.0", + "@smithy/config-resolver": "^2.0.3", + "@smithy/fetch-http-handler": "^2.0.3", + "@smithy/hash-node": "^2.0.3", + "@smithy/invalid-dependency": "^2.0.3", + "@smithy/middleware-content-length": "^2.0.3", + "@smithy/middleware-endpoint": "^2.0.3", + "@smithy/middleware-retry": "^2.0.3", + "@smithy/middleware-serde": "^2.0.3", "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/node-http-handler": "^2.0.2", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/node-http-handler": "^2.0.3", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^2.0.2", + "@smithy/protocol-http": "^2.0.3", "@smithy/shared-ini-file-loader": "^2.0.0", - "@smithy/smithy-client": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/smithy-client": "^2.0.3", + "@smithy/types": "^2.2.0", + "@smithy/url-parser": "^2.0.3", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.0.0", - "@smithy/util-defaults-mode-browser": "^2.0.2", - "@smithy/util-defaults-mode-node": "^2.0.2", + "@smithy/util-defaults-mode-browser": "^2.0.3", + "@smithy/util-defaults-mode-node": "^2.0.3", "@smithy/util-retry": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -547,12 +548,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.387.0.tgz", - "integrity": "sha512-YTjFabNwjTF+6yl88f0/tWff018qmmgMmjlw45s6sdVKueWxdxV68U7gepNLF2nhaQPZa6FDOBoA51NaviVs0Q==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.391.0.tgz", + "integrity": "sha512-QpYVFKMOnzHz/JMj/b8wb18qxiT92U/5r5MmtRz2R3LOH6ooTO96k4ozXCrYr0qNed1PAnOj73rPrrH2wnCJKQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -560,12 +561,12 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.387.0.tgz", - "integrity": "sha512-g7kvuCXehGXHHBw9PkSQdwVyDFmNUZLmfrRmqMyrMDG9QLQrxr4pyWcSaYgTE16yUzhQQOR+QSey+BL6W9/N6g==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.391.0.tgz", + "integrity": "sha512-zv4sYDTQhNxyLoekcE02/nk3xvoo6yCHDy1kDJk0MFxOKaqUB+CvZdQBR4YBLSDlD4o4DUBmdYgKT58FfbM8sQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", + "@aws-sdk/types": "3.391.0", "tslib": "^2.5.0" }, "engines": { @@ -585,26 +586,26 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.387.0.tgz", - "integrity": "sha512-lpgSVvDqx+JjHZCTYs/yQSS7J71dPlJeAlvxc7bmx5m+vfwKe07HAnIs+929DngS0QbAp/VaXbTiMFsInLkO4Q==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.391.0.tgz", + "integrity": "sha512-6ipHOB1WdCBNeAMJauN7l2qNE0WLVaTNhkD290/ElXm1FHGTL8yw6lIDIjhIFO1bmbZxDiKApwDiG7ROhaJoxQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@smithy/types": "^2.2.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.387.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.387.0.tgz", - "integrity": "sha512-r9OVkcWpRYatjLhJacuHFgvO2T5s/Nu5DDbScMrkUD8b4aGIIqsrdZji0vZy9FCjsUFQMM92t9nt4SejrGjChA==", + "version": "3.391.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.391.0.tgz", + "integrity": "sha512-PVvAK/Lf4BdB1eJIZtyFpGSslGQwKpYt9/hKs5NlR+qxBMXU9T0DnTqH4GiXZaazvXr7OUVWitIF2b7iKBMTow==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.387.0", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/types": "^2.1.0", + "@aws-sdk/types": "3.391.0", + "@smithy/node-config-provider": "^2.0.3", + "@smithy/types": "^2.2.0", "tslib": "^2.5.0" }, "engines": { @@ -629,12 +630,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.2.tgz", - "integrity": "sha512-ln5Cob0mksym62sLr7NiPOSqJ0jKao4qjfcNLDdgINM1lQI12hXrZBlKdPHbXJqpKhKiECDgonMoqCM8bigq4g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.4.tgz", + "integrity": "sha512-3+3/xRQ0K/NFVtKSiTGsUa3muZnVaBmHrLNgxwoBLZO9rNhwZtjjjf7pFJ6aoucoul/c/w3xobRkgi8F9MWX8Q==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -642,12 +643,12 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.2.tgz", - "integrity": "sha512-0kdsqBL6BdmSbdU6YaDkodVBMua5MuQQluC3nocJ7OJ6PnOuM7i2FEQHE46LBadLqT+CimlDSM+6j91uHNL1ng==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.4.tgz", + "integrity": "sha512-JtKWIKoCFeOY5JGQeEl81AKdIpzeLLSjSMmO5yoKqc58Yn3cxmteylT6Elba3FgAHjK1OthARRXz5JXaKKRB7g==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-config-provider": "^2.0.0", "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" @@ -657,15 +658,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.2.tgz", - "integrity": "sha512-mbWFYEZ00LBRDk3WvcXViwpdpkJQcfrM3seuKzFxZnF6wIBLMwrcWcsj+OUC/1L+86m8aQY9imXMAaQsAoGxow==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.4.tgz", + "integrity": "sha512-vW7xoDKZwjjf/2GCwVf/uvZce/QJOAYan9r8UsqlzOrnnpeS2ffhxeZjLK0/emZu8n6qU3amGgZ/BTo3oVtEyQ==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.0.2", - "@smithy/property-provider": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", "tslib": "^2.5.0" }, "engines": { @@ -673,37 +674,37 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.2.tgz", - "integrity": "sha512-PQZiKx7fMnNwx4zxcUCm82VjnqK6wV4MEHSmMy3taj5dKfXV782IjRGyaDT+8TsmNqVdZIkve5zLRAzh+7kOhA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.4.tgz", + "integrity": "sha512-DkVLcQjhOxPj/4pf2hNj2kvOeoLczirHe57g7czMNJCUBvg9cpU9hNgqS37Y5sjdEtMSa2oTyCS5oeHZtKgoIw==", "optional": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.2.tgz", - "integrity": "sha512-Wo2m1RaiXNSLF4J3D62LpdSoj/YYb+6tn0H8is1tSrzr7eXAdiYVBc0wIa23N0wT4zmN0iG/yNY6gTCDQ6799A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.4.tgz", + "integrity": "sha512-1dwR8T+QMe5Gs60NpZgF7ReZp0SXz1O/aX5BdDhsOJh72fi3Bx2UZlDihCdb++9vPyBRMXFRF7I8/C4x8iIm8A==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^2.0.2", - "@smithy/querystring-builder": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.2.tgz", - "integrity": "sha512-JKDzZ1YVR7JzOBaJoWy3ToJCE86OQE6D4kOBvvVsu93a3lcF9kv6KYTKBYEWAjwOn/CpK4NH7mKB01OQ8H+aiA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.4.tgz", + "integrity": "sha512-vZ6a/fvEAFJKNtxJsn0I2WM8uBdypLLhLTpP4BA6fRsBAtwIl5S4wTt0Hspy6uGNn/74LmCxGmFSTMMbSd7ZDA==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -713,12 +714,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.2.tgz", - "integrity": "sha512-inQZQ5gCO3WRWuXpsc1YJ4KBjsvj2qsoU32yTIKznBWTCQe/D5Dp+sSaysqBqxe0VTZ+8nFEHdUMWUX2BxQThw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.4.tgz", + "integrity": "sha512-zfbPPZFiZvhIXJYKlzQwDUnxmWK/SmyDcM6iQJRZHU2jQZAzhHUXFGIu2lKH9L02VUqysOgQi3S/HY4fhrVT8w==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" } }, @@ -735,13 +736,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.2.tgz", - "integrity": "sha512-FmHlNfuvYgDZE3fIx0G3rD/wLXfAmBYE4mVc/w6d7RllA7TygPzq2pfHL1iCMzWkWTdoAVnt3h4aavAZnhaxEQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.4.tgz", + "integrity": "sha512-Pdd+fhRbvizqsgYJ0pLWE6hjhq42wDFWzMj/1T7mEY9tG9bP6/AcdsQK8SAOckrBLURDoeSqTAwPKalsgcZBxw==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/protocol-http": "^2.0.4", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -749,14 +750,14 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.2.tgz", - "integrity": "sha512-ropE7/c+g22QeluZ+By/B/WvVep0UFreX+IeRMGIO7EbOUPgqtJRXpbJFdG6JKB1uC+CdaJLn4MnZnVBpcyjuA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.4.tgz", + "integrity": "sha512-aLPqkqKjZQ1V718P0Ostpp53nWfwK32uD0HFKSAOT25RvL285dqzGl0PAKDXpyLsPsPmHe0Yrg0AUFkRv4CRbQ==", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^2.0.2", - "@smithy/types": "^2.1.0", - "@smithy/url-parser": "^2.0.2", + "@smithy/middleware-serde": "^2.0.4", + "@smithy/types": "^2.2.1", + "@smithy/url-parser": "^2.0.4", "@smithy/util-middleware": "^2.0.0", "tslib": "^2.5.0" }, @@ -765,14 +766,14 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.2.tgz", - "integrity": "sha512-wtBUXqtZVriiXppYaFkUrybAPhFVX7vebnW/yVPliLMWMcguOMS58qhOYPZe3t9Wki2+mASfyu+kO3An8lAg2A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.4.tgz", + "integrity": "sha512-stozO6NgH9W/OSfFMOJEtlJCsnJFSoGyV4LHzIVQeXTzZ2RHjmytQ/Ez7GngHGZ1YsB4zxE1qDTXAU0AlaKf2w==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^2.0.2", + "@smithy/protocol-http": "^2.0.4", "@smithy/service-error-classification": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-middleware": "^2.0.0", "@smithy/util-retry": "^2.0.0", "tslib": "^2.5.0", @@ -783,12 +784,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.2.tgz", - "integrity": "sha512-Kw9xLdlueIaivUWslKB67WZ/cCUg3QnzYVIA3t5KfgsseEEuU4UxXw8NSTvIt71gqQloY+Um8ugS+idgxrWWnw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.4.tgz", + "integrity": "sha512-oDttJMMES7yXmopjQHnqTkxu8vZOdjB9VpSj94Ff4/GXdKQH7ozKLNIPq4C568nbeQbBt/gsLb6Ttbx1+j+JPQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -808,14 +809,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.2.tgz", - "integrity": "sha512-9wVJccASfuCctNWrzR0zrDkf0ox3HCHGEhFlWL2LBoghUYuK28pVRBbG69wvnkhlHnB8dDZHagxH+Nq9dm7eWw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.4.tgz", + "integrity": "sha512-s9O90cEhkpzZulvdHBBaroZ6AJ5uV6qtmycgYKP1yOCSfPHGIWYwaULdbfxraUsvzCcnMosDNkfckqXYoKI6jw==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.2", - "@smithy/shared-ini-file-loader": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/property-provider": "^2.0.4", + "@smithy/shared-ini-file-loader": "^2.0.4", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -823,15 +824,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.2.tgz", - "integrity": "sha512-lpZjmtmyZqSAtMPsbrLhb7XoAQ2kAHeuLY/csW6I2k+QyFvOk7cZeQsqEngWmZ9SJaeYiDCBINxAIM61i5WGLw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.4.tgz", + "integrity": "sha512-svqeqkGgQz1B2m3IurHtp1O8vfuUGbqw6vynFmOrvPirRdiIPukHTZW1GN/JuBCtDpq9mNPutSVipfz2n4sZbQ==", "optional": true, "dependencies": { - "@smithy/abort-controller": "^2.0.2", - "@smithy/protocol-http": "^2.0.2", - "@smithy/querystring-builder": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/abort-controller": "^2.0.4", + "@smithy/protocol-http": "^2.0.4", + "@smithy/querystring-builder": "^2.0.4", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -839,12 +840,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.2.tgz", - "integrity": "sha512-DfaZ8cO+d/mgnMzIllcXcU4OYP+omiOl2LYdn/fTGpw/EAQSVzscYV2muV3sDDnuPYQ/r014hUqIxnF+pzh+SQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.4.tgz", + "integrity": "sha512-OfaUIhnyvOkuCPHWMPkJqX++dUaDKsiZWuZqCdU04Z9dNAl2TtZAh7dw2rsZGb57vq6YH3PierNrDfQJTAKYtg==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -852,12 +853,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.2.tgz", - "integrity": "sha512-qWu8g1FUy+m36KpO1sREJSF7BaLmjw9AqOuwxLVVSdYz+nUQjc9tFAZ9LB6jJXKdsZFSjfkjHJBbhD78QdE7Rw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.4.tgz", + "integrity": "sha512-I1vCZ/m1U424gA9TXkL/pJ3HlRfujY8+Oj3GfDWcrNiWVmAeyx3CTvXw+yMHp2X01BOOu5fnyAa6JwAn1O+txA==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -865,12 +866,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.2.tgz", - "integrity": "sha512-H99LOMWEssfwqkOoTs4Y12UiZ7CTGQSX5Nrx5UkYgRbUEpC1GnnaprHiYrqclC58/xr4K76aNchdPyioxewMzA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.4.tgz", + "integrity": "sha512-Jc7UPx1pNeisYcABkoo2Pn4kvomy1UI7uxv7R+1W3806KMAKgYHutWmZG01aPHu2XH0zY2RF2KfGiuialsxHvA==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -879,12 +880,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.2.tgz", - "integrity": "sha512-L4VtKQ8O4/aWPQJbiFymbhAmxdfLnEaROh/Vs0OstJ7jtOZeBl2QJmuWY2V7hjt64W7V+tEn2sv6vVvnxkm/xQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.4.tgz", + "integrity": "sha512-Uh6+PhGxSo17qe2g/JlyoekvTHKn7dYWfmHqUzPAvkW+dHlc3DNVG3++PV48z33lCo5YDVBBturWQ9N/TKn+EA==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -901,12 +902,12 @@ } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.2.tgz", - "integrity": "sha512-2VkNOM/82u4vatVdK5nfusgGIlvR48Fkq6me17Oc+V1iyxfR/1x0pG6LzW0br1qlGtzBYFZKmDyviBRcPVFTVw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.4.tgz", + "integrity": "sha512-091yneupXnSqvAU+vLG7h0g4QRRO6TjulpECXYVU6yW/LiNp7QE533DBpaphmbtI6tTC4EfGrhn35gTa0w+GQg==", "optional": true, "dependencies": { - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -914,14 +915,14 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.2.tgz", - "integrity": "sha512-YMooDEw/UmGxcXY4qWnSXkbPFsRloluSvyXVT678YPDN/K2AS1GzKfRsvSU7fbccOB4WF8MHZf2UqcRGEltE3Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.4.tgz", + "integrity": "sha512-y2xblkS0hb44QJDn9YjPp5aRFYSiI7w0bI3tATE3ybOrII2fppqD0SE3zgvew/B/3rTunuiCW+frTD0W4UYb9Q==", "optional": true, "dependencies": { - "@smithy/eventstream-codec": "^2.0.2", + "@smithy/eventstream-codec": "^2.0.4", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.1.0", + "@smithy/types": "^2.2.1", "@smithy/util-hex-encoding": "^2.0.0", "@smithy/util-middleware": "^2.0.0", "@smithy/util-uri-escape": "^2.0.0", @@ -933,14 +934,14 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.2.tgz", - "integrity": "sha512-mDfokI8WwLU5C0gcQ4ww/zJI/WLGSh2+vdIA42JRnjfYUjJNH/rKfX9YOnn2eBOxl3loATERVUqkHmKe+P8s2Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.4.tgz", + "integrity": "sha512-Dg1dkqyj3jwa03RFs6E4ASmfQ7CjplbGISJIJNSt3F8NfIid2RalbeCMOIHK7VagKh9qngZNyoKxObZC9LB9Lg==", "optional": true, "dependencies": { "@smithy/middleware-stack": "^2.0.0", - "@smithy/types": "^2.1.0", - "@smithy/util-stream": "^2.0.2", + "@smithy/types": "^2.2.1", + "@smithy/util-stream": "^2.0.4", "tslib": "^2.5.0" }, "engines": { @@ -948,9 +949,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.1.0.tgz", - "integrity": "sha512-KLsCsqxX0j2l99iP8s0f7LBlcsp7a7ceXGn0LPYPyVOsqmIKvSaPQajq0YevlL4T9Bm+DtcyXfBTbtBcLX1I7A==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.2.1.tgz", + "integrity": "sha512-6nyDOf027ZeJiQVm6PXmLm7dR+hR2YJUkr4VwUniXA8xZUGAu5Mk0zfx2BPFrt+e5YauvlIqQoH0CsrM4tLkfg==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -960,13 +961,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.2.tgz", - "integrity": "sha512-X1mHCzrSVDlhVy7d3S7Vq+dTfYzwh4n7xGHhyJumu77nJqIss0lazVug85Pwo0DKIoO314wAOvMnBxNYDa+7wA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.4.tgz", + "integrity": "sha512-puIQ6+TJpI2AAPw7IGdGG6d2DEcVP5nJqa1VjrxzUcy2Jx7LtGn+gDHY2o9Pc9vQkmoicovTEKgvv7CdqP+0gg==", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/querystring-parser": "^2.0.4", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" } }, @@ -1030,13 +1031,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.2.tgz", - "integrity": "sha512-c2tMMjb624XLuzmlRoZpnFOkejVxcgw3WQKdmgdGZYZapcLzXyC0H9JhnXMjQCt30GqLTlsILRNVBYwFRbw/4Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.4.tgz", + "integrity": "sha512-wGdnPt4Ng72duUd97HrlqVkq6DKVB/yjaGkSg5n3uuQKzzHjoi3OdjXGumD/VYPHz0dYd7wpLNG2CnMm/nfDrg==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1045,16 +1046,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.2.tgz", - "integrity": "sha512-gt7m5LLqUtEKldJLyc14DE4kb85vxwomvt9AfEMEvWM4VwfWS1kGJqiStZFb5KNqnQPXw8vvpgLTi8NrWAOXqg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.4.tgz", + "integrity": "sha512-QMkNcV6x52BeeeIvhvow6UmOu7nP7DXQljY6DKOP/aAokrli53IWTP/kUTd9B0Mp9tbW3WC10O6zaM69xiMNYw==", "optional": true, "dependencies": { - "@smithy/config-resolver": "^2.0.2", - "@smithy/credential-provider-imds": "^2.0.2", - "@smithy/node-config-provider": "^2.0.2", - "@smithy/property-provider": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/config-resolver": "^2.0.4", + "@smithy/credential-provider-imds": "^2.0.4", + "@smithy/node-config-provider": "^2.0.4", + "@smithy/property-provider": "^2.0.4", + "@smithy/types": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -1099,14 +1100,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.2.tgz", - "integrity": "sha512-Mg9IJcKIu4YKlbzvpp1KLvh4JZLdcPgpxk+LICuDwzZCfxe47R9enVK8dNEiuyiIGK2ExbfvzCVT8IBru62vZw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.4.tgz", + "integrity": "sha512-ZVje79afuv3DB1Ma/g5m/5v9Zda8nA0xNgvE1pOD3EnoTp/Ekch1z20AN6gfVsf7JYWK2VSMVDiqI9N8Ua4wbg==", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^2.0.2", - "@smithy/node-http-handler": "^2.0.2", - "@smithy/types": "^2.1.0", + "@smithy/fetch-http-handler": "^2.0.4", + "@smithy/node-http-handler": "^2.0.4", + "@smithy/types": "^2.2.1", "@smithy/util-base64": "^2.0.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", @@ -1143,9 +1144,9 @@ } }, "node_modules/@types/node": { - "version": "20.4.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.9.tgz", - "integrity": "sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==" + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", + "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==" }, "node_modules/@types/webidl-conversions": { "version": "7.0.0", @@ -1322,6 +1323,18 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1833,6 +1846,14 @@ "node": ">= 0.6" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", diff --git a/package.json b/package.json index b84b9a4..65234cb 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "auth", + "name": "auth-service", "version": "1.0.0", "description": "Simple authentication service", "main": "index.js", @@ -11,6 +11,7 @@ "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", + "cors": "^2.8.5", "dotenv-safe": "^8.2.0", "express": "^4.17.3", "jsonwebtoken": "^9.0.1", diff --git a/routes/auth.js b/routes/auth.js deleted file mode 100644 index 389c01b..0000000 --- a/routes/auth.js +++ /dev/null @@ -1,119 +0,0 @@ -const router = require('express').Router() -const { randomBytes } = require('crypto') -const jwt = require('jsonwebtoken') -const User = require('../model/User') - -const cookieParams = { - maxAge: (1000 * parseInt(process.env.TOKEN_EXPIRE_IN)), - secure: false, - httpOnly: true, -} - -const generateJwtToken = (user) => jwt.sign({ - email: user.email, - verified: !!user.verify, - role: user.role, - }, - process.env.JWT_SECRET, - { - expiresIn: parseInt(process.env.TOKEN_EXPIRE_IN), - issuer: 'pruss.it', - algorithm: 'HS256', - } -) - -// Alive -router.get("/", function (_, res) { - res.send("Service is up.") -}) - -// Register -router.post('/register', async (req, res) => { - const refresh = randomBytes(32).toString('hex') - const user = new User({ - email: req.body.email, - password: req.body.password, - refresh, - }) - - try { - await user.save() - res.status(201).send(refresh) - } catch(err) { - if (err._message) { - res.status(422).send(err._message) - } else if (err.code && err.code === 11000) { - res.status(409).send('User with this email already exist') - } else { - res.status(400).send('Could not save the user') - } - } -}) - -// Login -router.post('/login', async (req, res) => { - try { - const user = await User.findByCredentials(req.body.email, req.body.password) - - if (!user) { - throw new Error() - } - - const refreshToken = await User.newRefreshToken(user) - - if (!refreshToken) { - throw new Error() - } - - const jwtToken = generateJwtToken(user) - - res - .cookie('token', jwtToken, cookieParams) - .status(204) - .send(refreshToken) - } catch (err) { - res.status(401).send('Could not login') - } -}) - -// Logout -router.post('/logout', async (_, res) => { - try { - // add session check - - res - .clearCookie('token') - .status(204) - .send() - } catch (err) { - res.status(401).send('Could not logout') - } -}) - -// Refresh token -router.post('/refresh', async (req, res) => { - try { - const user = await User.checkRefreshToken(req.body.email, req.body.refresh) - - if (!user) { - throw new Error() - } - - const newRefreshToken = await User.newRefreshToken(user) - - if (!newRefreshToken) { - throw new Error() - } - - const jwtToken = generateJwtToken(user) - - res - .cookie('token', jwtToken, cookieParams) - .status(201) - .send(newRefreshToken) - } catch (err) { - res.status(401).send('User logged out') - } -}) - -module.exports = router diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..294cb49 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,106 @@ +const fs = require('fs') +const router = require('express').Router() +const { randomBytes } = require('crypto') +const jwt = require('jsonwebtoken') +const User = require('../model/User') + +const cert = fs.readFileSync(`${process.cwd()}/cert/jwt_256_rsa`) + +const generateJwtToken = (user) => jwt.sign({ + email: user.email, + verified: !!user.verify, + role: user.role, + }, + { + key: cert, + passphrase: process.env.RSA_PASS, + }, + { + expiresIn: parseInt(process.env.TOKEN_EXPIRES_IN), + issuer: 'pruss.it', + algorithm: 'RS256', + } +) + +// Alive +router.get("/", (_, res) => res.send("Auth service is up.") ) + +// Register +router.post('/register', async (req, res) => { + const refresh = randomBytes(32).toString('hex') + const newUser = new User({ + email: req.body.email, + password: req.body.password, + refresh, + }) + + try { + const user = await newUser.save() + const jwtToken = generateJwtToken(user) + + res.status(201).send({ jt: jwtToken, rt: refresh }) + } catch(err) { + if (err._message) { + res.status(422).send({ error: err._message }) + } else if (err.code && err.code === 11000) { + res.status(409).send({ error: 'User with this email already exist' }) + } else { + res.status(400).send({ error: 'Could not save the user' }) + } + } +}) + +// Login +router.post('/login', async (req, res) => { + try { + const user = await User.findByCredentials(req.body.email, req.body.password) + + if (!user) throw new Error() + + const refreshToken = await User.newRefreshToken(user) + + if (!refreshToken) throw new Error() + + const jwtToken = generateJwtToken(user) + + res.status(202).send({ jt: jwtToken, rt: refreshToken }) + } catch (err) { + res.status(401).send({ error: 'Could not log in.' }) + } +}) + +// Logout +router.post('/logout', async (req, res) => { + try { + const user = await User.checkRefreshToken(req.body.email, req.body.refresh) + + if (!user) throw new Error() + + await User.removeRefreshToken(user.email) + + res.status(204).send() + } catch (err) { + res.status(401).send({ error: 'Could not logout' }) + } +}) + +// Refresh token +router.post('/refresh', async (req, res) => { + try { + const user = await User.checkRefreshToken(req.body.email, req.body.refresh) + + if (!user) throw new Error() + + const newRefreshToken = await User.newRefreshToken(user) + + if (!newRefreshToken) throw new Error() + + const jwtToken = generateJwtToken(user) + + res.status(201).send({ jt: jwtToken, rt: newRefreshToken }) + } catch (err) { + res.status(401).send({ error: 'User logged out' }) + } +}) + +module.exports = router |