diff --git a/bin/check-bounce.js b/bin/check-bounce.js index fe01d80d..e387efd0 100755 --- a/bin/check-bounce.js +++ b/bin/check-bounce.js @@ -12,9 +12,7 @@ process.stdin.on('data', chunk => { }); process.stdin.on('end', () => { - let str = Buffer.concat(chunks) - .toString() - .trim(); + let str = Buffer.concat(chunks).toString().trim(); let bounceInfo = bounces.check(str); console.log('data : %s', str.replace(/\n/g, '\n' + ' '.repeat(11))); Object.keys(bounceInfo || {}).forEach(key => { diff --git a/config/default.js b/config/default.js index 8a00e5dc..6f07c13a 100644 --- a/config/default.js +++ b/config/default.js @@ -132,6 +132,13 @@ module.exports = { }, disableInterfaces: ['forwarder'], // do not bounce messages from this interface sendingZone: 'bounces', + + // Send a warning email about delayed delivery + delayEmail: { + enabled: true, + after: 3 * 3600 * 1000 // 3h + }, + zoneConfig: { // specify zone specific bounce options myzonename: { diff --git a/lib/bounces.js b/lib/bounces.js index 7350a56b..6febaac3 100644 --- a/lib/bounces.js +++ b/lib/bounces.js @@ -106,6 +106,101 @@ module.exports.check = (input, category) => { }; }; +module.exports.canSendBounce = (delivery, options) => { + options = options || {}; + let logName = options.logName || 'Bounce'; + + if (delivery.skipBounce) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s as defined by routing', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>' + ); + return false; + } + + if (/^mailer-daemon@/i.test(delivery.from) || !delivery.from) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to envelope (MAIL FROM=%s)', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>', + JSON.stringify(delivery.from || '') + .replace(/"/g, '') + .trim() || '<>' + ); + return false; + } + + let xAutoResponseSuppress = delivery.headers.getFirst('X-Auto-Response-Suppress'); + if (/\ball\b/i.test(xAutoResponseSuppress)) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>', + 'X-Auto-Response-Suppress', + JSON.stringify(xAutoResponseSuppress).replace(/"/g, '').trim() + ); + return false; + } + + let autoSubmitted = delivery.headers.getFirst('Auto-Submitted'); + if (/\bauto-(generated|replied)\b/i.test(autoSubmitted)) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>', + 'Auto-Submitted', + JSON.stringify(autoSubmitted).replace(/"/g, '').trim() + ); + return false; + } + + let contentType = delivery.headers.getFirst('Content-Type'); + if (/^multipart\/report\b/i.test(contentType)) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>', + 'Content-Type', + 'multipart/report' + ); + return false; + } + + if (delivery.parsedEnvelope && /^mailer-daemon@/i.test(delivery.parsedEnvelope.from)) { + log.info( + logName, + 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', + delivery.sessionId, + delivery.id, + delivery.seq, + delivery.from || '<>', + 'From', + JSON.stringify(delivery.parsedEnvelope.from || '<>') + .replace(/"/g, '') + .trim() || '<>' + ); + return false; + } + + return true; +}; + function formatSMTPResponse(str) { str = (str || '').toString().trim(); let code = str.match(/^\d{3}[\s-]+([\d.]+\s*)?/); diff --git a/lib/ip-tools.js b/lib/ip-tools.js index 5510486a..1a280e6d 100644 --- a/lib/ip-tools.js +++ b/lib/ip-tools.js @@ -31,6 +31,8 @@ class RedisCache { return callback(); } + log.silly(logKey, 'DNSCACHE SET key=%s value=%s', key, JSON.stringify(value)); + db.redis .multi() .set('dns:' + key, JSON.stringify(value)) diff --git a/lib/mail-queue.js b/lib/mail-queue.js index 5f6866be..8014c32d 100644 --- a/lib/mail-queue.js +++ b/lib/mail-queue.js @@ -8,10 +8,13 @@ const QueueLocker = require('./queue-locker'); const TtlCache = require('./ttl-cache'); const crypto = require('crypto'); const plugins = require('./plugins'); +const Headers = require('mailsplit').Headers; const db = require('./db'); const GridFSBucket = require('mongodb').GridFSBucket; const ObjectId = require('mongodb').ObjectId; const internalCounters = require('./counters'); +const bounces = require('./bounces'); +const MailDrop = require('./mail-drop'); const yaml = require('js-yaml'); const fs = require('fs'); const pathlib = require('path'); @@ -47,6 +50,7 @@ class MailQueue { this.closing = false; this.garbageTimer = null; this.seqIndex = new SeqIndex(); + this.maildrop = new MailDrop(this); this.cache = new TtlCache(); // shared cache for workers this.locks = new QueueLocker(); @@ -745,31 +749,38 @@ class MailQueue { * * @param {Object} delivery Message object * @param {Number} ttl TTL in ms. Once this time is over the message is reinserted to queue - * @param {Number} responseData SMTP response or description + * @param {Object} responseData SMTP response or description * @param {Function} callback Run once the message is removed from active queue */ deferDelivery(delivery, ttl, responseData, callback) { // add metainfo about postponing the delivery - delivery._deferred = delivery._deferred || { - first: Date.now(), - count: 0 - }; - delivery._deferred.count++; - delivery._deferred.last = Date.now(); - delivery._deferred.next = Date.now() + ttl; - delivery._deferred.response = responseData.response; - delivery._deferred.log = responseData.log || delivery._deferred.log; - delivery.queued = new Date(Math.max(delivery._deferred.next, Date.now())); - delivery.locked = false; + + const now = Date.now(); let updates = { $set: { - _deferred: delivery._deferred, - queued: delivery.queued, + '_deferred.last': now, + '_deferred.next': now + ttl, + queued: new Date(now + ttl), locked: false + }, + $inc: { + '_deferred.count': 1 } }; + if (!delivery._deferred) { + updates.$set['_deferred.first'] = now; + } + + if (responseData.response) { + updates.$set['_deferred.response'] = responseData.response; + } + + if (responseData.log) { + updates.$set['_deferred.log'] = responseData.log; + } + if (responseData.updates && typeof responseData.updates === 'object') { Object.keys(responseData.updates).forEach(key => { if (key.charAt(0) === '$') { @@ -777,7 +788,7 @@ class MailQueue { return; // not allowed } // $inc etc. - updates[key] = responseData.updates[key]; + updates[key] = Object.assign(updates[key] || {}, responseData.updates[key]); return; } if (!updates.$set.hasOwnProperty(key)) { @@ -787,13 +798,16 @@ class MailQueue { } let collection = this.mongodb.collection(this.options.collection); - collection.updateOne( + collection.findOneAndUpdate( { id: delivery.id, seq: delivery.seq }, updates, - err => { + { + returnOriginal: true + }, + (err, item) => { if (err) { return callback(err); } @@ -802,6 +816,54 @@ class MailQueue { log.verbose('Queue', '%s.%s UNLOCK (key="%s")', delivery.id, delivery.seq, delivery._lock); this.locks.release(delivery._lock); + if (item && item.value) { + let firstCheck = item.value._deferred && item.value._deferred.first; + let prevLastCheck = item.value._deferred && item.value._deferred.last; + let lastCheck = now; + + if (firstCheck && prevLastCheck) { + return this.getMeta(delivery.id, (err, meta) => { + if (err) { + // ignore + log.error('Queue', '%s.%s GET META %s', delivery.id, delivery.seq, err.message); + return callback(null, true); + } + + let deliveryEntry = Object.assign(item.value, meta || {}); + deliveryEntry.headers = new Headers(deliveryEntry.headers); + + deliveryEntry.envelope = { + from: deliveryEntry.from, + to: deliveryEntry.recipient + }; + + if (!bounces.canSendBounce(deliveryEntry, { logName: 'Queue' })) { + return false; + } + + return plugins.handler.runHooks( + 'queue:delayed', + [ + Object.assign({}, deliveryEntry, responseData), + this.maildrop, + { + first: firstCheck, + prev: prevLastCheck, + last: lastCheck + } + ], + err => { + if (err) { + log.error('Queue', '%s.%s queue:delayed %s', deliveryEntry.id, deliveryEntry.seq, err.message); + } + + return callback(null, true); + } + ); + }); + } + } + return callback(null, true); } ); diff --git a/lib/queue-server.js b/lib/queue-server.js index 1624f364..c4ca6fb1 100644 --- a/lib/queue-server.js +++ b/lib/queue-server.js @@ -180,7 +180,7 @@ class QueueServer { ); }); } - case 'DEFER': + case 'DEFER': { if (!client.zone) { return client.send({ req: data.req, @@ -190,6 +190,7 @@ class QueueServer { deliveryStatusCounter.inc({ status: 'deferred' }); + return this.deferDelivery(client.zone, client.id, data, (err, response) => { if (!client) { // client already errored or closed @@ -206,11 +207,12 @@ class QueueServer { response }); }); + } case 'BOUNCE': { bounceCounter.inc(); - let bounce = data; + const bounce = data; bounce.headers = new Headers(bounce.headers || []); plugins.handler.runHooks( 'queue:bounce', diff --git a/lib/sender.js b/lib/sender.js index 7f1b4a97..c5e56df8 100644 --- a/lib/sender.js +++ b/lib/sender.js @@ -30,7 +30,7 @@ const DEFAULT_DEFER_TIMES = [ 240 /* 28h */, 240 /* 32h */, 240 /* 36h */, 240 /* 40h */, 240 /* 44h */, 240 /* 48h */ ].map(v => v * 60 * 1000); -const POLICY_RESPONSE = '550 Failed to establish a TLS connection to the MX server as requested by policy'; +const POLICY_RESPONSE = 'Failed to establish a TLS connection to the MX server as requested by policy'; class Sender extends EventEmitter { constructor(clientId, connectionId, zone, sendCommand, queue, connectionPool) { @@ -304,9 +304,12 @@ class Sender extends EventEmitter { // connection reached unexpected close event let host = (connection && connection.options && (connection.options.servername || connection.options.host)) || delivery.domain; - let err = new Error('Connection to ' + host + ' closed unexpectedly'); - err.response = '450 Connection to ' + host + ' closed unexpectedly'; - err.category = 'network'; + + let error = new Error(`Connection to ${host} closed unexpectedly`); + error.response = `Network error: ${err.message}`; + error.category = 'network'; + error.temporary = true; + return handleError(delivery, connection, err); }, 1000).unref(); }); @@ -694,16 +697,23 @@ class Sender extends EventEmitter { action: err.httpResponse >= 400 && err.httpResponse < 500 ? 'reject' : 'defer', category: 'http', message: err.response || err.message, - code: err.httpResponse || 488, + code: err.httpResponse, + status: false + }; + } else if (['dns', 'network', 'policy'].includes(err.category)) { + // preset categories from mx-connect etc + bounce = { + action: err.temporary || err.action === 'defer' ? 'defer' : 'reject', + category: err.category, + message: err.response || err.message, status: false }; } else if (!err.responseCode && !/^\d{3}\b/.test(err.response || err.message)) { // timeouts, node network errors etc. bounce = { action: 'defer', - category: 'connection', + category: 'network', message: err.response || err.message, - code: 488, status: false }; } else { @@ -878,8 +888,12 @@ class Sender extends EventEmitter { if (domainData && domainData.error) { let err = new Error(domainData.error); - err.response = domainData.response; - err.category = domainData.category; + for (let key of ['response', 'category', 'temporary', 'code']) { + if (domainData[key]) { + err[key] = domainData[key]; + } + } + return callback(err); } @@ -894,13 +908,15 @@ class Sender extends EventEmitter { domainData.error = err.message; domainData.response = err.response; domainData.category = err.category; + domainData.temporary = err.temporary; + domainData.code = err.code; if (err.lastErr && [err.lastErr.errno, err.lastErr.code].includes('ETIMEDOUT')) { // most probably a firewall issue or a server that does not have MX running ttl = 15 * 60 * 1000; } else { - // auto defer all messages to this server for the next 10 minutes - ttl = 10 * 60 * 1000; + // auto defer all messages to this server for the next 2 minutes + ttl = 2 * 60 * 1000; } cmd = { cmd: 'SETCACHE', @@ -1170,17 +1186,21 @@ class Sender extends EventEmitter { if (/disconnected\s+before\s+secure\s+TLS\s+connection\s+was\s+established/i.test(err.message) || err.cert) { if (enforceTLS) { // policy violation - err.response = POLICY_RESPONSE + (err.reason ? '. ' + err.reason : ''); + err.response = `Policy error: ${POLICY_RESPONSE}${err.reason ? `. ${err.reason}` : ''}`; err.category = 'policy'; + err.temporary = false; } else { // try to reconnect without TLS err.code = 'ETLS'; } } - err.response = err.response || '450 Error connecting to ' + mx.host + '. ' + err.message; + err.response = err.response || `Nework error: Error connecting to ${mx.host}. ${err.message}`; err.category = err.category || 'network'; err.logtrail = logtrail; + if (typeof err.temporary !== 'boolean') { + err.temporary = true; + } if ( (err.code === 'ETLS' || @@ -1302,7 +1322,7 @@ class Sender extends EventEmitter { returned = true; connection.close(); let err = new Error('TLS is required'); - err.response = POLICY_RESPONSE; + err.response = `Policy error: ${POLICY_RESPONSE}`; err.category = 'policy'; return callback(err); } @@ -1396,92 +1416,8 @@ class Sender extends EventEmitter { } sendBounceMessage(delivery, bounce, smtpResponse) { - if (/^mailer-daemon@/i.test(delivery.from) || !delivery.from) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to envelope (MAIL FROM=%s)', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>', - JSON.stringify(delivery.from || '') - .replace(/"/g, '') - .trim() || '<>' - ); - return; - } - - if (delivery.skipBounce) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s as defined by routing', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>' - ); - return; - } - - let xAutoResponseSuppress = delivery.headers.getFirst('X-Auto-Response-Suppress'); - if (/\ball\b/i.test(xAutoResponseSuppress)) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>', - 'X-Auto-Response-Suppress', - JSON.stringify(xAutoResponseSuppress).replace(/"/g, '').trim() - ); - return; - } - - let autoSubmitted = delivery.headers.getFirst('Auto-Submitted'); - if (/\bauto-(generated|replied)\b/i.test(autoSubmitted)) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>', - 'Auto-Submitted', - JSON.stringify(autoSubmitted).replace(/"/g, '').trim() - ); - return; - } - - let contentType = delivery.headers.getFirst('Content-Type'); - if (/^multipart\/report\b/i.test(contentType)) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>', - 'Content-Type', - 'multipart/report' - ); - return; - } - - if (delivery.parsedEnvelope && /^mailer-daemon@/i.test(delivery.parsedEnvelope.from)) { - log.info( - this.logName, - 'id=%s %s.%s SKIPBOUNCE Skip bounce to %s due to header (%s=%s)', - delivery.sessionId, - delivery.id, - delivery.seq, - delivery.from || '<>', - 'From', - JSON.stringify(delivery.parsedEnvelope.from || '<>') - .replace(/"/g, '') - .trim() || '<>' - ); - return; + if (!bounces.canSendBounce(delivery, { logName: this.logName })) { + return false; } this.sendCommand( diff --git a/package-lock.json b/package-lock.json index 6759f9ce..8c4db2e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "minimist": "1.2.8", "mongodb": "4.17.0", "msgpack-js": "0.3.0", - "mx-connect": "1.4.4", + "mx-connect": "1.5.3", "nodemailer": "6.9.8", "npmlog": "7.0.1", "prom-client": "15.1.0", @@ -180,50 +180,50 @@ "optional": true }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.490.0.tgz", - "integrity": "sha512-P2C8yBOUK0iIIYMb6AUkiE5qoWu032tMVxIZWya9dBYu8uqlnzO0duC5P3UGn6lETZX/59PQ926vRc/6YMyMLg==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.495.0.tgz", + "integrity": "sha512-ODUGi2VKl+VO+NMx+32+vRUpj1A38XxwYKCA9KJMX/fVXmEispaENpKYnPGJz30QX6GBfdFBD6/KcqiyiQ/blA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.490.0", - "@aws-sdk/core": "3.490.0", - "@aws-sdk/credential-provider-node": "3.490.0", - "@aws-sdk/middleware-host-header": "3.489.0", - "@aws-sdk/middleware-logger": "3.489.0", - "@aws-sdk/middleware-recursion-detection": "3.489.0", - "@aws-sdk/middleware-signing": "3.489.0", - "@aws-sdk/middleware-user-agent": "3.489.0", - "@aws-sdk/region-config-resolver": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@aws-sdk/util-endpoints": "3.489.0", - "@aws-sdk/util-user-agent-browser": "3.489.0", - "@aws-sdk/util-user-agent-node": "3.489.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", + "@aws-sdk/client-sts": "3.495.0", + "@aws-sdk/core": "3.495.0", + "@aws-sdk/credential-provider-node": "3.495.0", + "@aws-sdk/middleware-host-header": "3.495.0", + "@aws-sdk/middleware-logger": "3.495.0", + "@aws-sdk/middleware-recursion-detection": "3.495.0", + "@aws-sdk/middleware-signing": "3.495.0", + "@aws-sdk/middleware-user-agent": "3.495.0", + "@aws-sdk/region-config-resolver": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@aws-sdk/util-endpoints": "3.495.0", + "@aws-sdk/util-user-agent-browser": "3.495.0", + "@aws-sdk/util-user-agent-node": "3.495.0", + "@smithy/config-resolver": "^2.1.0", + "@smithy/core": "^1.3.0", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/hash-node": "^2.1.0", + "@smithy/invalid-dependency": "^2.1.0", + "@smithy/middleware-content-length": "^2.1.0", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-retry": "^2.1.0", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/middleware-stack": "^2.1.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", + "@smithy/util-base64": "^2.1.0", + "@smithy/util-body-length-browser": "^2.1.0", + "@smithy/util-body-length-node": "^2.2.0", + "@smithy/util-defaults-mode-browser": "^2.1.0", + "@smithy/util-defaults-mode-node": "^2.1.0", + "@smithy/util-endpoints": "^1.1.0", + "@smithy/util-retry": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -231,47 +231,47 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.490.0.tgz", - "integrity": "sha512-yfxoHmCL1w/IKmFRfzCxdVCQrGlSQf4eei9iVEm5oi3iE8REFyPj3o/BmKQEHG3h2ITK5UbdYDb5TY4xoYHsyA==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.495.0.tgz", + "integrity": "sha512-Uerh3aDe/JeQNjcyXKI+8VuKPOAB6mCUKlScD0AIca1Kdyk8PsQTq4rDzFCYAQsNS5/BuPN+Ak0NqwsJM0agYA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.490.0", - "@aws-sdk/middleware-host-header": "3.489.0", - "@aws-sdk/middleware-logger": "3.489.0", - "@aws-sdk/middleware-recursion-detection": "3.489.0", - "@aws-sdk/middleware-user-agent": "3.489.0", - "@aws-sdk/region-config-resolver": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@aws-sdk/util-endpoints": "3.489.0", - "@aws-sdk/util-user-agent-browser": "3.489.0", - "@aws-sdk/util-user-agent-node": "3.489.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", + "@aws-sdk/core": "3.495.0", + "@aws-sdk/middleware-host-header": "3.495.0", + "@aws-sdk/middleware-logger": "3.495.0", + "@aws-sdk/middleware-recursion-detection": "3.495.0", + "@aws-sdk/middleware-user-agent": "3.495.0", + "@aws-sdk/region-config-resolver": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@aws-sdk/util-endpoints": "3.495.0", + "@aws-sdk/util-user-agent-browser": "3.495.0", + "@aws-sdk/util-user-agent-node": "3.495.0", + "@smithy/config-resolver": "^2.1.0", + "@smithy/core": "^1.3.0", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/hash-node": "^2.1.0", + "@smithy/invalid-dependency": "^2.1.0", + "@smithy/middleware-content-length": "^2.1.0", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-retry": "^2.1.0", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/middleware-stack": "^2.1.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", + "@smithy/util-base64": "^2.1.0", + "@smithy/util-body-length-browser": "^2.1.0", + "@smithy/util-body-length-node": "^2.2.0", + "@smithy/util-defaults-mode-browser": "^2.1.0", + "@smithy/util-defaults-mode-node": "^2.1.0", + "@smithy/util-endpoints": "^1.1.0", + "@smithy/util-retry": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -279,49 +279,49 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.490.0.tgz", - "integrity": "sha512-n2vQ5Qu2qi2I0XMI+IH99ElpIRHOJTa1+sqNC4juMYxKQBMvw+EnsqUtaL3QvTHoyxNB/R7mpkeBB6SzPQ1TtA==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.495.0.tgz", + "integrity": "sha512-lXQIx7D1MQ5+F8PaSYV7UiSxgP9M5ba/YFx1rcxi5l1GlbAWuHWhrk15qKe9d6vLxa2eTjJFiVzbO7pJqRBEWw==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.490.0", - "@aws-sdk/credential-provider-node": "3.490.0", - "@aws-sdk/middleware-host-header": "3.489.0", - "@aws-sdk/middleware-logger": "3.489.0", - "@aws-sdk/middleware-recursion-detection": "3.489.0", - "@aws-sdk/middleware-user-agent": "3.489.0", - "@aws-sdk/region-config-resolver": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@aws-sdk/util-endpoints": "3.489.0", - "@aws-sdk/util-user-agent-browser": "3.489.0", - "@aws-sdk/util-user-agent-node": "3.489.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", + "@aws-sdk/core": "3.495.0", + "@aws-sdk/credential-provider-node": "3.495.0", + "@aws-sdk/middleware-host-header": "3.495.0", + "@aws-sdk/middleware-logger": "3.495.0", + "@aws-sdk/middleware-recursion-detection": "3.495.0", + "@aws-sdk/middleware-user-agent": "3.495.0", + "@aws-sdk/region-config-resolver": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@aws-sdk/util-endpoints": "3.495.0", + "@aws-sdk/util-user-agent-browser": "3.495.0", + "@aws-sdk/util-user-agent-node": "3.495.0", + "@smithy/config-resolver": "^2.1.0", + "@smithy/core": "^1.3.0", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/hash-node": "^2.1.0", + "@smithy/invalid-dependency": "^2.1.0", + "@smithy/middleware-content-length": "^2.1.0", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-retry": "^2.1.0", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/middleware-stack": "^2.1.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", + "@smithy/util-base64": "^2.1.0", + "@smithy/util-body-length-browser": "^2.1.0", + "@smithy/util-body-length-node": "^2.2.0", + "@smithy/util-defaults-mode-browser": "^2.1.0", + "@smithy/util-defaults-mode-node": "^2.1.0", + "@smithy/util-endpoints": "^1.1.0", + "@smithy/util-middleware": "^2.1.0", + "@smithy/util-retry": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -330,16 +330,16 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.490.0.tgz", - "integrity": "sha512-TSBWkXtxMU7q1Zo6w3v5wIOr/sj7P5Jw3OyO7lJrFGsPsDC2xwpxkVqTesDxkzgMRypO52xjYEmveagn1xxBHg==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.495.0.tgz", + "integrity": "sha512-TI/jq1cSUR+r1prJ9xXtxMO0u2/jXrWjf3Z2ekForsCObPtR9qkJCYyezargupoSJqZA60KUpOhxrKW/dFJ1rw==", "optional": true, "dependencies": { - "@smithy/core": "^1.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", + "@smithy/core": "^1.3.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/signature-v4": "^2.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -347,15 +347,15 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.490.0.tgz", - "integrity": "sha512-tm07p+jladfKJYFhFqQjT8PC3mM0zagVud/NnYx6w/MB7pHPrixhCRoG1hK+ckAjnUAUVP2uuGXhTVkTfrkTXg==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.495.0.tgz", + "integrity": "sha512-YN24LlhhglmADISecz1R963TY6r+zySpUzCbYYTnJQqBL8YNSJqT7TM1ia9H4zsqqP4iIMFH+MXDqElooaKekQ==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.490.0", - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/client-cognito-identity": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -363,14 +363,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.489.0.tgz", - "integrity": "sha512-5PqYsx9G5SB2tqPT9/z/u0EkF6D4wP6HTMWQs+DfMdmwXihrqQAgeYaTtV3KbXqb88p6sfacwxhUvE6+Rm494w==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.495.0.tgz", + "integrity": "sha512-2CKlHiQRXyVA7t3VGXo39a/UwRrZs/VG0jYZFu60dK9afxesRkA4XOJto765VenT/eR3LkeVW+RBzOISHUFg0Q==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -378,19 +378,19 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.489.0.tgz", - "integrity": "sha512-Q9M/yQs2e67Jvrvgvr1J3dZkEypSUlUhsNwCCNLDFGaDZjft6BgqzNMXKKtH+IvuAuZAjqZ2Wm4mriFWbhXUeA==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.495.0.tgz", + "integrity": "sha512-7C3/Pf/Zt5WpWvTqGvPe4JKKJOulLaQ2M4tL37AarKTKHdfRjhBnAaPcTfjbyabw6Egaeu6QUEpBy9baF3aFtQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", + "@aws-sdk/types": "3.495.0", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/util-stream": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -398,20 +398,20 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.490.0.tgz", - "integrity": "sha512-7m63zyCpVqj9FsoDxWMWWRvL6c7zZzOcXYkHZmHujVVlmAXH0RT/vkXFkYgt+Ku+ov+v5NQrzwO5TmVoRt6O8g==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.495.0.tgz", + "integrity": "sha512-DGRfND+FIacuQQNozMa8fS4yUrWZgkB6CEH4ghiqUvtE7h2sGMMVEerlaCGgTnQlpWWvDS656orzwEO3vuMTVw==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.489.0", - "@aws-sdk/credential-provider-process": "3.489.0", - "@aws-sdk/credential-provider-sso": "3.490.0", - "@aws-sdk/credential-provider-web-identity": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", + "@aws-sdk/credential-provider-env": "3.495.0", + "@aws-sdk/credential-provider-process": "3.495.0", + "@aws-sdk/credential-provider-sso": "3.495.0", + "@aws-sdk/credential-provider-web-identity": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@smithy/credential-provider-imds": "^2.2.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -419,21 +419,21 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.490.0.tgz", - "integrity": "sha512-Gh33u2O5Xbout8G3z/Z5H/CZzdG1ophxf/XS3iMFxA1cazQ7swY1UMmGvB7Lm7upvax5anXouItD1Ph3gzKc4w==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.495.0.tgz", + "integrity": "sha512-OH3lV7erPLNxkZQ+QBEgX353mseelBaHutyJNFKdgCYMZUhENu2DNTvkasGtwA24TqG0sRiuO2yNhpqP8IF+LA==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.489.0", - "@aws-sdk/credential-provider-ini": "3.490.0", - "@aws-sdk/credential-provider-process": "3.489.0", - "@aws-sdk/credential-provider-sso": "3.490.0", - "@aws-sdk/credential-provider-web-identity": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", + "@aws-sdk/credential-provider-env": "3.495.0", + "@aws-sdk/credential-provider-ini": "3.495.0", + "@aws-sdk/credential-provider-process": "3.495.0", + "@aws-sdk/credential-provider-sso": "3.495.0", + "@aws-sdk/credential-provider-web-identity": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@smithy/credential-provider-imds": "^2.2.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -441,15 +441,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.489.0.tgz", - "integrity": "sha512-3vKQYJZ5cZYjy0870CPmbmKRBgATw2xCygxhn4m4UDCjOXVXcGUtYD51DMWsvBo3S0W8kH+FIJV4yuEDMFqLFQ==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.495.0.tgz", + "integrity": "sha512-AouHJtg5qXeqzlY5plqbBkQPea1Kd3/tz9wfN+d5gbTUsDBlV7R6IinzhJWWgniS0jsaEOronlCXLIEOWUzTsw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -457,17 +457,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.490.0.tgz", - "integrity": "sha512-3UUBUoPbFvT58IhS4Vb23omYj/QPNkjgxu9p9ruQ3KSjLkanI4w8t/l/jljA65q83P7CoLnM5UKG9L7RA8/V1Q==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.495.0.tgz", + "integrity": "sha512-brbgLtws+jmBPm6FrQ0CT2mHCgFKdopwxJj/4+j//OH0aAgzBH5gOztoDu1R556KU9K8Co220J79gJWV3s40zQ==", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.490.0", - "@aws-sdk/token-providers": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", + "@aws-sdk/client-sso": "3.495.0", + "@aws-sdk/token-providers": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -475,14 +475,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.489.0.tgz", - "integrity": "sha512-mjIuE2Wg1H/ds0nXQ/7vfusEDudmdd8YzKZI1y5O4n60iZZtyB2RNIECtvLMx1EQAKclidY7/06qQkArrGau5Q==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.495.0.tgz", + "integrity": "sha512-w4S01mdQZ8kQn4J6CM2Fgral9xtNBh8h5i4DWSOwFxfiokott59zDoFMWJRUdUHzXsnAGULC8+wJ4VeiZZBq1Q==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -490,26 +490,26 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.490.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.490.0.tgz", - "integrity": "sha512-b66SfI3A2H5qVKYkuaYtnNmHApcj2Vju6wRWDr+nZX2iVqBcpCFIs6jMBY0QWmwn+xhlVvAX9tI4AoqGumzKWg==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.495.0.tgz", + "integrity": "sha512-hVNhG8fLkB8iy0e7zF6WH+C5fP84EIk9zFPo3b6pIdv9VItPIuuhCi7Mww7er3rQs4rqG16QO7icx5vGuOKLKA==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.490.0", - "@aws-sdk/client-sso": "3.490.0", - "@aws-sdk/client-sts": "3.490.0", - "@aws-sdk/credential-provider-cognito-identity": "3.490.0", - "@aws-sdk/credential-provider-env": "3.489.0", - "@aws-sdk/credential-provider-http": "3.489.0", - "@aws-sdk/credential-provider-ini": "3.490.0", - "@aws-sdk/credential-provider-node": "3.490.0", - "@aws-sdk/credential-provider-process": "3.489.0", - "@aws-sdk/credential-provider-sso": "3.490.0", - "@aws-sdk/credential-provider-web-identity": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/client-cognito-identity": "3.495.0", + "@aws-sdk/client-sso": "3.495.0", + "@aws-sdk/client-sts": "3.495.0", + "@aws-sdk/credential-provider-cognito-identity": "3.495.0", + "@aws-sdk/credential-provider-env": "3.495.0", + "@aws-sdk/credential-provider-http": "3.495.0", + "@aws-sdk/credential-provider-ini": "3.495.0", + "@aws-sdk/credential-provider-node": "3.495.0", + "@aws-sdk/credential-provider-process": "3.495.0", + "@aws-sdk/credential-provider-sso": "3.495.0", + "@aws-sdk/credential-provider-web-identity": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@smithy/credential-provider-imds": "^2.2.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -517,14 +517,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.489.0.tgz", - "integrity": "sha512-Cl7HJ1jhOfllwf0CRx1eB4ypRGMqdGKWpc0eSTXty7wWSvCdMZUhwfjQqu2bIOIlgYxg/gFu6TVmVZ6g4O8PlA==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.495.0.tgz", + "integrity": "sha512-qqE6mVxbyJwn59NQMvtYyaZT3GEZnmsvBUry3sDtU7Be1g9w5OKhY4CnAAQyXZI288iQUtyxxDh+hnSLy6RFjA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -532,13 +532,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.489.0.tgz", - "integrity": "sha512-+EVDnWese61MdImcBNAgz/AhTcIZJaska/xsU3GWU9CP905x4a4qZdB7fExFMDu1Jlz5pJqNteFYYHCFMJhHfg==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.495.0.tgz", + "integrity": "sha512-sgmr9fpCSg3rFvMnvfKeN7dhY+AmUpZPPWyc+s1kgQONeLUUxQkbdqR2/V+tz2ZPxUBD2dToTG/JhtMcIKmt4Q==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -546,14 +546,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.489.0.tgz", - "integrity": "sha512-m4rU+fTzziQcu9DKjRNZ4nQlXENEd2ZnJblJV4ONdWqqEjbmOgOj3P6aCCQlJdIbzuNvX1FBOZ5tY59ZpERo7Q==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.495.0.tgz", + "integrity": "sha512-jhuOcLsMrHengJy/oz6Waumwx/vtSMKnEbROR7qZ7CaTDHRUbriPYXGen7CHCs/6aWN0UeI3JBAqwlnSW5tpIg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -561,17 +561,17 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.489.0.tgz", - "integrity": "sha512-rlHcWYZn6Ym3v/u0DvKNDiD7ogIzEsHlerm0lowTiQbszkFobOiUClRTALwvsUZdAAztl706qO1OKbnGnD6Ubw==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.495.0.tgz", + "integrity": "sha512-QZuWRo6JQ7UKeHzqqnP/qmUXirVKXSMXSEFtpOHio/JkQPASVlD1TNs5L6RL7dKrnqLrg/jpTiw4b0UdAU8kOw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", + "@aws-sdk/types": "3.495.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/signature-v4": "^2.1.0", + "@smithy/types": "^2.9.0", + "@smithy/util-middleware": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -579,15 +579,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.489.0.tgz", - "integrity": "sha512-M54Cv2fAN3GGgdfUjLtZ4wFUIrfM/ivbXv4DgpcNsacEQ2g4H+weQgKp41X7XZW8MWAzl+k1zJaryK69RYNQkQ==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.495.0.tgz", + "integrity": "sha512-n+lC43Z7+LyAF7b63bR+e5pBmBqPaqh4gupEmrORc4wKsX7U4OncDPiVn5jPD7ZC3IZbLeTuDsjQOK8Ev+Hraw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@aws-sdk/util-endpoints": "3.489.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@aws-sdk/util-endpoints": "3.495.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -595,16 +595,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.489.0.tgz", - "integrity": "sha512-UvrnB78XTz9ddby7mr0vuUHn2MO3VTjzaIu+GQhyedMGQU0QlIQrYOlzbbu4LC5rL1O8FxFLUxRe/AAjgwyuGw==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.495.0.tgz", + "integrity": "sha512-ZgixNb+8dWUvc42Uso2fh38U7W7wW4OESUmQIFQzYW58B1ylZ4xuq/mo0xSY5b5j6u/+pJadvlIpx/QYBafVHg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", + "@aws-sdk/types": "3.495.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/types": "^2.9.0", + "@smithy/util-config-provider": "^2.2.0", + "@smithy/util-middleware": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -612,47 +612,47 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.489.0.tgz", - "integrity": "sha512-hSgjB8CMQoA8EIQ0ripDjDtbBcWDSa+7vSBYPIzksyknaGERR/GUfGXLV2dpm5t17FgFG6irT5f3ZlBzarL8Dw==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.495.0.tgz", + "integrity": "sha512-1JSEx82FMKNNtPoV5NRpFxi0XHgfvonCKb4+2lR/k4nljqeysZPnOaIW/7C1eAwhoJ6buEIVxoHscemBtdKo+A==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.489.0", - "@aws-sdk/middleware-logger": "3.489.0", - "@aws-sdk/middleware-recursion-detection": "3.489.0", - "@aws-sdk/middleware-user-agent": "3.489.0", - "@aws-sdk/region-config-resolver": "3.489.0", - "@aws-sdk/types": "3.489.0", - "@aws-sdk/util-endpoints": "3.489.0", - "@aws-sdk/util-user-agent-browser": "3.489.0", - "@aws-sdk/util-user-agent-node": "3.489.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", + "@aws-sdk/middleware-host-header": "3.495.0", + "@aws-sdk/middleware-logger": "3.495.0", + "@aws-sdk/middleware-recursion-detection": "3.495.0", + "@aws-sdk/middleware-user-agent": "3.495.0", + "@aws-sdk/region-config-resolver": "3.495.0", + "@aws-sdk/types": "3.495.0", + "@aws-sdk/util-endpoints": "3.495.0", + "@aws-sdk/util-user-agent-browser": "3.495.0", + "@aws-sdk/util-user-agent-node": "3.495.0", + "@smithy/config-resolver": "^2.1.0", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/hash-node": "^2.1.0", + "@smithy/invalid-dependency": "^2.1.0", + "@smithy/middleware-content-length": "^2.1.0", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-retry": "^2.1.0", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/middleware-stack": "^2.1.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", + "@smithy/util-base64": "^2.1.0", + "@smithy/util-body-length-browser": "^2.1.0", + "@smithy/util-body-length-node": "^2.2.0", + "@smithy/util-defaults-mode-browser": "^2.1.0", + "@smithy/util-defaults-mode-node": "^2.1.0", + "@smithy/util-endpoints": "^1.1.0", + "@smithy/util-retry": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -660,12 +660,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.489.0.tgz", - "integrity": "sha512-kcDtLfKog/p0tC4gAeqJqWxAiEzfe2LRPnKamvSG2Mjbthx4R/alE2dxyIq/wW+nvRv0fqR3OD5kD1+eVfdr/w==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.495.0.tgz", + "integrity": "sha512-KUpo2U1rD4U6gT1QNPUJGmbQnruvIJmPeuyKndil6h2zkCpG5I0AHE8ixpfuBbizIZQOIA/26pArQivDChOD9A==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -673,14 +673,14 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.489.0.tgz", - "integrity": "sha512-uGyG1u84ATX03mf7bT4xD9XD/vlYJGD5+RxMN/UpzeTfzXfh+jvCQWbOQ44z8ttFJWYQQqrLxkfpF/JgvALzLA==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.495.0.tgz", + "integrity": "sha512-pMJ6rb16y51I4G33xtinkXAXH/2mQ0WZCwoh1sNkCM2MUfZDw9zAyP+PvB2tpEytQX8Fc7bR4qIP+td+pPEXAg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/types": "^2.8.0", - "@smithy/util-endpoints": "^1.0.8", + "@aws-sdk/types": "3.495.0", + "@smithy/types": "^2.9.0", + "@smithy/util-endpoints": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -688,9 +688,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.465.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz", - "integrity": "sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", + "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -700,26 +700,26 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.489.0.tgz", - "integrity": "sha512-85B9KMsuMpAZauzWQ16r52ZBAHYnznW6BVitnBglsibN7oJKn10Hggt4QGuRhvQFCxQ8YhvBl7r+vQGFO4hxIw==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.495.0.tgz", + "integrity": "sha512-CIlY54aKahUqF4kygbMkDkFRc9t+8Km/r+IWapy91h0Exy84V+S47MJdAelsMg8Id6hZ47jWmuuzz5UcjU/+sQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/types": "^2.9.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.489.0.tgz", - "integrity": "sha512-CYdkBHig8sFNc0dv11Ni9WXvZQHeI5+z77OrDHKkbidFx/V4BDTuwZw4K1vWg62pzFOEfzunJFiULRcDZWJR3w==", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.495.0.tgz", + "integrity": "sha512-BbEwwh9SCtMrcNES0u4q5/8BjAKkOiHGia0gDSlQHOmEzXxYvhx0ByRMaPeprL06iESFa6HcleJWenWktfxk3g==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.489.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.495.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1299,6 +1299,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -1513,9 +1521,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.3.tgz", - "integrity": "sha512-SyCxhJfmK6MoLNV5SbDpNdUy9SDv5H7y9/9rl3KpnwgTHWuNNMc87zWqbcIZXNWY+aUjxLGLEcvHoLagG4tWCg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", + "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==", "optional": true, "dependencies": { "sparse-bitfield": "^3.0.3" @@ -1644,12 +1652,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@smithy/abort-controller": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.16.tgz", - "integrity": "sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.0.tgz", + "integrity": "sha512-fyPlWpzXyKzDVRRMUbsfH7AV/2xX+dyZ5RqeEo6Hjz9YUvDMGVSnm88iHH0zqZ+XmH4+sH4+mhwRL76HXX65uw==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1657,15 +1665,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.23.tgz", - "integrity": "sha512-XakUqgtP2YY8Mi+Nlif5BiqJgWdvfxJafSpOSQeCOMizu+PUhE4fBQSy6xFcR+eInrwVadaABNxoJyGUMn15ew==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.0.tgz", + "integrity": "sha512-NcR1Hw2uZgwHT7/KFsQH76YHb/mNGLFu+hS0ODnoFUpViE8ddIVOXm/8sgwdh0QvFPtWGzPn0Wcp19Cm31wv2A==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/types": "^2.9.0", + "@smithy/util-config-provider": "^2.2.0", + "@smithy/util-middleware": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1673,18 +1681,18 @@ } }, "node_modules/@smithy/core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.2.2.tgz", - "integrity": "sha512-uLjrskLT+mWb0emTR5QaiAIxVEU7ndpptDaVDrTwwhD+RjvHhjIiGQ3YL5jKk1a5VSDQUA2RGkXvJ6XKRcz6Dg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.0.tgz", + "integrity": "sha512-XoU9eiICwhxZIyAdugijyD/YqsumDQ3FgGyFSJibO60qoUkdfMGSjnIvrTemjFBdnDsj4B26F/ZRxSR3PUJbJQ==", "optional": true, "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-retry": "^2.1.0", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/util-middleware": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1692,15 +1700,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.5.tgz", - "integrity": "sha512-VfvE6Wg1MUWwpTZFBnUD7zxvPhLY8jlHCzu6bCjlIYoWgXCDzZAML76IlZUEf45nib3rjehnFgg0s1rgsuN/bg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.0.tgz", + "integrity": "sha512-uqoRizHR8rKih6SuWcJRSv46tdqZk1zPEk6r909O87XO85j21MfUcxRKzbkORM2JOlaFhCH4geRcvlvYfK6EyQ==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1708,39 +1716,39 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.16.tgz", - "integrity": "sha512-umYh5pdCE9GHgiMAH49zu9wXWZKNHHdKPm/lK22WYISTjqu29SepmpWNmPiBLy/yUu4HFEGJHIFrDWhbDlApaw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.0.tgz", + "integrity": "sha512-1yQnf8bSycsZ5ICXVMf8pEj1DQSUsw6/3H4nEdzH2+E3RZdNGPjVecQEm9kWPW7fvXvNvzT8MvZOQdk1IWoVTg==", "optional": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/types": "^2.9.0", + "@smithy/util-hex-encoding": "^2.1.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz", - "integrity": "sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.0.tgz", + "integrity": "sha512-fLhPNfbWG8vTcS9PsR1wjHaA54kDcSiAZKVuVAfjHleS7QDWjrCr1SDUqCB2yAc9NBLe2lIDbDL8+i9yoYhxoQ==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", + "@smithy/protocol-http": "^3.1.0", + "@smithy/querystring-builder": "^2.1.0", + "@smithy/types": "^2.9.0", + "@smithy/util-base64": "^2.1.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.18.tgz", - "integrity": "sha512-gN2JFvAgnZCyDN9rJgcejfpK0uPPJrSortVVVVWsru9whS7eQey6+gj2eM5ln2i6rHNntIXzal1Fm9XOPuoaKA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.0.tgz", + "integrity": "sha512-/B7b6NNjw+i4PlwsrYHmxmmrTxp2oRejgZH26HhXE77XWwAiPEI9iHu7GZR9fYhm7Fsj66Z9Bk6JA9aEvUC9/w==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "@smithy/types": "^2.9.0", + "@smithy/util-buffer-from": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1748,19 +1756,19 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.16.tgz", - "integrity": "sha512-apEHakT/kmpNo1VFHP4W/cjfeP9U0x5qvfsLJubgp7UM/gq4qYp0GbqdE7QhsjUaYvEnrftRqs7+YrtWreV0wA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.0.tgz", + "integrity": "sha512-hvryGI0KChV4jMgK/kwr6U4/HaYldzjiQAZ+c//QAMDoCp0KkP0Xt94XqAkr7Uq08577mAMW5U70YCaAx+KjSQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.0.tgz", + "integrity": "sha512-XnQvn/6ie5kjFyeW94NqSjGGOdMuB2WnNmDWKHHLVMCR/Emu7B8pcAZX4k8H3tjDujXAQvfBrEgmPRq6FgqmZg==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -1770,13 +1778,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.18.tgz", - "integrity": "sha512-ZJ9uKPTfxYheTKSKYB+GCvcj+izw9WGzRLhjn8n254q0jWLojUzn7Vw0l4R/Gq7Wdpf/qmk/ptD+6CCXHNVCaw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.0.tgz", + "integrity": "sha512-XYhKZPuS8nnecdx0IGGUt1Nt2/ekoVOw1zal4c0ARRaLJEw+umFLxwHUelIeBocbdOcPCeZRE6pdk35Y2T2wpw==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1784,17 +1792,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz", - "integrity": "sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.0.tgz", + "integrity": "sha512-GMebLCihCxIlbPdA/l6WDpNJppIgW5OeTJkIAbqVArg1vFxZ92XhW+UwN12av5OAXswySGJ80/fpDFP7HmSyYg==", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^2.0.16", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-middleware": "^2.0.9", + "@smithy/middleware-serde": "^2.1.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/url-parser": "^2.1.0", + "@smithy/util-middleware": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1802,18 +1810,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.26.tgz", - "integrity": "sha512-Qzpxo0U5jfNiq9iD38U3e2bheXwvTEX4eue9xruIvEgh+UKq6dKuGqcB66oBDV7TD/mfoJi9Q/VmaiqwWbEp7A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.0.tgz", + "integrity": "sha512-lGEVds90hFyIAvypH58rwC6j9mrCR2ZwYbcxow7AgW6sWCCoBppz5FtLpgSg6QV/CTRh8K7w4kxGVx8LqINQBg==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/protocol-http": "^3.0.12", - "@smithy/service-error-classification": "^2.0.9", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/service-error-classification": "^2.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/util-middleware": "^2.1.0", + "@smithy/util-retry": "^2.1.0", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1831,12 +1839,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz", - "integrity": "sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.0.tgz", + "integrity": "sha512-iysAUIDKsc354HMnYVQxMJEzNaOrQQvE86b1oSl2fRwcFqn+9TTi028a37PLFE+ccAiyVGjBjB8PBsAz9plUug==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1844,12 +1852,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz", - "integrity": "sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.0.tgz", + "integrity": "sha512-y5Ph/TWfO7oTfxNqKU+uAK5cFRTYeP16ReOmDweq+zQ8NQODDg7LSxsfQT4Wp0mhIvm0bt3pZp66T1YMtnihWw==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1857,14 +1865,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz", - "integrity": "sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.0.tgz", + "integrity": "sha512-rU82PFR32Bxo4EMGUJ2BGG+K97zUp9j6SWjG83T2itmbXwA/+DoCc4xCON8kcmdej822x1yLcSzFiTeg0b472w==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/shared-ini-file-loader": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1872,15 +1880,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz", - "integrity": "sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.0.tgz", + "integrity": "sha512-8jcQaOdrD/X0VihhM2W/KtJ5fvKaT8UpNf/pl/epvLQ6MkAttIMaCLex6xk31BpFSPvS2+q65ZdBBjQ3cMOSiA==", "optional": true, "dependencies": { - "@smithy/abort-controller": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", + "@smithy/abort-controller": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/querystring-builder": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1888,12 +1896,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.17.tgz", - "integrity": "sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.0.tgz", + "integrity": "sha512-6cpCSsgwbKHnl567SrthpqLgZ7e5jc7qPHG6wz9U2T24vcUp2yiG0vdAlH1QdTH20+/PGamKR0ZM35a08X1Tbg==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1901,12 +1909,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.12.tgz", - "integrity": "sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.0.tgz", + "integrity": "sha512-CGNzkKza1yUga7sv+U4gx3jbwSh5x42/9vy0E/NoR2HTFken2MuMc/bClxXAO0Z6EQoTYHHA6FMCREXwSP04lg==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1914,13 +1922,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz", - "integrity": "sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.0.tgz", + "integrity": "sha512-8QColSkqn9TbvpX40zW0T8IrKcLXg7Um4bczm9qIYDRPh8T873WNIOWzYBw8chI8SWizMXbsSR95PFCP/YlgYw==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-uri-escape": "^2.0.0", + "@smithy/types": "^2.9.0", + "@smithy/util-uri-escape": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1928,12 +1936,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz", - "integrity": "sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.0.tgz", + "integrity": "sha512-+l17LQQxelslo5CHsLXwSw2F1J6Qmf64OgByreNnLR82gHkJ91ZbMFhxZeLTo2qXxEu0uqraMc4uNw8qE9A6bw==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1941,24 +1949,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.9.tgz", - "integrity": "sha512-0K+8GvtwI7VkGmmInPydM2XZyBfIqLIbfR7mDQ+oPiz8mIinuHbV6sxOLdvX1Jv/myk7XTK9orgt3tuEpBu/zg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.0.tgz", + "integrity": "sha512-yBMJk4IfYqUxsPmc8P0YtWHd/Kbd0PP+kU0dgFksH6eiE2ZQJl7478xNtkUKp2QJLcooYEbA3gBFUza6ukXMiA==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0" + "@smithy/types": "^2.9.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz", - "integrity": "sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.0.tgz", + "integrity": "sha512-jgm7cjj0d08jIB9cp4idtpIUY590Twecv4xpijgl2IzkrPfBddzKTH4Zk+Zwfyk8ecz2T/7ihqtnNcq7Qdj9lw==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -1966,18 +1974,18 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.19.tgz", - "integrity": "sha512-nwc3JihdM+kcJjtORv/n7qRHN2Kfh7S2RJI2qr8pz9UcY5TD8rSCRGQ0g81HgyS3jZ5X9U/L4p014P3FonBPhg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.0.tgz", + "integrity": "sha512-ONi89MBjxNtl497obaO/qGixsOedikTV3CAj3ZBPGY3IKykS8wQ2Wkctsx2T1J5B9OnynH0KuGGmgG91utX/7w==", "optional": true, "dependencies": { - "@smithy/eventstream-codec": "^2.0.16", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "@smithy/eventstream-codec": "^2.1.0", + "@smithy/is-array-buffer": "^2.1.0", + "@smithy/types": "^2.9.0", + "@smithy/util-hex-encoding": "^2.1.0", + "@smithy/util-middleware": "^2.1.0", + "@smithy/util-uri-escape": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1985,16 +1993,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.1.tgz", - "integrity": "sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.0.tgz", + "integrity": "sha512-oEaLdVmHcbdK8IHQ4yE7xOYK2nSkF2xXp6nRr5NhfKB5QTKNzpNsXLiGJgfmm7j0ol1S6BhjyBhi7tZ8M0JJtg==", "optional": true, "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", + "@smithy/middleware-endpoint": "^2.4.0", + "@smithy/middleware-stack": "^2.1.0", + "@smithy/protocol-http": "^3.1.0", + "@smithy/types": "^2.9.0", + "@smithy/util-stream": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -2002,9 +2010,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", - "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.0.tgz", + "integrity": "sha512-ST1M87Lf2cLHRI+irEFRIHXGY08HHTAUbiRFYkmFyJdTMg3VDxkcm7DwW9/EgV3X8M6wDPrbIkx/RXONyttrQg==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -2014,23 +2022,23 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.16.tgz", - "integrity": "sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.0.tgz", + "integrity": "sha512-V3FMzNFCDwQNAgJdxI6Gj48qP9WAyvK59WE90hOoya3m8ey02uLDhWjZkl+505s7iTVVmJ7Mr7nKwG5vU2NIMQ==", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^2.0.16", - "@smithy/types": "^2.8.0", + "@smithy/querystring-parser": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", - "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.0.tgz", + "integrity": "sha512-zjXlHFm7S+TEDVA3j1rWGpuNDTlTxIWDqzwIfWUENT0VqCGDAdJITd8RYVjduf3u8HWMlgALkrY6B62UTESQ5w==", "optional": true, "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-buffer-from": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -2038,18 +2046,18 @@ } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz", - "integrity": "sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.0.tgz", + "integrity": "sha512-fkLY8W+jXGSkymLNe9NB7u6lGflHz6w1R+a3RxLOK6UrtwU4LBLskAP5Ag/zVPUNd5tmfv3/W6cTVzk8IBJuiw==", "optional": true, "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.0.tgz", + "integrity": "sha512-ZLsqYH+s71y6Oc2Auws6zYI4LzsSi6N8+W+Gq7CwXaZm7QIKGiCeEunEwxo50OGAqJs0g6F9kCIwNxhlK1s4Aw==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -2059,12 +2067,12 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.0.tgz", + "integrity": "sha512-3w7AM0moGyBmr9gMBGE7+pqG3cjboRvmMyRhpesbJoOUHO0BV1Qrk00M/wQ3EHJAQXM3dehQfFNUf7sR6nT6+Q==", "optional": true, "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", + "@smithy/is-array-buffer": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -2072,9 +2080,9 @@ } }, "node_modules/@smithy/util-config-provider": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.1.0.tgz", - "integrity": "sha512-S6V0JvvhQgFSGLcJeT1CBsaTR03MM8qTuxMH9WPCCddlSo2W0V5jIHimHtIQALMLEDPGQ0ROSRr/dU0O+mxiQg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.0.tgz", + "integrity": "sha512-D3Gx0BWXjsn1E25ikUt0+yc8oZnViTa5IHZ1JvD9J1NyyVS4c3IgHqbG64XRverEMnhzUb0EhqMTwQTY12in+w==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -2084,14 +2092,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.24.tgz", - "integrity": "sha512-TsP5mBuLgO2C21+laNG2nHYZEyUdkbGURv2tHvSuQQxLz952MegX95uwdxOY2jR2H4GoKuVRfdJq7w4eIjGYeg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.0.tgz", + "integrity": "sha512-zmXL4aKeBGBz02kDZdks2QfG+HGq99Tp4/ICPmu2OvSbwTOLjmlCnUrtZJTmLhX4etP3o0voOL9gFEa2PSjlJg==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -2100,17 +2108,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.32.tgz", - "integrity": "sha512-d0S33dXA2cq1NyorVMroMrEtqKMr3MlyLITcfTBf9pXiigYiPMOtbSI7czHIfDbuVuM89Cg0urAgpt73QV9mPQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.0.tgz", + "integrity": "sha512-pVBaw2fBJMjjJj+AR69xQhjzYLZ5u9azdKyaAAjR16dthdBOcnczBClBVCfhb/Moj0ivIHnaXJ5AXCdbDok94g==", "optional": true, "dependencies": { - "@smithy/config-resolver": "^2.0.23", - "@smithy/credential-provider-imds": "^2.1.5", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", + "@smithy/config-resolver": "^2.1.0", + "@smithy/credential-provider-imds": "^2.2.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/property-provider": "^2.1.0", + "@smithy/smithy-client": "^2.3.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -2118,13 +2126,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.8.tgz", - "integrity": "sha512-l8zVuyZZ61IzZBYp5NWvsAhbaAjYkt0xg9R4xUASkg5SEeTT2meHOJwJHctKMFUXe4QZbn9fR2MaBYjP2119+w==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.0.tgz", + "integrity": "sha512-gKzfdj5pyEOg1fVOsZVpVPRWAXbWqt9JgZdwU4cjKlJ57Fuccfk0ui5twh1TYvuJWtR2Tw3GwUmUuBM3qRWJJg==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", + "@smithy/node-config-provider": "^2.2.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -2132,9 +2140,9 @@ } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.0.tgz", + "integrity": "sha512-haxSIaBxn3p/lK+bEyqC32myHffacBLD61/HHzBGcG1Vo8dFTm5y0vhdR5R4wakW7H8Tr/czx+uckDOWZ1Km9Q==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -2144,12 +2152,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.9.tgz", - "integrity": "sha512-PnCnBJ07noMX1lMDTEefmxSlusWJUiLfrme++MfK5TD0xz8NYmakgoXy5zkF/16zKGmiwOeKAztWT/Vjk1KRIQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.0.tgz", + "integrity": "sha512-bKfhAsdjRyGmYDsJUW5hPsL3qofgPgLPsuV+V6nNGyD/kjMobwstiIpA3ddGFT+XDwVOIUHElg7I06/wOpwKiQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -2157,13 +2165,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.9.tgz", - "integrity": "sha512-46BFWe9RqB6g7f4mxm3W3HlqknqQQmWHKlhoqSFZuGNuiDU5KqmpebMbvC3tjTlUkqn4xa2Z7s3Hwb0HNs5scw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.0.tgz", + "integrity": "sha512-igJw+/olhAUtocMbEMBjy8SKRTHfefS+qcgmMUVEBLFgLjqMfpc8EDVB1BebNBQ1rre5yLDbi2UHUz48eZNkPQ==", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^2.0.9", - "@smithy/types": "^2.8.0", + "@smithy/service-error-classification": "^2.1.0", + "@smithy/types": "^2.9.0", "tslib": "^2.5.0" }, "engines": { @@ -2171,18 +2179,18 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.24.tgz", - "integrity": "sha512-hRpbcRrOxDriMVmbya+Mv77VZVupxRAsfxVDKS54XuiURhdiwCUXJP0X1iJhHinuUf6n8pBF0MkG9C8VooMnWw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.0.tgz", + "integrity": "sha512-lcw9JVXLHvRawaXnfxdnGRw5pQM5c9XMEkBuMec+fIhGuPHIezqhQq7oO0jJcj0xwupJzW6HAvinktr9ozdKyg==", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "@smithy/fetch-http-handler": "^2.4.0", + "@smithy/node-http-handler": "^2.3.0", + "@smithy/types": "^2.9.0", + "@smithy/util-base64": "^2.1.0", + "@smithy/util-buffer-from": "^2.1.0", + "@smithy/util-hex-encoding": "^2.1.0", + "@smithy/util-utf8": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -2190,9 +2198,9 @@ } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.0.tgz", + "integrity": "sha512-ZHYFGyF9o/MHGMGtsHfkxnn2DhGRZlDIFGNgipu4K3x8jMEVahQ+tGnlkFVMM2QrSQHCcjICbBTJ5JEgaD5+Jg==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -2202,12 +2210,12 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", - "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.0.tgz", + "integrity": "sha512-RnNNedYLpsNPQocMhr0nGEz0mGKdzI5dBi0h7vvmimULtBlyElgX1/hXozlkurIgx8R3bSy14/oRtmDsFClifg==", "optional": true, "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-buffer-from": "^2.1.0", "tslib": "^2.5.0" }, "engines": { @@ -2215,9 +2223,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.1.tgz", - "integrity": "sha512-DsXojJUES2M+FE8CpptJTKpg+r54moV9ZEncPstni1WHFmTcCzeFLnMFfyhCVS8XNOy/OQG+8lVxRLRrVHmV5A==", + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", "dependencies": { "undici-types": "~5.26.4" } @@ -2773,9 +2781,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -3269,9 +3277,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.630", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", - "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", + "version": "1.4.639", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", + "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", "dev": true }, "node_modules/emoji-regex": { @@ -4720,9 +4728,9 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { "node": ">= 10" } @@ -5078,9 +5086,9 @@ "dev": true }, "node_modules/joi": { - "version": "17.9.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.1.tgz", - "integrity": "sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -5394,19 +5402,20 @@ } }, "node_modules/mailauth": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/mailauth/-/mailauth-4.3.4.tgz", - "integrity": "sha512-rakRT0omLArcgKGOlDFKQJQj4Xoiwsto0wIQUFBxLTLiII8iMCaU22tKZJYxgT+8gPLz/NxNCxk/OzDg6izK0Q==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/mailauth/-/mailauth-4.6.0.tgz", + "integrity": "sha512-NI6wkVKm1xA/RmWCDSgLD3719Cxc0czJLV2dIFL2GzLF8ASswABV9CZdB9qArYiF/3nfKHZFCBr79Iq2IWh8iw==", "dependencies": { "@postalsys/vmc": "1.0.6", - "fast-xml-parser": "4.2.0", - "ipaddr.js": "2.0.1", - "joi": "17.9.1", + "fast-xml-parser": "4.3.2", + "ipaddr.js": "2.1.0", + "joi": "17.11.0", "libmime": "5.2.1", - "nodemailer": "6.9.1", + "nodemailer": "6.9.7", "psl": "1.9.0", - "punycode": "2.3.0", - "yargs": "17.7.1" + "punycode": "2.3.1", + "undici": "5.27.0", + "yargs": "17.7.2" }, "bin": { "mailauth": "bin/mailauth.js" @@ -5416,36 +5425,34 @@ } }, "node_modules/mailauth/node_modules/fast-xml-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.0.tgz", - "integrity": "sha512-+zVQv4aVTO+o8oRUyRL7PjgeVo1J6oP8Cw2+a8UTZQcj5V0yUK5T63gTN0ldgiHDPghUjKc4OpT6SwMTwnOQug==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } }, "node_modules/mailauth/node_modules/nodemailer": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz", - "integrity": "sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", "engines": { "node": ">=6.0.0" } }, - "node_modules/mailauth/node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, "node_modules/mailsplit": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz", @@ -5666,12 +5673,12 @@ } }, "node_modules/mx-connect": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mx-connect/-/mx-connect-1.4.4.tgz", - "integrity": "sha512-QNelcQnUON/qk1KxErqCHsgSy7adIZVRW2zvW7YW+1a6Flu+oTLpRf5N8xBXy0bRF6BOmHIUTW3sG0npRDbDMw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/mx-connect/-/mx-connect-1.5.3.tgz", + "integrity": "sha512-1RaO4YsMN4EbVNfeDIdIwjmhsn+lijdzQCi2kE824faRee2qwh1UwbZ8jcg/QjxmwnbFVpCbExcg/ifXm60SRw==", "dependencies": { - "ipaddr.js": "2.0.1", - "mailauth": "4.3.4" + "ipaddr.js": "2.1.0", + "mailauth": "4.6.0" } }, "node_modules/nan": { @@ -9614,6 +9621,17 @@ "node": "*" } }, + "node_modules/undici": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.0.tgz", + "integrity": "sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -9891,9 +9909,9 @@ } }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", diff --git a/package.json b/package.json index df09fe93..a0ae74b8 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "minimist": "1.2.8", "mongodb": "4.17.0", "msgpack-js": "0.3.0", - "mx-connect": "1.4.4", + "mx-connect": "1.5.3", "nodemailer": "6.9.8", "npmlog": "7.0.1", "prom-client": "15.1.0", diff --git a/plugins/core/email-bounce.js b/plugins/core/email-bounce.js index 05598849..94e87b23 100644 --- a/plugins/core/email-bounce.js +++ b/plugins/core/email-bounce.js @@ -4,9 +4,12 @@ const os = require('os'); const MimeNode = require('nodemailer/lib/mime-node'); module.exports.title = 'Email Bounce Notification'; -module.exports.init = function(app, done) { +module.exports.init = function (app, done) { // generate a multipart/report DSN failure response - function generateBounceMessage(bounce) { + function generateBounceMessage(bounce, opts) { + opts = opts || {}; + const { isDelayed } = opts; + let headers = bounce.headers; let messageId = headers.getFirst('Message-ID'); @@ -29,26 +32,37 @@ module.exports.init = function(app, done) { rootNode.setHeader('X-Sending-Zone', sendingZone); rootNode.setHeader('X-Failed-Recipients', bounce.to); rootNode.setHeader('Auto-Submitted', 'auto-replied'); - rootNode.setHeader('Subject', 'Delivery Status Notification (Failure)'); + rootNode.setHeader('Subject', `Delivery Status Notification (${isDelayed ? 'Delay' : 'Failure'})`); if (messageId) { rootNode.setHeader('In-Reply-To', messageId); rootNode.setHeader('References', messageId); } - rootNode - .createChild('text/plain') - .setHeader('Content-Description', 'Notification') - .setContent( - `Delivery to the following recipient failed permanently: + let bounceContent = `Delivery to the following recipient failed permanently: ${bounce.to} Technical details of permanent failure: ${bounce.response} -` - ); +`; + + if (isDelayed) { + bounceContent = `Delivery incomplete + +There was a temporary problem delivering your message to ${bounce.to}. + +Delivery will be retried. You'll be notified if the delivery fails permanently. + +Technical details of the failure: + +${bounce.response} + +`; + } + + rootNode.createChild('text/plain').setHeader('Content-Description', 'Notification').setContent(bounceContent); rootNode .createChild('message/delivery-status') @@ -60,8 +74,8 @@ X-ZoneMTA-Sender: rfc822; ${bounce.from} Arrival-Date: ${new Date(bounce.arrivalDate).toUTCString().replace(/GMT/, '+0000')} Final-Recipient: rfc822; ${bounce.to} -Action: failed -Status: 5.0.0 +Action: ${isDelayed ? 'delayed' : 'failed'} +Status: ${isDelayed ? '4.0.0' : '5.0.0'} ` + (bounce.mxHostname ? `Remote-MTA: dns; ${bounce.mxHostname} @@ -72,10 +86,7 @@ Status: 5.0.0 ` ); - rootNode - .createChild('text/rfc822-headers') - .setHeader('Content-Description', 'Undelivered Message Headers') - .setContent(headers.build()); + rootNode.createChild('text/rfc822-headers').setHeader('Content-Description', 'Undelivered Message Headers').setContent(headers.build()); return rootNode; } @@ -132,5 +143,74 @@ Status: 5.0.0 }); }); + app.addHook('queue:delayed', async (bounce, maildrop, options) => { + if (!app.config.delayEmail || !app.config.delayEmail.enabled) { + return; + } + + if ((app.config.disableInterfaces || []).includes(bounce.interface)) { + // bounces are disabled for messages from this interface (eg. forwarded messages) + return; + } + + if (!bounce.from) { + // nowhere to send the bounce to + return; + } + + // check if past required time + const prevDiff = options.prev - options.first; + const curDiff = options.last - options.first; + if (prevDiff > app.config.delayEmail.after || curDiff < app.config.delayEmail.after) { + return; + } + + const headers = bounce.headers; + + if (headers.get('Received').length > 25) { + // too many hops + app.logger.info( + 'Bounce', + 'Too many hops (%s)! Delivery loop detected for %s.%s, dropping message', + headers.get('Received').length, + bounce.seq, + bounce.id + ); + return; + } + + const envelope = { + interface: 'bounce', + sessionId: bounce.sessionId, + from: '', + to: bounce.from, + transtype: 'HTTP', + time: Date.now() + }; + + const mail = generateBounceMessage(bounce, { isDelayed: true }); + + let id = await new Promise((resolve, reject) => { + app.getQueue().generateId((err, id) => { + if (err) { + reject(err); + } else { + resolve(id); + } + }); + }); + + envelope.id = id; + + await new Promise(resolve => { + maildrop.add(envelope, mail.createReadStream(), err => { + if (err && err.name !== 'SMTPResponse') { + app.logger.error('Bounce', err.message); + } + resolve(); + }); + }); + }); + done(); };