diff --git a/.ncurc.js b/.ncurc.js index 9669a131..ea5dba0d 100644 --- a/.ncurc.js +++ b/.ncurc.js @@ -2,6 +2,12 @@ module.exports = { upgrade: true, reject: [ // mongodb 5.x driver does not support callbacks, only promises - 'mongodb' + 'mongodb', + + // no support for Node 16 + 'undici', + + // esm + 'chai' ] }; diff --git a/CHANGELOG.md b/CHANGELOG.md index e2d17aa8..b50af82d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # Changelog +## [1.41.3](https://github.com/nodemailer/wildduck/compare/v1.41.2...v1.41.3) (2023-12-19) + + +### Bug Fixes + +* **api:** Remove unnecessary required() that brakes the e-mail send ([#580](https://github.com/nodemailer/wildduck/issues/580)) ([d80ba77](https://github.com/nodemailer/wildduck/commit/d80ba77650f539a47e5a7c28cfd9c9d0de48b3e4)) + +## [1.41.2](https://github.com/nodemailer/wildduck/compare/v1.41.1...v1.41.2) (2023-12-15) + + +### Bug Fixes + +* **upload:** allow empty name field in the Upload message FROM: header ZMS-113 ([#577](https://github.com/nodemailer/wildduck/issues/577)) ([c1e28db](https://github.com/nodemailer/wildduck/commit/c1e28db0f3d37b507e7aaef6b26557b27f7ab2f3)) + +## [1.41.1](https://github.com/nodemailer/wildduck/compare/v1.41.0...v1.41.1) (2023-12-14) + + +### Bug Fixes + +* **defer:** Added new setting const:sender:defer_times ZMS 63 ([#574](https://github.com/nodemailer/wildduck/issues/574)) ([9aab242](https://github.com/nodemailer/wildduck/commit/9aab24267b8c90d7d1af30fcace8c60704e1ea27)) +* **mime-parsing:** ensure that text content for multipart nodes always ends with a newline. Fixes [#571](https://github.com/nodemailer/wildduck/issues/571) ([6f4994d](https://github.com/nodemailer/wildduck/commit/6f4994d3a00c8ec73921b443aee4c2cc65561922)) + +## [1.41.0](https://github.com/nodemailer/wildduck/compare/v1.40.10...v1.41.0) (2023-11-30) + + +### Features + +* **apidocs:** Autogenerate OpenAPI docs ZMS-100 ([#552](https://github.com/nodemailer/wildduck/issues/552)) ([ea24b93](https://github.com/nodemailer/wildduck/commit/ea24b9328b6984db841de86309f1712f100acb97)) +* **docs:** ZMS-[9x] Automatic API generation ([#535](https://github.com/nodemailer/wildduck/issues/535)) ([c1cc143](https://github.com/nodemailer/wildduck/commit/c1cc143663bc8ad81794eb9bf4cee04a37937899)) +* **mailbox-count-limit:** Set a limit for maximum number of mailbox folders ZMS-93 ([#542](https://github.com/nodemailer/wildduck/issues/542)) ([779bb11](https://github.com/nodemailer/wildduck/commit/779bb11e831eb902330db3ed9056f90aeba4234c)) + + +### Bug Fixes + +* **addressregister:** Do not add no-reply addresses to the addressregister ZMS-99 ([#551](https://github.com/nodemailer/wildduck/issues/551)) ([be24af0](https://github.com/nodemailer/wildduck/commit/be24af0d2665fb27f85ff0f0435e4480c21575fa)) +* **audit:** Fixed `find()` query for expired audits ([#547](https://github.com/nodemailer/wildduck/issues/547)) ([48b9efb](https://github.com/nodemailer/wildduck/commit/48b9efb8ca4b300597b2e8f5ef4aa307ac97dcfe)) +* **docs:** Added support for enums ZMS-104 ([#565](https://github.com/nodemailer/wildduck/issues/565)) ([28bdc76](https://github.com/nodemailer/wildduck/commit/28bdc7621e13a96965a2a24caee873cf15b8aa31)) +* **docs:** Fixed descriptions ZMS-101 ([#553](https://github.com/nodemailer/wildduck/issues/553)) ([3c9e175](https://github.com/nodemailer/wildduck/commit/3c9e17595cffd32475f51aa104ab09d721989e6f)) +* **imap-search:** rename `headerdate` to `date` (closes [#560](https://github.com/nodemailer/wildduck/issues/560)) ([#561](https://github.com/nodemailer/wildduck/issues/561)) ([fd98244](https://github.com/nodemailer/wildduck/commit/fd98244342089dc8a587e3e45b559f12f8764140)) +* **imap:** fixed string conversion to utf8 vs binary (closes [#563](https://github.com/nodemailer/wildduck/issues/563)) ([#564](https://github.com/nodemailer/wildduck/issues/564)) ([ee2708e](https://github.com/nodemailer/wildduck/commit/ee2708e4c150f79745a2a81e3e4555a7549c426d)) +* **mailbox-create:** Use correct database for loading User data when creating mailboxes ([#550](https://github.com/nodemailer/wildduck/issues/550)) ([4434cb5](https://github.com/nodemailer/wildduck/commit/4434cb5e1ff4414da874b62997da5ea41892a286)) + ## [1.40.10](https://github.com/nodemailer/wildduck/compare/v1.40.9...v1.40.10) (2023-10-16) diff --git a/Gruntfile.js b/Gruntfile.js index 98616bad..d1e0c351 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -58,4 +58,5 @@ module.exports = function (grunt) { // Tasks grunt.registerTask('default', ['eslint', 'shell:server', 'wait:server', 'mochaTest', 'shell:server:kill']); grunt.registerTask('testonly', ['shell:server', 'wait:server', 'mochaTest', 'shell:server:kill']); + grunt.registerTask('proto', ['mochaTest:imap']); }; diff --git a/docs/api/openapi.yml b/docs/api/openapi.yml index 11cf6240..bbc1000a 100644 --- a/docs/api/openapi.yml +++ b/docs/api/openapi.yml @@ -1305,7 +1305,9 @@ paths: content: application/octet-stream: schema: - type: binary + type: string + description: Success + format: binary /data/import: post: @@ -1319,7 +1321,9 @@ paths: content: application/octet-stream: schema: - type: binary + type: string + description: Success + format: binary required: true responses: '200': @@ -2105,7 +2109,6 @@ paths: description: 'Partial match for the From: header line' type: string to: - in: query description: 'Partial match for the To: and Cc: header lines' type: string subject: diff --git a/imap-core/lib/imap-composer.js b/imap-core/lib/imap-composer.js index 939b024c..06dd1794 100644 --- a/imap-core/lib/imap-composer.js +++ b/imap-core/lib/imap-composer.js @@ -60,7 +60,17 @@ class IMAPComposer extends Transform { ); } - this.push(Buffer.from(compiled + '\r\n', 'binary')); + // + // = 0; i--) { + if (typeof node.body[i] === 'string' && node.body[i].length) { + lastChar = node.body[i].at(-1); + lastIndex = i; + break; + } + } + if (lastChar && lastChar !== '\n') { + // ensure that non-multipart body text always ends with a newline + node.body[lastIndex] += '\n'; + } + } + node.lineCount = node.body.length ? node.body.length - 1 : 0; node.body = Buffer.from( node.body diff --git a/imap-core/test/fixtures/no_empty_line_between_text_boundary.eml b/imap-core/test/fixtures/no_empty_line_between_text_boundary.eml new file mode 100644 index 00000000..cd18c673 --- /dev/null +++ b/imap-core/test/fixtures/no_empty_line_between_text_boundary.eml @@ -0,0 +1,22 @@ +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +Message-ID: +To: foo-1@example-1.com +From: foo-1@example-1.com +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9-- \ No newline at end of file diff --git a/imap-core/test/parse-mime-tree-test.js b/imap-core/test/parse-mime-tree-test.js index f4821a28..6d541bad 100644 --- a/imap-core/test/parse-mime-tree-test.js +++ b/imap-core/test/parse-mime-tree-test.js @@ -3,11 +3,20 @@ 'use strict'; const MIMEParser = require('../lib/indexer/parse-mime-tree').MIMEParser; +const Indexer = require('../lib/indexer/indexer'); +const indexer = new Indexer(); +const fs = require('fs'); const chai = require('chai'); const expect = chai.expect; chai.config.includeStack = true; +const fixtures = { + no_empty_line_between_text_boundary: { + eml: fs.readFileSync(__dirname + '/fixtures/no_empty_line_between_text_boundary.eml') + } +}; + describe('#parseValueParams', function () { it('should return continuation value as mime-word', function () { let parser = new MIMEParser(); @@ -44,4 +53,23 @@ describe('#parseValueParams', function () { hasParams: true }); }); + + it('should parse a file with no empty line between text and boundary', function (done) { + // parse a file and then make sure that boundary is correct + + let source = Buffer.concat([fixtures.no_empty_line_between_text_boundary.eml]); + + let parser = new MIMEParser(source); + + parser.parse(); + parser.finalizeTree(); + + let parsed = parser.tree.childNodes[0]; + + indexer.bodyQuery(parsed, '', (err, data) => { + expect(err).to.not.exist; + expect(data.toString().indexOf('This is a multi-part message in MIME format.\r\n--------------cWFvDSey27tFG0hVYLqp9hs9')).to.gt(0); + done(); + }); + }); }); diff --git a/lib/api/messages.js b/lib/api/messages.js index c56e2745..47ce63dc 100644 --- a/lib/api/messages.js +++ b/lib/api/messages.js @@ -25,7 +25,15 @@ const { getMongoDBQuery /*, getElasticSearchQuery*/ } = require('../search-query //const { getClient } = require('../elasticsearch'); const BimiHandler = require('../bimi-handler'); -const { Address, AddressOptionalNameArray, Header, Attachment, ReferenceWithAttachments, Bimi } = require('../schemas/request/messages-schemas'); +const { + Address, + AddressOptionalNameArray, + Header, + Attachment, + ReferenceWithAttachments, + Bimi, + AddressOptionalName +} = require('../schemas/request/messages-schemas'); const { userId, mailboxId, messageId } = require('../schemas/request/general-schemas'); const { MsgEnvelope } = require('../schemas/response/messages-schemas'); const { successRes } = require('../schemas/response/general-schemas'); @@ -1895,9 +1903,9 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti 'base64 encoded message source. Alternatively, you can provide this value as POST body by using message/rfc822 MIME type. If raw message is provided then it overrides any other mail configuration' ), - from: Address.description('Addres for the From: header'), + from: AddressOptionalName.description('Addres for the From: header'), - replyTo: Address.description('Address for the Reply-To: header'), + replyTo: AddressOptionalName.description('Address for the Reply-To: header'), to: AddressOptionalNameArray.description('Addresses for the To: header'), diff --git a/lib/api/users.js b/lib/api/users.js index 10bf48ff..5eb121eb 100644 --- a/lib/api/users.js +++ b/lib/api/users.js @@ -26,6 +26,9 @@ const { const TaskHandler = require('../task-handler'); const { publish, FORWARD_ADDED } = require('../events'); const { ExportStream, ImportStream } = require('../export'); +const { successRes, totalRes, pageRes, previousCursorRes, nextCursorRes, quotaRes } = require('../schemas/response/general-schemas'); +const { GetUsersResult } = require('../schemas/response/users-schemas'); +const { userId } = require('../schemas/request/general-schemas'); const FEATURE_FLAGS = ['indexing']; @@ -33,23 +36,57 @@ module.exports = (db, server, userHandler, settingsHandler) => { const taskHandler = new TaskHandler({ database: db.database }); server.get( - { name: 'users', path: '/users' }, + { + name: 'users', + path: '/users', + summary: 'List registered Users', + tags: ['Users'], + validationObjs: { + pathParams: {}, + requestBody: {}, + queryParams: { + query: Joi.string().empty('').lowercase().max(255).description('Partial match of username or default email address'), + forward: Joi.string().empty('').lowercase().max(255).description('Partial match of a forward email address or URL'), + tags: Joi.string().trim().empty('').max(1024).description('Comma separated list of tags. The User must have at least one to be set'), + requiredTags: Joi.string() + .trim() + .empty('') + .max(1024) + .description('Comma separated list of tags. The User must have all listed tags to be set'), + metaData: booleanSchema.description('If true, then includes metaData in the response'), + internalData: booleanSchema.description('If true, then includes internalData in the response. Not shown for user-role tokens.'), + limit: Joi.number().default(20).min(1).max(250).description('How many records to return'), + next: nextPageCursorSchema, + previous: previousPageCursorSchema, + page: pageNrSchema, + sess: sessSchema, + ip: sessIPSchema + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + total: totalRes, + page: pageRes, + previousCursor: previousCursorRes, + nextCursor: nextCursorRes, + query: Joi.string().required().description('Partial match of username or default email address'), + results: Joi.array().items(GetUsersResult).required().description('User listing') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - query: Joi.string().empty('').lowercase().max(255), - forward: Joi.string().empty('').lowercase().max(255), - tags: Joi.string().trim().empty('').max(1024), - requiredTags: Joi.string().trim().empty('').max(1024), - metaData: booleanSchema, - internalData: booleanSchema, - limit: Joi.number().default(20).min(1).max(250), - next: nextPageCursorSchema, - previous: previousPageCursorSchema, - page: pageNrSchema, - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -262,91 +299,166 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/users', + { + path: '/users', + summary: 'Create new user', + tags: ['Users'], + validationObjs: { + requestBody: { + username: usernameSchema + .required() + .description('Username of the User. Dots are allowed but informational only ("user.name" is the same as "username").'), + password: Joi.string() + .max(256) + .allow(false, '') + .required() + .description( + 'Password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed' + ), + hashedPassword: booleanSchema + .default(false) + .description( + 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.' + ), + allowUnsafe: booleanSchema + .default(true) + .description( + 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.' + ), + + address: Joi.string().email({ tlds: false }).description('Default email address for the User (autogenerated if not set)'), + emptyAddress: booleanSchema + .default(false) + .description( + 'If true then do not autogenerate missing email address for the User. Only needed if you want to create a user account that does not have any email address associated' + ), + + language: Joi.string().empty('').max(20).description('Language code for the User'), + + retention: Joi.number().min(0).default(0).description('Default retention time (in ms). Set to 0 to disable'), + + name: Joi.string().max(256).description('Name of the User'), + targets: Joi.array() + .items( + Joi.string().email({ tlds: false }), + Joi.string().uri({ + scheme: [/smtps?/, /https?/], + allowRelative: false, + relativeOnly: false + }) + ) + .description( + 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to' + ), + + spamLevel: Joi.number() + .min(0) + .max(100) + .default(50) + .description('Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'), + + quota: Joi.number().min(0).default(0).description('Allowed quota of the user in bytes'), + recipients: Joi.number().min(0).default(0).description('How many messages per 24 hour can be sent'), + forwards: Joi.number().min(0).default(0).description('How many messages per 24 hour can be forwarded'), + + filters: Joi.number().min(0).default(0).description('How many filters are allowed for this account'), + + requirePasswordChange: booleanSchema + .default(false) + .description('If true then requires the user to change password, useful if password for the account was autogenerated'), + + imapMaxUpload: Joi.number().min(0).default(0).description('How many bytes can be uploaded via IMAP during 24 hour'), + imapMaxDownload: Joi.number().min(0).default(0).description('How many bytes can be downloaded via IMAP during 24 hour'), + pop3MaxDownload: Joi.number().min(0).default(0).description('How many bytes can be downloaded via POP3 during 24 hour'), + pop3MaxMessages: Joi.number().min(0).default(0).description('How many latest messages to list in POP3 session'), + imapMaxConnections: Joi.number().min(0).default(0).description('How many parallel IMAP connections are alowed'), + receivedMax: Joi.number().min(0).default(0).description('How many messages can be received from MX during 60 seconds'), + + fromWhitelist: Joi.array() + .items(Joi.string().trim().max(128)) + .description('A list of additional email addresses this user can send mail from. Wildcard is allowed.'), + + tags: Joi.array().items(Joi.string().trim().max(128)).description('A list of tags associated with this user'), + addTagsToAddress: booleanSchema.default(false).description('If true then autogenerated address gets the same tags as the user'), + + uploadSentMessages: booleanSchema + .default(false) + .description( + 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.' + ), + + mailboxes: Joi.object() + .keys({ + sent: Joi.string() + .empty('') + .regex(/\/{2,}|\/$/, { invert: true }), + trash: Joi.string() + .empty('') + .regex(/\/{2,}|\/$/, { invert: true }), + junk: Joi.string() + .empty('') + .regex(/\/{2,}|\/$/, { invert: true }), + drafts: Joi.string() + .empty('') + .regex(/\/{2,}|\/$/, { invert: true }) + }) + .description('Optional names for special mailboxes') + .$_setFlag('objectName', 'Mailboxes'), + + disabledScopes: Joi.array() + .items( + Joi.string() + .valid(...consts.SCOPES) + .$_setFlag('objectName', 'DisabledScopes') + ) + .unique() + .default([]) + .description('List of scopes that are disabled for this user ("imap", "pop3", "smtp")'), + + metaData: metaDataSchema.label('metaData').description('Optional metadata, must be an object or JSON formatted string'), + internalData: metaDataSchema + .label('internalData') + .description( + 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens' + ), + + pubKey: Joi.string() + .empty('') + .trim() + .regex(/^-----BEGIN PGP PUBLIC KEY BLOCK-----/, 'PGP key format') + .description('Public PGP key for the User that is used for encryption. Use empty string to remove the key'), + encryptMessages: booleanSchema.default(false).description('If true then received messages are encrypted'), + encryptForwarded: booleanSchema.default(false).description('If true then forwarded messages are encrypted'), + + featureFlags: Joi.object(Object.fromEntries(FEATURE_FLAGS.map(flag => [flag, booleanSchema.default(false)]))).description( + 'Feature flags to specify' + ), + + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: {}, + queryParams: {}, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + id: userId + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - username: usernameSchema.required(), - password: Joi.string().max(256).allow(false, '').required(), - hashedPassword: booleanSchema.default(false), - allowUnsafe: booleanSchema.default(true), - - address: Joi.string().email({ tlds: false }), - emptyAddress: booleanSchema.default(false), - - language: Joi.string().empty('').max(20), - - retention: Joi.number().min(0).default(0), - - name: Joi.string().max(256), - targets: Joi.array().items( - Joi.string().email({ tlds: false }), - Joi.string().uri({ - scheme: [/smtps?/, /https?/], - allowRelative: false, - relativeOnly: false - }) - ), - - spamLevel: Joi.number().min(0).max(100).default(50), - - quota: Joi.number().min(0).default(0), - recipients: Joi.number().min(0).default(0), - forwards: Joi.number().min(0).default(0), - - filters: Joi.number().min(0).default(0), - - requirePasswordChange: booleanSchema.default(false), - - imapMaxUpload: Joi.number().min(0).default(0), - imapMaxDownload: Joi.number().min(0).default(0), - pop3MaxDownload: Joi.number().min(0).default(0), - pop3MaxMessages: Joi.number().min(0).default(0), - imapMaxConnections: Joi.number().min(0).default(0), - receivedMax: Joi.number().min(0).default(0), - - fromWhitelist: Joi.array().items(Joi.string().trim().max(128)), - - tags: Joi.array().items(Joi.string().trim().max(128)), - addTagsToAddress: booleanSchema.default(false), - - uploadSentMessages: booleanSchema.default(false), - - mailboxes: Joi.object().keys({ - sent: Joi.string() - .empty('') - .regex(/\/{2,}|\/$/, { invert: true }), - trash: Joi.string() - .empty('') - .regex(/\/{2,}|\/$/, { invert: true }), - junk: Joi.string() - .empty('') - .regex(/\/{2,}|\/$/, { invert: true }), - drafts: Joi.string() - .empty('') - .regex(/\/{2,}|\/$/, { invert: true }) - }), + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; - disabledScopes: Joi.array() - .items(Joi.string().valid(...consts.SCOPES)) - .unique() - .default([]), - - metaData: metaDataSchema.label('metaData'), - internalData: metaDataSchema.label('internalData'), - - pubKey: Joi.string() - .empty('') - .trim() - .regex(/^-----BEGIN PGP PUBLIC KEY BLOCK-----/, 'PGP key format'), - encryptMessages: booleanSchema.default(false), - encryptForwarded: booleanSchema.default(false), - - featureFlags: Joi.object(Object.fromEntries(FEATURE_FLAGS.map(flag => [flag, booleanSchema.default(false)]))), - - sess: sessSchema, - ip: sessIPSchema + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -534,14 +646,43 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.get( - '/users/resolve/:username', + { + path: '/users/resolve/:username', + summary: 'Resolve ID for a username', + tags: ['Users'], + validationObjs: { + requestBody: {}, + queryParams: { + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: { + username: usernameSchema + .required() + .description( + 'Username of the User. Alphanumeric value. Must start with a letter, dots are allowed but informational only ("user.name" is the same as "username")' + ) + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes.example(true), + id: userId.description('Unique ID (24 byte hex)').example('609d201236d1d936948f23b1') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - username: usernameSchema.required(), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -609,14 +750,163 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.get( - '/users/:user', + { + path: '/users/:user', + summary: 'Request User information', + tags: ['Users'], + validationObjs: { + requestBody: {}, + queryParams: { + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: { + user: userId + }, + repsonse: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + id: userId.description('Users unique ID (24 byte hex)'), + username: Joi.string().required().description('Username of the User'), + name: Joi.string().required().description('Name of the User'), + address: Joi.string().required().description('Main email address of the User'), + retention: Joi.number().required().description('Default retention time (in ms). false if not enabled'), + enabled2fa: Joi.array().items(Joi.string()).required().description('List of enabled 2FA methods'), + autoreply: booleanSchema + .required() + .description('Is autoreply enabled or not (start time may still be in the future or end time in the past)'), + encryptMessages: booleanSchema.required().description('If true then received messages are encrypted'), + encryptForwarded: booleanSchema.required().description('If true then forwarded messages are encrypted'), + pubKey: Joi.string().required().description('Public PGP key for the User that is used for encryption'), + keyInfo: Joi.object({ + name: Joi.string().required().description('Name listed in public key'), + address: Joi.string().required().description('E-mail address listed in public key'), + fingerprint: Joi.string().required().description('Fingerprint of the public key') + }) + .$_setFlag('objectName', 'KeyInfo') + .required() + .description('Information about public key or false if key is not available'), + metaData: metaDataSchema.required().description('Custom metadata object set for this user'), + internalData: Joi.object({}) + .required() + .description('Custom internal metadata object set for this user. Not available for user-role tokens'), + targets: Joi.array().items(Joi.string()).required().description('List of forwarding targets'), + spamLevel: Joi.number() + .required() + .description('Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'), + limits: Joi.object({ + quota: quotaRes, + recipients: Joi.object({ + allowed: Joi.number().required().description('How many messages per 24 hours can be send'), + used: Joi.number().required().description('How many messages are sent during current 24 hour period'), + ttl: Joi.number().required().description('Time until the end of current 24 hour period') + }) + .required() + .$_setFlag('objectName', 'Recipients') + .description('Sending quota'), + filters: Joi.object({ + allowed: Joi.number().required().description('How many filters are allowed'), + used: Joi.number().required().description('How many filters have been created') + }) + .required() + .$_setFlag('objectName', 'Filters') + .description('Sending quota'), + forwards: Joi.object({ + allowed: Joi.number().required().description('How many messages per 24 hours can be forwarded'), + used: Joi.number().required().description('How many messages are forwarded during current 24 hour period'), + ttl: Joi.number().required().description('Time until the end of current 24 hour period') + }) + .required() + .$_setFlag('objectName', 'Forwards') + .description('Forwarding quota'), + received: Joi.object({ + allowed: Joi.number().required().description('How many messages per 1 hour can be received'), + used: Joi.number().required().description('How many messages are received during current 1 hour period'), + ttl: Joi.number().required().description('Time until the end of current 1 hour period') + }) + .required() + .$_setFlag('objectName', 'Received') + .description('Receiving quota'), + imapUpload: Joi.object({ + allowed: Joi.number() + .required() + .description( + 'How many bytes per 24 hours can be uploaded via IMAP. Only message contents are counted, not protocol overhead.' + ), + used: Joi.number().required().description('How many bytes are uploaded during current 24 hour period'), + ttl: Joi.number().required().description('Time until the end of current 24 hour period') + }) + .required() + .description('IMAP upload quota') + .$_setFlag('objectName', 'ImapUpload'), + imapDownload: Joi.object({ + allowed: Joi.number() + .required() + .description( + 'How many bytes per 24 hours can be downloaded via IMAP. Only message contents are counted, not protocol overhead.' + ), + used: Joi.number().required().description('How many bytes are downloaded during current 24 hour period'), + ttl: Joi.number().required().description('Time until the end of current 24 hour period') + }) + .required() + .description('IMAP download quota') + .$_setFlag('objectName', 'ImapDownload'), + pop3Download: Joi.object({ + allowed: Joi.number() + .required() + .description( + 'How many bytes per 24 hours can be downloaded via POP3. Only message contents are counted, not protocol overhead.' + ), + used: Joi.number().required().description('How many bytes are downloaded during current 24 hour period'), + ttl: Joi.number().required().description('Time until the end of current 24 hour period') + }) + .required() + .description('POP3 download quota') + .$_setFlag('objectName', 'Pop3Download'), + imapMaxConnections: Joi.object({ + allowed: Joi.number().required().description('How many parallel IMAP connections are permitted'), + used: Joi.number().required().description('How many parallel IMAP connections are currenlty in use') + }) + .description('a') + .$_setFlag('objectName', 'ImapMaxConnections') + }) + .required() + .description('Account limits and usage') + .$_setFlag('objectName', 'UserLimits'), + tags: Joi.array().items(Joi.string()).required().description('List of tags associated with the User'), + fromWhitelist: Joi.array() + .items(Joi.string()) + .description('A list of additional email addresses this user can send mail from. Wildcard is allowed.'), + disabledScopes: Joi.array() + .items( + Joi.string() + .valid(...consts.SCOPES) + .$_setFlag('objectName', 'DisabledScopes') + ) + .unique() + .required() + .default([]) + .description('Disabled scopes for this user'), + hasPasswordSet: booleanSchema.required().description('If true then the User has a password set and can authenticate'), + activated: booleanSchema.required().description('Is the account activated'), + disabled: booleanSchema.required().description('If true then the user can not authenticate or receive any new mail'), + suspended: booleanSchema.required().description('If true then the user can not authenticate') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -855,78 +1145,137 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.put( - '/users/:user', - tools.responseWrapper(async (req, res) => { - res.charSet('utf-8'); - - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - - existingPassword: Joi.string().empty('').min(1).max(256), - - password: Joi.string().max(256).allow(false, ''), - hashedPassword: booleanSchema.default(false), - allowUnsafe: booleanSchema.default(true), - - language: Joi.string().empty('').max(20), - - name: Joi.string().empty('').max(256), - targets: Joi.array().items( - Joi.string().email({ tlds: false }), - Joi.string().uri({ - scheme: [/smtps?/, /https?/], - allowRelative: false, - relativeOnly: false - }) - ), - - spamLevel: Joi.number().min(0).max(100), - - uploadSentMessages: booleanSchema.default(false), - - fromWhitelist: Joi.array().items(Joi.string().trim().max(128)), + { + path: '/users/:user', + summary: 'Update User information', + tags: ['Users'], + validationObjs: { + requestBody: { + existingPassword: Joi.string() + .empty('') + .min(1) + .max(256) + .description('If provided then validates against account password before applying any changes'), + + password: Joi.string() + .max(256) + .allow(false, '') + .description( + 'New password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed' + ), + hashedPassword: booleanSchema + .default(false) + .description( + 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.' + ), + allowUnsafe: booleanSchema + .default(true) + .description( + 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.' + ), + + language: Joi.string().empty('').max(20).description('Language code for the User'), + + name: Joi.string().empty('').max(256).description('Name of the User'), + targets: Joi.array() + .items( + Joi.string().email({ tlds: false }), + Joi.string().uri({ + scheme: [/smtps?/, /https?/], + allowRelative: false, + relativeOnly: false + }) + ) + .description( + 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to' + ), + + spamLevel: Joi.number() + .min(0) + .max(100) + .description('Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'), + + uploadSentMessages: booleanSchema + .default(false) + .description( + 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.' + ), + + fromWhitelist: Joi.array() + .items(Joi.string().trim().max(128)) + .description('A list of additional email addresses this user can send mail from. Wildcard is allowed.'), + + metaData: metaDataSchema.label('metaData').description('Optional metadata, must be an object or JSON formatted string'), + internalData: metaDataSchema + .label('internalData') + .description('Optional internal metadata, must be an object or JSON formatted string of an object. Not available for user-role tokens'), + + pubKey: Joi.string() + .empty('') + .trim() + .regex(/^-----BEGIN PGP PUBLIC KEY BLOCK-----/, 'PGP key format') + .description('Public PGP key for the User that is used for encryption. Use empty string to remove the key'), + encryptMessages: booleanSchema.description('If true then received messages are encrypted'), + encryptForwarded: booleanSchema.description('If true then forwarded messages are encrypted'), + retention: Joi.number().min(0).description('Default retention time (in ms). Set to 0 to disable'), - metaData: metaDataSchema.label('metaData'), - internalData: metaDataSchema.label('internalData'), + quota: Joi.number().min(0).description('Allowed quota of the user in bytes'), + recipients: Joi.number().min(0).description('How many messages per 24 hour can be sent'), + forwards: Joi.number().min(0).description('How many messages per 24 hour can be forwarded'), - pubKey: Joi.string() - .empty('') - .trim() - .regex(/^-----BEGIN PGP PUBLIC KEY BLOCK-----/, 'PGP key format'), - encryptMessages: booleanSchema, - encryptForwarded: booleanSchema, - retention: Joi.number().min(0), + filters: Joi.number().min(0).description('How many filters are allowed for this account'), - quota: Joi.number().min(0), - recipients: Joi.number().min(0), - forwards: Joi.number().min(0), + imapMaxUpload: Joi.number().min(0).description('How many bytes can be uploaded via IMAP during 24 hour'), + imapMaxDownload: Joi.number().min(0).description('How many bytes can be downloaded via IMAP during 24 hour'), + pop3MaxDownload: Joi.number().min(0).description('How many bytes can be downloaded via POP3 during 24 hour'), + pop3MaxMessages: Joi.number().min(0).description('How many latest messages to list in POP3 session'), + imapMaxConnections: Joi.number().min(0).description('How many parallel IMAP connections are alowed'), - filters: Joi.number().min(0), + receivedMax: Joi.number().min(0).description('How many messages can be received from MX during 60 seconds'), - imapMaxUpload: Joi.number().min(0), - imapMaxDownload: Joi.number().min(0), - pop3MaxDownload: Joi.number().min(0), - pop3MaxMessages: Joi.number().min(0), - imapMaxConnections: Joi.number().min(0), + disable2fa: booleanSchema.description('If true, then disables 2FA for this user'), - receivedMax: Joi.number().min(0), + tags: Joi.array().items(Joi.string().trim().max(128)).description('A list of tags associated with this user'), - disable2fa: booleanSchema, + disabledScopes: Joi.array() + .items(Joi.string().valid(...consts.SCOPES)) + .unique() + .description('List of scopes that are disabled for this user ("imap", "pop3", "smtp")'), - tags: Joi.array().items(Joi.string().trim().max(128)), + disabled: booleanSchema.description('If true then disables user account (can not login, can not receive messages)'), - disabledScopes: Joi.array() - .items(Joi.string().valid(...consts.SCOPES)) - .unique(), + featureFlags: Joi.object(Object.fromEntries(FEATURE_FLAGS.map(flag => [flag, booleanSchema.default(false)]))).description( + 'Enabled feature flags' + ), - disabled: booleanSchema, + suspended: booleanSchema.description('If true then disables authentication'), - featureFlags: Joi.object(Object.fromEntries(FEATURE_FLAGS.map(flag => [flag, booleanSchema.default(false)]))), + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes + }) + } + } + } + }, + tools.responseWrapper(async (req, res) => { + res.charSet('utf-8'); - suspended: booleanSchema, + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; - sess: sessSchema, - ip: sessIPSchema + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1124,15 +1473,39 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.put( - '/users/:user/logout', + { + path: '/users/:user/logout', + summary: 'Log out User', + tags: ['Users'], + validationObjs: { + requestBody: { + reason: Joi.string().empty('').max(128).description('Message to be shown to connected IMAP client'), + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - reason: Joi.string().empty('').max(128), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1174,14 +1547,42 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/users/:user/quota/reset', + { + path: '/users/:user/quota/reset', + description: + 'This method recalculates quota usage for a User. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.', + summary: 'Recalculate User quota', + tags: ['Users'], + validationObjs: { + requestBody: { + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + storageUsed: Joi.number().description('Calculated quota usage for the user').required(), + previousStorageUsed: Joi.number().description('Previous storage used').required() + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1322,13 +1723,36 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/quota/reset', + { + path: '/quota/reset', + description: + 'This method recalculates quota usage for all Users. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.', + summary: 'Recalculate Quota for all Users', + tags: ['Users'], + validationObjs: { + requestBody: { + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: {}, + response: { + 200: { + description: 'Success', + model: Joi.object({ success: successRes, task: Joi.string().required().description('Task ID') }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1367,15 +1791,42 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/data/export', + { + path: '/data/export', + tags: ['Export'], + summary: 'Export data', + description: + 'Export data for matching users. Export dump does not include emails, only account structure (user data, password hashes, mailboxes, filters, etc.). A special "export"-role access token is required for exporting and importing.', + validationObjs: { + requestBody: { + users: Joi.array().single().items(Joi.string().hex().lowercase().length(24).required()).description('An array of User ID values to export'), + tags: Joi.array() + .single() + .items(Joi.string().trim().empty('').max(1024)) + .description('An array of user tags to export. If set then at least one tag must exist on an user.'), + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: {}, + queryParams: {}, + response: { + 200: { + description: 'Success', + model: Joi.binary() + } + } + }, + responseType: 'application/octet-stream' + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - users: Joi.array().single().items(Joi.string().hex().lowercase().length(24).required()), - tags: Joi.array().single().items(Joi.string().trim().empty('').max(1024)), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1487,7 +1938,30 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/data/import', + { + path: '/data/import', + summary: 'Import user data', + description: + 'Import data from an export dump. If a database entry already exists, it is not modified. A special "export"-role access token is required for exporting and importing.', + tags: ['Export'], + applicationType: 'application/octet-stream', + validationObjs: { + requestBody: {}, + pathParams: {}, + queryParams: {}, + response: { + 200: { + description: 'Success', + model: Joi.object({ + entries: Joi.number().description('How many database entries were found from the export file'), + imported: Joi.number().description('How many database entries were imported from the export file'), + failed: Joi.number().description('How many database entries were not imported due to some error'), + existing: Joi.number().description('How many database existing entries were not imported') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); @@ -1657,15 +2131,42 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/users/:user/password/reset', + { + path: '/users/:user/password/reset', + summary: 'Reset password for a User', + description: 'This method generates a new temporary password for a User. Additionally it removes all two-factor authentication settings', + tags: ['Users'], + validationObjs: { + requestBody: { + validAfter: Joi.date().empty('').allow(false).description('Allow using the generated password not earlier than provided time'), + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + password: Joi.string().required().description('Temporary password'), + validAfter: Joi.date().empty('').description('The date password is valid after') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - validAfter: Joi.date().empty('').allow(false), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1707,15 +2208,54 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.del( - '/users/:user', + { + path: '/users/:user', + summary: 'Delete a User', + description: + 'This method deletes user and address entries from DB and schedules a background task to delete messages. You can call this method several times even if the user has already been deleted, in case there are still some pending messages.', + tags: ['Users'], + validationObjs: { + requestBody: {}, + queryParams: { + deleteAfter: Joi.date() + .empty('') + .allow(false) + .default(false) + .description( + 'Delete user entry from registry but keep all user data until provided date. User account is fully recoverable up to that date.' + ), + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + code: Joi.string().example('TaskScheduled').description('Task code. Should be TaskScheduled'), + user: Joi.string().description('User ID'), + addresses: Joi.object({ + deleted: Joi.number().description('Number of deleted addresses') + }), + deleteAfter: Joi.date().description('Delete after date'), + task: Joi.string().description('Task ID') + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - deleteAfter: Joi.date().empty('').allow(false).default(false), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1761,14 +2301,44 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.get( - '/users/:user/restore', + { + path: '/users/:user/restore', + summary: 'Return recovery info for a deleted user', + tags: ['Users'], + validationObjs: { + requestBody: {}, + queryParams: { + sess: sessSchema, + ip: sessIPSchema + }, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + user: Joi.string().description('ID of the deleted User').required(), + username: Joi.string().description('Username of the User').required(), + storageUsed: Joi.number().description('Calculated quota usage for the user').required(), + tags: Joi.array().items(Joi.string()).description('List of tags associated with the User').required(), + deleted: Joi.date().description('Datestring of the time the user was deleted').required(), + recoverableAddresses: Joi.array().items(Joi.string()).description('List of email addresses that can be restored').required() + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { @@ -1817,14 +2387,47 @@ module.exports = (db, server, userHandler, settingsHandler) => { ); server.post( - '/users/:user/restore', + { + path: '/users/:user/restore', + summary: 'Cancel user deletion task', + description: + 'Use this endpoint to cancel a timed deletion task scheduled by DELETE /user/{id}. If user data is not yet deleted then the account is fully recovered, except any email addresses that might have been already recycled', + tags: ['Users'], + validationObjs: { + requestBody: { + sess: sessSchema, + ip: sessIPSchema + }, + queryParams: {}, + pathParams: { + user: userId + }, + response: { + 200: { + description: 'Success', + model: Joi.object({ + success: successRes, + code: Joi.string().required().description('Task status code'), + user: Joi.string().description('User ID'), + task: Joi.string().description('Existing task id'), + addresses: Joi.object({ + recovered: Joi.number().description('Number of recovered addresses'), + main: Joi.string().description('Main address') + }) + }) + } + } + } + }, tools.responseWrapper(async (req, res) => { res.charSet('utf-8'); - const schema = Joi.object().keys({ - user: Joi.string().hex().lowercase().length(24).required(), - sess: sessSchema, - ip: sessIPSchema + const { pathParams, requestBody, queryParams } = req.route.spec.validationObjs; + + const schema = Joi.object({ + ...pathParams, + ...requestBody, + ...queryParams }); const result = schema.validate(req.params, { diff --git a/lib/handlers/on-search.js b/lib/handlers/on-search.js index 8e7dd34a..1a97422a 100644 --- a/lib/handlers/on-search.js +++ b/lib/handlers/on-search.js @@ -244,7 +244,7 @@ module.exports = server => (mailbox, options, session, callback) => { } break; - case 'headerdate': + case 'date': { let op = false; let value = new Date(term.value + ' GMT'); diff --git a/lib/message-handler.js b/lib/message-handler.js index e04acada..088d52c9 100644 --- a/lib/message-handler.js +++ b/lib/message-handler.js @@ -19,6 +19,7 @@ const { SettingsHandler } = require('./settings-handler'); // index only the following headers for SEARCH const INDEXED_HEADERS = ['to', 'cc', 'subject', 'from', 'sender', 'reply-to', 'message-id', 'thread-index', 'list-id', 'delivered-to']; +const DISALLOWED_HEADERS_FOR_ADDRESS_REGISTER = ['list-id', 'auto-submitted', 'x-auto-response-suppress']; openpgp.config.commentstring = 'Plaintext message encrypted by WildDuck Mail Server'; openpgp.config.versionString = `WildDuck v${packageData.version}`; @@ -525,9 +526,21 @@ class MessageHandler { if (parsed) { let keyList = mailboxData.specialUse === '\\Sent' ? ['to', 'cc', 'bcc'] : ['from']; + + for (const disallowedHeader of DISALLOWED_HEADERS_FOR_ADDRESS_REGISTER) { + // if email contains headers that we do not want, + // don't add any emails to address register + if (parsed[disallowedHeader]) { + return next(); + } + } + for (let key of keyList) { if (parsed[key] && parsed[key].length) { for (let addr of parsed[key]) { + if (/no-?reply/i.test(addr.address)) { + continue; + } if (!addresses.some(a => a.address === addr.address)) { addresses.push(addr); } diff --git a/lib/prepare-search-filter.js b/lib/prepare-search-filter.js index 81fe0753..a1cebf56 100644 --- a/lib/prepare-search-filter.js +++ b/lib/prepare-search-filter.js @@ -62,7 +62,7 @@ const prepareSearchFilter = async (db, user, payload) => { filter.$text = { $search: query }; } else if (orTerms.query) { filter.searchable = true; - orQuery.push({ $text: { $search: query } }); + orQuery.push({ $text: { $search: orTerms.query } }); } if (mailbox) { diff --git a/lib/schemas/request/messages-schemas.js b/lib/schemas/request/messages-schemas.js index d4226e60..48de170c 100644 --- a/lib/schemas/request/messages-schemas.js +++ b/lib/schemas/request/messages-schemas.js @@ -2,57 +2,64 @@ const Joi = require('joi'); const { booleanSchema } = require('../../schemas'); +const { mailboxId, messageId } = require('./general-schemas'); const Address = Joi.object({ - name: Joi.string().empty('').max(255), - address: Joi.string().email({ tlds: false }).required() + name: Joi.string().empty('').max(255).required().description('Name of the sender/recipient'), + address: Joi.string().email({ tlds: false }).required().description('Address of the sender/recipient') }).$_setFlag('objectName', 'Address'); const AddressOptionalName = Joi.object({ - name: Joi.string().empty('').max(255), - address: Joi.string().email({ tlds: false }).required() + name: Joi.string().empty('').max(255).description('Name of the sender'), + address: Joi.string().email({ tlds: false }).required().description('Address of the sender') }).$_setFlag('objectName', 'AddressOptionalName'); const AddressOptionalNameArray = Joi.array().items(AddressOptionalName); const Header = Joi.object({ - key: Joi.string().empty('').max(255), + key: Joi.string().empty('').max(255).description("Header key ('X-Mailer')"), value: Joi.string() .empty('') .max(100 * 1024) + .description("Header value ('My Awesome Mailing Service')") }).$_setFlag('objectName', 'Header'); const Attachment = Joi.object({ - filename: Joi.string().empty('').max(255), - contentType: Joi.string().empty('').max(255), - encoding: Joi.string().empty('').default('base64'), - contentTransferEncoding: Joi.string().empty(''), - content: Joi.string().required(), - cid: Joi.string().empty('').max(255) + filename: Joi.string().empty('').max(255).description('Attachment filename'), + contentType: Joi.string().empty('').max(255).description('MIME type for the attachment file'), + encoding: Joi.string().empty('').default('base64').description('Encoding to use to store the attachments'), + contentTransferEncoding: Joi.string().empty('').description('Transfer encoding'), + content: Joi.string().required().description('Base64 encoded attachment content'), + cid: Joi.string().empty('').max(255).description('Content-ID value if you want to reference to this attachment from HTML formatted message') }).$_setFlag('objectName', 'Attachment'); const ReferenceWithAttachments = Joi.object({ - mailbox: Joi.string().hex().lowercase().length(24).required(), - id: Joi.number().required(), - action: Joi.string().valid('reply', 'replyAll', 'forward').required(), - attachments: Joi.alternatives().try( - booleanSchema, - Joi.array().items( - Joi.string() - .regex(/^ATT\d+$/i) - .uppercase() + mailbox: mailboxId, + id: messageId, + action: Joi.string().valid('reply', 'replyAll', 'forward').required().description('Either reply, replyAll or forward'), + attachments: Joi.alternatives() + .try( + booleanSchema, + Joi.array().items( + Joi.string() + .regex(/^ATT\d+$/i) + .uppercase() + ) + ) + .description( + "If true, then includes all attachments from the original message. If it is an array of attachment ID's includes attachments from the list" ) - ) }).$_setFlag('objectName', 'ReferenceWithAttachments'); const Bimi = Joi.object({ - domain: Joi.string().domain().required(), - selector: Joi.string().empty('').max(255) + domain: Joi.string().domain().required().description('Domain name for the BIMI record. It does not have to be the same as the From address.'), + selector: Joi.string().empty('').max(255).description('Optional BIMI selector') }).$_setFlag('objectName', 'Bimi'); module.exports = { Address, AddressOptionalNameArray, + AddressOptionalName, Header, Attachment, ReferenceWithAttachments, diff --git a/lib/schemas/response/general-schemas.js b/lib/schemas/response/general-schemas.js index 208eebd7..1b969349 100644 --- a/lib/schemas/response/general-schemas.js +++ b/lib/schemas/response/general-schemas.js @@ -1,9 +1,32 @@ 'use strict'; +const Joi = require('joi'); const { booleanSchema } = require('../../schemas'); const successRes = booleanSchema.required().description('Indicates successful response'); +const totalRes = Joi.number().required().description('How many results were found'); +const pageRes = Joi.number().required().description('Current page number. Derived from page query argument'); +const previousCursorRes = Joi.alternatives() + .try(Joi.string(), booleanSchema) + .required() + .description('Either a cursor string or false if there are not any previous results'); +const nextCursorRes = Joi.alternatives() + .try(Joi.string(), booleanSchema) + .required() + .description('Either a cursor string or false if there are not any next results'); + +const quotaRes = Joi.object({ + allowed: Joi.number().required().description('Allowed quota of the user in bytes'), + used: Joi.number().required().description('Space used in bytes') +}) + .$_setFlag('objectName', 'Quota') + .description('Quota usage limits'); module.exports = { - successRes + successRes, + totalRes, + pageRes, + previousCursorRes, + nextCursorRes, + quotaRes }; diff --git a/lib/schemas/response/users-schemas.js b/lib/schemas/response/users-schemas.js new file mode 100644 index 00000000..4e2ababe --- /dev/null +++ b/lib/schemas/response/users-schemas.js @@ -0,0 +1,29 @@ +'use strict'; + +const Joi = require('joi'); +const { booleanSchema } = require('../../schemas'); +const { quotaRes } = require('./general-schemas'); + +const GetUsersResult = Joi.object({ + id: Joi.string().required().description('Users unique ID (24byte hex)'), + username: Joi.string().required().description('Username of the User'), + name: Joi.string().required().description('Name of the User'), + address: Joi.string().required().description('Main email address of the User'), + tags: Joi.array().items(Joi.string()).required().description('List of tags associated with the User'), + targets: Joi.array().items(Joi.string()).required().description('List of forwarding targets'), + enabled2fa: Joi.array().items(Joi.string()).required().description('List of enabled 2FA methods'), + autoreply: booleanSchema.required().description('Is autoreply enabled or not (start time may still be in the future or end time in the past)'), + encryptMessages: booleanSchema.required().description('If true then received messages are encrypted'), + encryptForwarded: booleanSchema.required().description('If true then forwarded messages are encrypted'), + quota: quotaRes, + metaData: Joi.object().description('Custom metadata value. Included if metaData query argument was true'), + internalData: Joi.object().description( + 'Custom metadata value for internal use. Included if internalData query argument was true and request was not made using user-role token' + ), + hasPasswordSet: booleanSchema.required().description('If true then the User has a password set and can authenticate'), + activated: booleanSchema.required().description('Is the account activated'), + disabled: booleanSchema.required().description('If true then user can not authenticate or receive any new mail'), + suspended: booleanSchema.required().description('If true then user can not authenticate') +}).$_setFlag('objectName', 'GetUsersResult'); + +module.exports = { GetUsersResult }; diff --git a/lib/settings-handler.js b/lib/settings-handler.js index 84018e61..70eceda3 100644 --- a/lib/settings-handler.js +++ b/lib/settings-handler.js @@ -125,6 +125,18 @@ const SETTING_KEYS = [ type: 'number', constKey: 'MAX_FILTERS', schema: Joi.number() + }, + + { + key: 'const:sender:defer_times', + name: 'Deferred email delay', + description: 'Comma separated list of times between deferred delivery attempts. Eg. "5m, 15m, 20m, 1h, 1h, 1h"', + type: 'string', + confValue: '5m, 7m, 8m, 25m, 75m, 2h, 4h, 4h, 4h, 4h, 4h, 4h, 4h, 4h, 4h, 4h, 4h', + schema: Joi.string() + .allow('') + .trim() + .pattern(/^\d+\s*[a-z]*(\s*,\s*\d+\s*[a-z]*)*$/) } ]; diff --git a/lib/tools.js b/lib/tools.js index ee1f22f9..ee7eab45 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -629,7 +629,7 @@ function replaceWithRefs(reqBodyData) { if (reqBodyData.objectName) { const objectName = reqBodyData.objectName; Object.keys(reqBodyData).forEach(key => { - if (key !== '$ref') { + if (key !== '$ref' || key !== 'description') { delete reqBodyData[key]; } }); @@ -773,6 +773,24 @@ function parseJoiObject(path, joiObject, requestBodyProperties) { } } + // enum check + if (joiObject._valids) { + const enumValues = []; + for (const validEnumValue of joiObject._valids._values) { + enumValues.push(validEnumValue); + } + if (enumValues.length > 0) { + data.enum = enumValues; + } + } + + // example check + if (joiObject.$_terms && joiObject.$_terms.examples && joiObject.$_terms.examples.length > 0) { + const example = joiObject.$_terms.examples[0]; + + data.example = example; + } + if (path) { requestBodyProperties[path] = data; } else if (Array.isArray(requestBodyProperties)) { @@ -1000,6 +1018,25 @@ module.exports = { obj.description = paramKeyData._flags.description; obj.required = paramKeyData._flags.presence === 'required'; obj.schema = { type: paramKeyData.type }; + + // enum check + if (paramKeyData._valids) { + const enumValues = []; + for (const validEnumValue of paramKeyData._valids._values) { + enumValues.push(validEnumValue); + } + if (enumValues.length > 0) { + obj.schema.enum = enumValues; + } + } + + // example check + if (paramKeyData.$_terms && paramKeyData.$_terms.examples && paramKeyData.$_terms.examples.length > 0) { + const example = paramKeyData.$_terms.examples[0]; + + obj.schema.example = example; + } + operationObj.parameters.push(obj); } diff --git a/package-lock.json b/package-lock.json index c11474b1..7ca150b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wildduck", - "version": "1.40.10", + "version": "1.41.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wildduck", - "version": "1.40.10", + "version": "1.41.3", "license": "EUPL-1.2", "dependencies": { "@fidm/x509": "1.2.1", @@ -16,15 +16,15 @@ "@root/acme": "3.1.0", "@root/csr": "0.8.1", "accesscontrol": "2.2.1", - "axios": "1.5.1", + "axios": "1.6.3", "base32.js": "0.1.0", "bcryptjs": "2.4.3", - "bson": "6.1.0", - "bullmq": "4.12.4", - "fido2-lib": "3.4.1", + "bson": "6.2.0", + "bullmq": "5.1.1", + "fido2-lib": "3.4.4", "gelf": "2.0.1", - "generate-password": "1.7.0", - "hash-wasm": "4.10.0", + "generate-password": "1.7.1", + "hash-wasm": "4.11.0", "he": "1.2.0", "html-to-text": "9.0.5", "humanname": "0.2.2", @@ -40,7 +40,7 @@ "libmime": "5.2.1", "libqp": "2.0.1", "logic-query-parser": "0.0.5", - "mailauth": "4.5.2", + "mailauth": "4.6.0", "mailsplit": "5.4.0", "mobileconfig": "2.4.0", "mongo-cursor-pagination": "8.1.3", @@ -48,12 +48,12 @@ "mongodb-extended-json": "1.11.1", "msgpack5": "6.0.2", "node-forge": "1.3.1", - "node-html-parser": "6.1.10", - "nodemailer": "6.9.6", + "node-html-parser": "6.1.12", + "nodemailer": "6.9.8", "npmlog": "7.0.1", - "openpgp": "5.10.2", + "openpgp": "5.11.0", "pem-jwk": "2.0.0", - "punycode": "2.3.0", + "punycode": "2.3.1", "pwnedpasswords": "1.0.6", "qrcode": "1.5.3", "restify": "11.1.0", @@ -64,28 +64,28 @@ "seq-index": "1.1.0", "smtp-server": "3.13.0", "speakeasy": "2.0.0", - "undici": "5.26.3", + "undici": "5.28.2", "unix-crypt-td-js": "1.1.4", "unixcrypt": "1.2.0", "uuid": "9.0.1", "wild-config": "1.7.1", "yargs": "17.7.2", - "zone-mta": "3.6.13" + "zone-mta": "3.7.0" }, "devDependencies": { "ajv": "8.12.0", "chai": "4.3.10", "docsify-cli": "4.4.4", - "eslint": "8.51.0", + "eslint": "8.56.0", "eslint-config-nodemailer": "1.2.0", - "eslint-config-prettier": "9.0.0", + "eslint-config-prettier": "9.1.0", "grunt": "1.6.1", "grunt-cli": "1.4.3", "grunt-eslint": "24.3.0", "grunt-mocha-test": "0.13.3", "grunt-shell-spawn": "0.4.0", "grunt-wait": "0.3.0", - "imapflow": "1.0.144", + "imapflow": "1.0.147", "mailparser": "3.6.5", "mocha": "10.2.0", "request": "2.88.2", @@ -208,47 +208,50 @@ "optional": true }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.428.0.tgz", - "integrity": "sha512-uj296JRU0LlMVtv7oS9cBTutAya1Gl171BJOl9s/SotMgybUAxnmE+hQdXv2HQP8qwy95wAptbcpDDh4kuOiYQ==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.484.0.tgz", + "integrity": "sha512-xjibqYYx8I8lYM17q3THMC8WpJihzio3+Wd6oAMdcaw+EBsgUcphsRHL5YO8wNEzNiMeXrXOPPUBapxpBmFPBA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.428.0", - "@aws-sdk/credential-provider-node": "3.428.0", - "@aws-sdk/middleware-host-header": "3.428.0", - "@aws-sdk/middleware-logger": "3.428.0", - "@aws-sdk/middleware-recursion-detection": "3.428.0", - "@aws-sdk/middleware-signing": "3.428.0", - "@aws-sdk/middleware-user-agent": "3.428.0", - "@aws-sdk/region-config-resolver": "3.428.0", - "@aws-sdk/types": "3.428.0", - "@aws-sdk/util-endpoints": "3.428.0", - "@aws-sdk/util-user-agent-browser": "3.428.0", - "@aws-sdk/util-user-agent-node": "3.428.0", - "@smithy/config-resolver": "^2.0.14", - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/hash-node": "^2.0.11", - "@smithy/invalid-dependency": "^2.0.11", - "@smithy/middleware-content-length": "^2.0.13", - "@smithy/middleware-endpoint": "^2.1.0", - "@smithy/middleware-retry": "^2.0.16", - "@smithy/middleware-serde": "^2.0.11", - "@smithy/middleware-stack": "^2.0.5", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/node-http-handler": "^2.1.7", - "@smithy/protocol-http": "^3.0.7", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", + "@aws-sdk/client-sts": "3.484.0", + "@aws-sdk/core": "3.481.0", + "@aws-sdk/credential-provider-node": "3.484.0", + "@aws-sdk/middleware-host-header": "3.468.0", + "@aws-sdk/middleware-logger": "3.468.0", + "@aws-sdk/middleware-recursion-detection": "3.468.0", + "@aws-sdk/middleware-signing": "3.468.0", + "@aws-sdk/middleware-user-agent": "3.478.0", + "@aws-sdk/region-config-resolver": "3.484.0", + "@aws-sdk/types": "3.468.0", + "@aws-sdk/util-endpoints": "3.478.0", + "@aws-sdk/util-user-agent-browser": "3.468.0", + "@aws-sdk/util-user-agent-node": "3.470.0", + "@smithy/config-resolver": "^2.0.22", + "@smithy/core": "^1.2.1", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/hash-node": "^2.0.17", + "@smithy/invalid-dependency": "^2.0.15", + "@smithy/middleware-content-length": "^2.0.17", + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-retry": "^2.0.25", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/middleware-stack": "^2.0.9", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/node-http-handler": "^2.2.1", + "@smithy/protocol-http": "^3.0.11", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", + "@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.15", - "@smithy/util-defaults-mode-node": "^2.0.19", - "@smithy/util-retry": "^2.0.4", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.23", + "@smithy/util-defaults-mode-node": "^2.0.31", + "@smithy/util-endpoints": "^1.0.7", + "@smithy/util-retry": "^2.0.8", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -256,44 +259,47 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.428.0.tgz", - "integrity": "sha512-6BuY7cd1licnCZTKuI/IK3ycKATIgsG53TuaK1hZcikwUB2Oiu2z6K+aWpmO9mJuJ6qAoE4dLlAy6lBBBkG6yQ==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.484.0.tgz", + "integrity": "sha512-eHKXDHqgPt99977hNissa1y/efwXZ9kg3EKPLK13b6VzTC8s0+Ih+YZemNE22ahw6SYnRiGglYdkdypJ/uPHkg==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.428.0", - "@aws-sdk/middleware-logger": "3.428.0", - "@aws-sdk/middleware-recursion-detection": "3.428.0", - "@aws-sdk/middleware-user-agent": "3.428.0", - "@aws-sdk/region-config-resolver": "3.428.0", - "@aws-sdk/types": "3.428.0", - "@aws-sdk/util-endpoints": "3.428.0", - "@aws-sdk/util-user-agent-browser": "3.428.0", - "@aws-sdk/util-user-agent-node": "3.428.0", - "@smithy/config-resolver": "^2.0.14", - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/hash-node": "^2.0.11", - "@smithy/invalid-dependency": "^2.0.11", - "@smithy/middleware-content-length": "^2.0.13", - "@smithy/middleware-endpoint": "^2.1.0", - "@smithy/middleware-retry": "^2.0.16", - "@smithy/middleware-serde": "^2.0.11", - "@smithy/middleware-stack": "^2.0.5", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/node-http-handler": "^2.1.7", - "@smithy/protocol-http": "^3.0.7", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", + "@aws-sdk/core": "3.481.0", + "@aws-sdk/middleware-host-header": "3.468.0", + "@aws-sdk/middleware-logger": "3.468.0", + "@aws-sdk/middleware-recursion-detection": "3.468.0", + "@aws-sdk/middleware-user-agent": "3.478.0", + "@aws-sdk/region-config-resolver": "3.484.0", + "@aws-sdk/types": "3.468.0", + "@aws-sdk/util-endpoints": "3.478.0", + "@aws-sdk/util-user-agent-browser": "3.468.0", + "@aws-sdk/util-user-agent-node": "3.470.0", + "@smithy/config-resolver": "^2.0.22", + "@smithy/core": "^1.2.1", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/hash-node": "^2.0.17", + "@smithy/invalid-dependency": "^2.0.15", + "@smithy/middleware-content-length": "^2.0.17", + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-retry": "^2.0.25", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/middleware-stack": "^2.0.9", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/node-http-handler": "^2.2.1", + "@smithy/protocol-http": "^3.0.11", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", + "@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.15", - "@smithy/util-defaults-mode-node": "^2.0.19", - "@smithy/util-retry": "^2.0.4", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.23", + "@smithy/util-defaults-mode-node": "^2.0.31", + "@smithy/util-endpoints": "^1.0.7", + "@smithy/util-retry": "^2.0.8", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -301,47 +307,49 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.428.0.tgz", - "integrity": "sha512-ko9hgmIkS5FNPYtT3pntGGmp+yi+VXBEgePUBoplEKjCxsX/aTgFcq2Rs9duD9/CzkThd42Z0l0fWsVAErVxWQ==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.484.0.tgz", + "integrity": "sha512-psQxH0mYhTVvZhfca3s9NbXgnuOM8l+5LtF7fZBF5y4xaPpfAPicPWp6po69J3ynwyXi/MpHNXd/13d/L09TTA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.428.0", - "@aws-sdk/middleware-host-header": "3.428.0", - "@aws-sdk/middleware-logger": "3.428.0", - "@aws-sdk/middleware-recursion-detection": "3.428.0", - "@aws-sdk/middleware-sdk-sts": "3.428.0", - "@aws-sdk/middleware-signing": "3.428.0", - "@aws-sdk/middleware-user-agent": "3.428.0", - "@aws-sdk/region-config-resolver": "3.428.0", - "@aws-sdk/types": "3.428.0", - "@aws-sdk/util-endpoints": "3.428.0", - "@aws-sdk/util-user-agent-browser": "3.428.0", - "@aws-sdk/util-user-agent-node": "3.428.0", - "@smithy/config-resolver": "^2.0.14", - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/hash-node": "^2.0.11", - "@smithy/invalid-dependency": "^2.0.11", - "@smithy/middleware-content-length": "^2.0.13", - "@smithy/middleware-endpoint": "^2.1.0", - "@smithy/middleware-retry": "^2.0.16", - "@smithy/middleware-serde": "^2.0.11", - "@smithy/middleware-stack": "^2.0.5", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/node-http-handler": "^2.1.7", - "@smithy/protocol-http": "^3.0.7", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", + "@aws-sdk/core": "3.481.0", + "@aws-sdk/credential-provider-node": "3.484.0", + "@aws-sdk/middleware-host-header": "3.468.0", + "@aws-sdk/middleware-logger": "3.468.0", + "@aws-sdk/middleware-recursion-detection": "3.468.0", + "@aws-sdk/middleware-user-agent": "3.478.0", + "@aws-sdk/region-config-resolver": "3.484.0", + "@aws-sdk/types": "3.468.0", + "@aws-sdk/util-endpoints": "3.478.0", + "@aws-sdk/util-user-agent-browser": "3.468.0", + "@aws-sdk/util-user-agent-node": "3.470.0", + "@smithy/config-resolver": "^2.0.22", + "@smithy/core": "^1.2.1", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/hash-node": "^2.0.17", + "@smithy/invalid-dependency": "^2.0.15", + "@smithy/middleware-content-length": "^2.0.17", + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-retry": "^2.0.25", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/middleware-stack": "^2.0.9", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/node-http-handler": "^2.2.1", + "@smithy/protocol-http": "^3.0.11", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", + "@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.15", - "@smithy/util-defaults-mode-node": "^2.0.19", - "@smithy/util-retry": "^2.0.4", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.23", + "@smithy/util-defaults-mode-node": "^2.0.31", + "@smithy/util-endpoints": "^1.0.7", + "@smithy/util-middleware": "^2.0.8", + "@smithy/util-retry": "^2.0.8", + "@smithy/util-utf8": "^2.0.2", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -371,16 +379,33 @@ "fxparser": "src/cli/cli.js" } }, + "node_modules/@aws-sdk/core": { + "version": "3.481.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.481.0.tgz", + "integrity": "sha512-UeyAc2FnWQDts81vPVBWKEj0WagYK4SVAgNfGcg6zCzzqsUG4unr4NPKQoca2L+XOU55yMCy+5l2K6R3YsFGKg==", + "optional": true, + "dependencies": { + "@smithy/core": "^1.2.1", + "@smithy/protocol-http": "^3.0.11", + "@smithy/signature-v4": "^2.0.0", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.428.0.tgz", - "integrity": "sha512-amq+gnybLBOyX1D+GdcjEvios8VBL4TaTyuXPnAjkhinv2e6GHQ0/7QeaI5v4dd4YT76+Nz7a577VXfMf/Ijog==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.484.0.tgz", + "integrity": "sha512-kIusxi5f9jcNfLjNv/fv6eNRHN1bSQhN8nS31jBRemQL3zBuUePk50MqbciZUh29Rf/ATOVvH6UStaxnV6ivlg==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.428.0", - "@aws-sdk/types": "3.428.0", + "@aws-sdk/client-cognito-identity": "3.484.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -388,14 +413,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.428.0.tgz", - "integrity": "sha512-e6fbY174Idzw0r5ZMT1qkDh+dpOp1DX3ickhr7J6ipo3cUGLI45Y5lnR9nYXWfB5o/wiNv4zXgN+Y3ORJJHzyA==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz", + "integrity": "sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -403,17 +428,19 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.428.0.tgz", - "integrity": "sha512-aLrsmLVRTuO/Gx8AYxIUkZ12DdsFnVK9lbfNpeNOisVjM6ZvjCHqMgDsh12ydkUpmb7C0v+ALj8bHzwKcpyMdA==", + "version": "3.481.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.481.0.tgz", + "integrity": "sha512-A2DJKLc37orM9w/Y9kajZWQ4qK6KD+5QKowXwh5/suhrJjNPKKomHFhAvnqPjJAYaSlES2+wk9O+Mfj0t9X2dw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/node-http-handler": "^2.1.7", + "@aws-sdk/types": "3.468.0", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/node-http-handler": "^2.2.1", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", + "@smithy/protocol-http": "^3.0.11", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/util-stream": "^2.0.23", "tslib": "^2.5.0" }, "engines": { @@ -421,20 +448,20 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.428.0.tgz", - "integrity": "sha512-JPc0pVAsP8fOfMxhmPhp7PjddqHaPGBwgVI+wgbkFRUDOmeKCVhoxCB8Womx0R07qRqD5ZCUKBS2NHQ2b3MFRQ==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.484.0.tgz", + "integrity": "sha512-BbvU7seI0RPPwpujnz4LA1lC53Cj4BOSRpYYZbrxA6C7SzW0D/IQBZQP3JBbrxIhqewSROSsYGDjvYbyi5aDEw==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.428.0", - "@aws-sdk/credential-provider-process": "3.428.0", - "@aws-sdk/credential-provider-sso": "3.428.0", - "@aws-sdk/credential-provider-web-identity": "3.428.0", - "@aws-sdk/types": "3.428.0", + "@aws-sdk/credential-provider-env": "3.468.0", + "@aws-sdk/credential-provider-process": "3.468.0", + "@aws-sdk/credential-provider-sso": "3.484.0", + "@aws-sdk/credential-provider-web-identity": "3.468.0", + "@aws-sdk/types": "3.468.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.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -442,21 +469,21 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.428.0.tgz", - "integrity": "sha512-o8toLXf6/sklBpw2e1mzAUq6SvXQzT6iag7Xbg9E0Z2EgVeXLTnWeVto3ilU3cmhTHXBp6wprwUUq2jbjTxMcg==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.484.0.tgz", + "integrity": "sha512-Ylqej3FqRwUD3I7929k214LRH1bUz7f2hfV4ZqY7teM9hQC5Ov5SpVtOtLKNfgaaxAkhD2ffMNfmq8TAg824+g==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.428.0", - "@aws-sdk/credential-provider-ini": "3.428.0", - "@aws-sdk/credential-provider-process": "3.428.0", - "@aws-sdk/credential-provider-sso": "3.428.0", - "@aws-sdk/credential-provider-web-identity": "3.428.0", - "@aws-sdk/types": "3.428.0", + "@aws-sdk/credential-provider-env": "3.468.0", + "@aws-sdk/credential-provider-ini": "3.484.0", + "@aws-sdk/credential-provider-process": "3.468.0", + "@aws-sdk/credential-provider-sso": "3.484.0", + "@aws-sdk/credential-provider-web-identity": "3.468.0", + "@aws-sdk/types": "3.468.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.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -464,15 +491,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.428.0.tgz", - "integrity": "sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz", + "integrity": "sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -480,17 +507,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.428.0.tgz", - "integrity": "sha512-sW2+kSlICSNntsNhLV5apqJkIOXH5hFISCjwVfyB9JXJQDAj8rzkiFfRsKwQ3aTlTYCysrGesIn46+GRP5AgZw==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.484.0.tgz", + "integrity": "sha512-Fl7+YhrlU2icZkz18z9aj4SiWb2aQlWp5LsVqMfSzTlJFc9yPlD9e7F33gnL7kKLVSnAVxsr5v4y4pFC6FZUSw==", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.428.0", - "@aws-sdk/token-providers": "3.428.0", - "@aws-sdk/types": "3.428.0", + "@aws-sdk/client-sso": "3.484.0", + "@aws-sdk/token-providers": "3.484.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -498,14 +525,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.428.0.tgz", - "integrity": "sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz", + "integrity": "sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -513,26 +540,26 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.428.0.tgz", - "integrity": "sha512-BpCrxjiZ4H5PC4vYA7SdTbmvLLrkuaudzHuoPMZ55RGFGfl9xN8caCtXktohzX8+Dn0jutsXuclPwazHOVz9cg==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.484.0.tgz", + "integrity": "sha512-Yl4YPlML79TUir6QPUsgBWFwDu3FOiQGdAnN2eei4ce76ZI5JwPIiBNP0S2qK63R40CeoBqRlSIveBX9v10jjQ==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.428.0", - "@aws-sdk/client-sso": "3.428.0", - "@aws-sdk/client-sts": "3.428.0", - "@aws-sdk/credential-provider-cognito-identity": "3.428.0", - "@aws-sdk/credential-provider-env": "3.428.0", - "@aws-sdk/credential-provider-http": "3.428.0", - "@aws-sdk/credential-provider-ini": "3.428.0", - "@aws-sdk/credential-provider-node": "3.428.0", - "@aws-sdk/credential-provider-process": "3.428.0", - "@aws-sdk/credential-provider-sso": "3.428.0", - "@aws-sdk/credential-provider-web-identity": "3.428.0", - "@aws-sdk/types": "3.428.0", + "@aws-sdk/client-cognito-identity": "3.484.0", + "@aws-sdk/client-sso": "3.484.0", + "@aws-sdk/client-sts": "3.484.0", + "@aws-sdk/credential-provider-cognito-identity": "3.484.0", + "@aws-sdk/credential-provider-env": "3.468.0", + "@aws-sdk/credential-provider-http": "3.481.0", + "@aws-sdk/credential-provider-ini": "3.484.0", + "@aws-sdk/credential-provider-node": "3.484.0", + "@aws-sdk/credential-provider-process": "3.468.0", + "@aws-sdk/credential-provider-sso": "3.484.0", + "@aws-sdk/credential-provider-web-identity": "3.468.0", + "@aws-sdk/types": "3.468.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -540,14 +567,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.428.0.tgz", - "integrity": "sha512-iIHbW5Ym60ol9Q6vsLnaiNdeUIa9DA0OuoOe9LiHC8SYUYVAAhE+xJXUhn1qk/J7z+4qGOkDnVyEvnSaqRPL/w==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz", + "integrity": "sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@smithy/protocol-http": "^3.0.11", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -555,13 +582,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.428.0.tgz", - "integrity": "sha512-1P0V0quL9u2amdNOn6yYT7/ToQUmkLJqCKHPxsRyDB829vBThWndvvH5MkoItj/VgE1zWqMtrzN3xtzD7zx6Qg==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz", + "integrity": "sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -569,29 +596,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.428.0.tgz", - "integrity": "sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz", + "integrity": "sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.428.0.tgz", - "integrity": "sha512-Uutl2niYXTnNP8v84v6umWDHD5no7d5/OqkZE1DsmeKR/dje90J5unJWf7MOsqvYm0JGDEWF4lk9xGVyqsw+Aw==", - "optional": true, - "dependencies": { - "@aws-sdk/middleware-signing": "3.428.0", - "@aws-sdk/types": "3.428.0", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@smithy/protocol-http": "^3.0.11", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -599,17 +611,17 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.428.0.tgz", - "integrity": "sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz", + "integrity": "sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", + "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.7", + "@smithy/protocol-http": "^3.0.11", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.3.5", - "@smithy/util-middleware": "^2.0.4", + "@smithy/types": "^2.7.0", + "@smithy/util-middleware": "^2.0.8", "tslib": "^2.5.0" }, "engines": { @@ -617,15 +629,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.428.0.tgz", - "integrity": "sha512-+GAhObeHRick2D5jr3YkPckjcggt5v6uUVtEUQW2AdD65cE5PjIvmksv6FuM/mME/9nNA+wufQnHbLI8teLeaw==", + "version": "3.478.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz", + "integrity": "sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@aws-sdk/util-endpoints": "3.428.0", - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@aws-sdk/util-endpoints": "3.478.0", + "@smithy/protocol-http": "^3.0.11", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -633,15 +645,15 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.428.0.tgz", - "integrity": "sha512-VqyHZ/Hoz3WrXXMx8cAhFBl8IpjodbRsTjBI117QPq1YRCegxNdGvqmGZnJj8N2Ef9MP1iU30ZWQB+sviDcogA==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.484.0.tgz", + "integrity": "sha512-qfYSwSIc9GasHFrJidydlQE433mB93d31dfypFWhrJPXRv1fhopO72NSfsY2WCcbaRkADc4AajLZFly4J96abw==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/types": "^2.3.5", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.4", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/types": "^2.7.0", + "@smithy/util-config-provider": "^2.1.0", + "@smithy/util-middleware": "^2.0.8", "tslib": "^2.5.0" }, "engines": { @@ -649,45 +661,47 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.428.0.tgz", - "integrity": "sha512-Jciofr//rB1v1FLxADkXoHOCmYyiv2HVNlOq3z5Zkch9ipItOfD6X7f4G4n+IZzElIFzwe4OKoBtJfcnnfo3Pg==", + "version": "3.484.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.484.0.tgz", + "integrity": "sha512-9Eb7X0sNhJANfYCeEYWCvfeD4shMZEse3YUz5EALzbpzi/So56ZaeA/lWWeh0fkYiByq74eA2QkC/tXZkHw6EQ==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.428.0", - "@aws-sdk/middleware-logger": "3.428.0", - "@aws-sdk/middleware-recursion-detection": "3.428.0", - "@aws-sdk/middleware-user-agent": "3.428.0", - "@aws-sdk/types": "3.428.0", - "@aws-sdk/util-endpoints": "3.428.0", - "@aws-sdk/util-user-agent-browser": "3.428.0", - "@aws-sdk/util-user-agent-node": "3.428.0", - "@smithy/config-resolver": "^2.0.14", - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/hash-node": "^2.0.11", - "@smithy/invalid-dependency": "^2.0.11", - "@smithy/middleware-content-length": "^2.0.13", - "@smithy/middleware-endpoint": "^2.1.0", - "@smithy/middleware-retry": "^2.0.16", - "@smithy/middleware-serde": "^2.0.11", - "@smithy/middleware-stack": "^2.0.5", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/node-http-handler": "^2.1.7", + "@aws-sdk/middleware-host-header": "3.468.0", + "@aws-sdk/middleware-logger": "3.468.0", + "@aws-sdk/middleware-recursion-detection": "3.468.0", + "@aws-sdk/middleware-user-agent": "3.478.0", + "@aws-sdk/region-config-resolver": "3.484.0", + "@aws-sdk/types": "3.468.0", + "@aws-sdk/util-endpoints": "3.478.0", + "@aws-sdk/util-user-agent-browser": "3.468.0", + "@aws-sdk/util-user-agent-node": "3.470.0", + "@smithy/config-resolver": "^2.0.22", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/hash-node": "^2.0.17", + "@smithy/invalid-dependency": "^2.0.15", + "@smithy/middleware-content-length": "^2.0.17", + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-retry": "^2.0.25", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/middleware-stack": "^2.0.9", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/node-http-handler": "^2.2.1", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.7", + "@smithy/protocol-http": "^3.0.11", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", + "@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.15", - "@smithy/util-defaults-mode-node": "^2.0.19", - "@smithy/util-retry": "^2.0.4", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.23", + "@smithy/util-defaults-mode-node": "^2.0.31", + "@smithy/util-endpoints": "^1.0.7", + "@smithy/util-retry": "^2.0.8", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -695,12 +709,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.428.0.tgz", - "integrity": "sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz", + "integrity": "sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -708,12 +722,13 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.428.0.tgz", - "integrity": "sha512-ToKMhYlUWJ0YrbggpJLZeyZZNDXtQ4NITxqo/oeGltTT9KG4o/LqVY59EveV0f8P32ObDyj9Vh1mnjxeo3DxGw==", + "version": "3.478.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz", + "integrity": "sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", + "@aws-sdk/types": "3.468.0", + "@smithy/util-endpoints": "^1.0.7", "tslib": "^2.5.0" }, "engines": { @@ -721,9 +736,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "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==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -733,26 +748,26 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.428.0.tgz", - "integrity": "sha512-qlc2UoGsmCpuh1ErY3VayZuAGl74TWWcLmhhQMkeByFSb6KooBlwOmDpDzJRtgwJoe0KXnyHBO6lzl9iczcozg==", + "version": "3.468.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz", + "integrity": "sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@smithy/types": "^2.7.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.428.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.428.0.tgz", - "integrity": "sha512-s721C3H8TkNd0usWLPEAy7yW2lEglR8QAYojdQGzE0e0wymc671nZAFePSZFRtmqZiFOSfk0R602L5fDbP3a8Q==", + "version": "3.470.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz", + "integrity": "sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.428.0", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/types": "^2.3.5", + "@aws-sdk/types": "3.468.0", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -777,9 +792,9 @@ } }, "node_modules/@cbor-extract/cbor-extract-darwin-arm64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.1.1.tgz", - "integrity": "sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz", + "integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==", "cpu": [ "arm64" ], @@ -789,9 +804,9 @@ ] }, "node_modules/@cbor-extract/cbor-extract-darwin-x64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.1.1.tgz", - "integrity": "sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz", + "integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==", "cpu": [ "x64" ], @@ -801,9 +816,9 @@ ] }, "node_modules/@cbor-extract/cbor-extract-linux-arm": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.1.1.tgz", - "integrity": "sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz", + "integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==", "cpu": [ "arm" ], @@ -813,9 +828,9 @@ ] }, "node_modules/@cbor-extract/cbor-extract-linux-arm64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.1.1.tgz", - "integrity": "sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz", + "integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==", "cpu": [ "arm64" ], @@ -825,9 +840,9 @@ ] }, "node_modules/@cbor-extract/cbor-extract-linux-x64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.1.1.tgz", - "integrity": "sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz", + "integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==", "cpu": [ "x64" ], @@ -837,9 +852,9 @@ ] }, "node_modules/@cbor-extract/cbor-extract-win32-x64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.1.1.tgz", - "integrity": "sha512-2Niq1C41dCRIDeD8LddiH+mxGlO7HJ612Ll3D/E73ZWBmycued+8ghTr/Ho3CMOWPUEr08XtyBMVXAjqF+TcKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz", + "integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==", "cpu": [ "x64" ], @@ -864,18 +879,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -918,18 +933,18 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "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" } @@ -973,12 +988,12 @@ "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1000,9 +1015,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@ioredis/commands": { @@ -1019,9 +1034,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", - "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", "optional": true, "dependencies": { "sparse-bitfield": "^3.0.3" @@ -1169,9 +1184,9 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.6.0.tgz", - "integrity": "sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", + "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", "engines": { "node": ">=8.0.0" } @@ -1236,13 +1251,13 @@ } }, "node_modules/@peculiar/webcrypto/node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz", - "integrity": "sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/@phc/format": { @@ -1385,12 +1400,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz", - "integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.15.tgz", + "integrity": "sha512-JkS36PIS3/UCbq/MaozzV7jECeL+BTt4R75bwY8i+4RASys4xOyUS1HsRyUNSqUXFP4QyCz5aNnh3ltuaxv+pw==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1398,15 +1413,34 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.14.tgz", - "integrity": "sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.22.tgz", + "integrity": "sha512-YuPjsLnq6I5ZQBTx6BL5NsCLtcLel5YIMf3gDeEa+GSCXn5mgRXm+8XO8HtjR3Xf69b88aY4c7bwKQQS2i8vtA==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/types": "^2.3.5", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.4", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/types": "^2.7.0", + "@smithy/util-config-provider": "^2.1.0", + "@smithy/util-middleware": "^2.0.8", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.2.1.tgz", + "integrity": "sha512-f6cwmMuHo7RIw/c184NBd2rGeGvGIX6p55HSrG5jfR3qkNYo80PHRfhzkJMq1+mv1ZjI5p8NhenWMMkIRJR4tw==", + "optional": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-retry": "^2.0.25", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/protocol-http": "^3.0.11", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/util-middleware": "^2.0.8", "tslib": "^2.5.0" }, "engines": { @@ -1414,15 +1448,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz", - "integrity": "sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.4.tgz", + "integrity": "sha512-cwPJN1fa1YOQzhBlTXRavABEYRRchci1X79QRwzaNLySnIMJfztyv1Zkst0iZPLMnpn8+CnHu3wOHS11J5Dr3A==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/property-provider": "^2.0.12", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/property-provider": "^2.0.16", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", "tslib": "^2.5.0" }, "engines": { @@ -1430,39 +1464,39 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz", - "integrity": "sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.15.tgz", + "integrity": "sha512-crjvz3j1gGPwA0us6cwS7+5gAn35CTmqu/oIxVbYJo2Qm/sGAye6zGJnMDk3BKhWZw5kcU1G4MxciTkuBpOZPg==", "optional": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.3.tgz", - "integrity": "sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.1.tgz", + "integrity": "sha512-6MNk16fqb8EwcYY8O8WxB3ArFkLZ2XppsSNo1h7SQcFdDDwIumiJeO6wRzm7iB68xvsOQzsdQKbdtTieS3hfSQ==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.7", - "@smithy/querystring-builder": "^2.0.11", - "@smithy/types": "^2.3.5", - "@smithy/util-base64": "^2.0.0", + "@smithy/protocol-http": "^3.0.11", + "@smithy/querystring-builder": "^2.0.15", + "@smithy/types": "^2.7.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz", - "integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.17.tgz", + "integrity": "sha512-Il6WuBcI1nD+e2DM7tTADMf01wEPGK8PAhz4D+YmDUVaoBqlA+CaH2uDJhiySifmuKBZj748IfygXty81znKhw==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1470,12 +1504,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz", - "integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.15.tgz", + "integrity": "sha512-dlEKBFFwVfzA5QroHlBS94NpgYjXhwN/bFfun+7w3rgxNvVy79SK0w05iGc7UAeC5t+D7gBxrzdnD6hreZnDVQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" } }, @@ -1492,13 +1526,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz", - "integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.17.tgz", + "integrity": "sha512-OyadvMcKC7lFXTNBa8/foEv7jOaqshQZkjWS9coEXPRZnNnihU/Ls+8ZuJwGNCOrN2WxXZFmDWhegbnM4vak8w==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", + "@smithy/protocol-http": "^3.0.11", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1506,17 +1540,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.1.tgz", - "integrity": "sha512-YAqGagBvHqDEew4EGz9BrQ7M+f+u7ck9EL4zzYirOhIcXeBS/+q4A5+ObHDDwEp38lD6t88YUtFy3OptqEaDQg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.3.tgz", + "integrity": "sha512-nYfxuq0S/xoAjdLbyn1ixeVB6cyH9wYCMtbbOCpcCRYR5u2mMtqUtVjjPAZ/DIdlK3qe0tpB0Q76szFGNuz+kQ==", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^2.0.11", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.2.0", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-middleware": "^2.0.4", + "@smithy/middleware-serde": "^2.0.15", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/shared-ini-file-loader": "^2.2.7", + "@smithy/types": "^2.7.0", + "@smithy/url-parser": "^2.0.15", + "@smithy/util-middleware": "^2.0.8", "tslib": "^2.5.0" }, "engines": { @@ -1524,17 +1558,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz", - "integrity": "sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.25.tgz", + "integrity": "sha512-FXhafCPvx/9L9OgHJ3cdo/pD1f7ngC7DKsjDV2J7k6LO/Yl69POoBLk4sI1OZPUGc4dfxriENlTma9Nj1hI+IQ==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/protocol-http": "^3.0.7", - "@smithy/service-error-classification": "^2.0.4", - "@smithy/types": "^2.3.5", - "@smithy/util-middleware": "^2.0.4", - "@smithy/util-retry": "^2.0.4", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/protocol-http": "^3.0.11", + "@smithy/service-error-classification": "^2.0.8", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", + "@smithy/util-middleware": "^2.0.8", + "@smithy/util-retry": "^2.0.8", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1552,12 +1587,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz", - "integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.15.tgz", + "integrity": "sha512-FOZRFk/zN4AT4wzGuBY+39XWe+ZnCFd0gZtyw3f9Okn2CJPixl9GyWe98TIaljeZdqWkgrzGyPre20AcW2UMHQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1565,12 +1600,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz", - "integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.9.tgz", + "integrity": "sha512-bCB5dUtGQ5wh7QNL2ELxmDc6g7ih7jWU3Kx6MYH1h4mZbv9xL3WyhKHojRltThCB1arLPyTUFDi+x6fB/oabtA==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1578,14 +1613,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.1.tgz", - "integrity": "sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.8.tgz", + "integrity": "sha512-+w26OKakaBUGp+UG+dxYZtFb5fs3tgHg3/QrRrmUZj+rl3cIuw840vFUXX35cVPTUCQIiTqmz7CpVF7+hdINdQ==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.12", - "@smithy/shared-ini-file-loader": "^2.2.0", - "@smithy/types": "^2.3.5", + "@smithy/property-provider": "^2.0.16", + "@smithy/shared-ini-file-loader": "^2.2.7", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1593,15 +1628,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz", - "integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.1.tgz", + "integrity": "sha512-8iAKQrC8+VFHPAT8pg4/j6hlsTQh+NKOWlctJBrYtQa4ExcxX7aSg3vdQ2XLoYwJotFUurg/NLqFCmZaPRrogw==", "optional": true, "dependencies": { - "@smithy/abort-controller": "^2.0.11", - "@smithy/protocol-http": "^3.0.7", - "@smithy/querystring-builder": "^2.0.11", - "@smithy/types": "^2.3.5", + "@smithy/abort-controller": "^2.0.15", + "@smithy/protocol-http": "^3.0.11", + "@smithy/querystring-builder": "^2.0.15", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1609,12 +1644,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz", - "integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.16.tgz", + "integrity": "sha512-28Ky0LlOqtEjwg5CdHmwwaDRHcTWfPRzkT6HrhwOSRS2RryAvuDfJrZpM+BMcrdeCyEg1mbcgIMoqTla+rdL8Q==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1622,12 +1657,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz", - "integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.11.tgz", + "integrity": "sha512-3ziB8fHuXIRamV/akp/sqiWmNPR6X+9SB8Xxnozzj+Nq7hSpyKdFHd1FLpBkgfGFUTzzcBJQlDZPSyxzmdcx5A==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1635,12 +1670,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz", - "integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.15.tgz", + "integrity": "sha512-e1q85aT6HutvouOdN+dMsN0jcdshp50PSCvxDvo6aIM57LqeXimjfONUEgfqQ4IFpYWAtVixptyIRE5frMp/2A==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -1649,12 +1684,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz", - "integrity": "sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.15.tgz", + "integrity": "sha512-jbBvoK3cc81Cj1c1TH1qMYxNQKHrYQ2DoTntN9FBbtUWcGhc+T4FP6kCKYwRLXyU4AajwGIZstvNAmIEgUUNTQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1662,24 +1697,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz", - "integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.8.tgz", + "integrity": "sha512-jCw9+005im8tsfYvwwSc4TTvd29kXRFkH9peQBg5R/4DD03ieGm6v6Hpv9nIAh98GwgYg1KrztcINC1s4o7/hg==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5" + "@smithy/types": "^2.7.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.0.tgz", - "integrity": "sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.7.tgz", + "integrity": "sha512-0Qt5CuiogIuvQIfK+be7oVHcPsayLgfLJGkPlbgdbl0lD28nUKu4p11L+UG3SAEsqc9UsazO+nErPXw7+IgDpQ==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1687,18 +1722,18 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.11.tgz", - "integrity": "sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.18.tgz", + "integrity": "sha512-SJRAj9jT/l9ocm8D0GojMbnA1sp7I4JeStOQ4lEXI8A5eHE73vbjlzlqIFB7cLvIgau0oUl4cGVpF9IGCrvjlw==", "optional": true, "dependencies": { - "@smithy/eventstream-codec": "^2.0.11", + "@smithy/eventstream-codec": "^2.0.15", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.4", + "@smithy/util-middleware": "^2.0.8", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1706,14 +1741,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.11.tgz", - "integrity": "sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.0.tgz", + "integrity": "sha512-C/bkNue5H5Obgl83SnlBt4v6VM68CqIjIELh3vAabud87xFYznLNKtj6Qb69Z+QOnLp9T+We++sEem/f2AHE+Q==", "optional": true, "dependencies": { - "@smithy/middleware-stack": "^2.0.5", - "@smithy/types": "^2.3.5", - "@smithy/util-stream": "^2.0.16", + "@smithy/middleware-endpoint": "^2.2.3", + "@smithy/middleware-stack": "^2.0.9", + "@smithy/protocol-http": "^3.0.11", + "@smithy/types": "^2.7.0", + "@smithy/util-stream": "^2.0.23", "tslib": "^2.5.0" }, "engines": { @@ -1721,9 +1758,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.5.tgz", - "integrity": "sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.7.0.tgz", + "integrity": "sha512-1OIFyhK+vOkMbu4aN2HZz/MomREkrAC/HqY5mlJMUJfGrPRwijJDTeiN8Rnj9zUaB8ogXAfIOtZrrgqZ4w7Wnw==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -1733,20 +1770,20 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.11.tgz", - "integrity": "sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.15.tgz", + "integrity": "sha512-sADUncUj9rNbOTrdDGm4EXlUs0eQ9dyEo+V74PJoULY4jSQxS+9gwEgsPYyiu8PUOv16JC/MpHonOgqP/IEDZA==", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^2.0.11", - "@smithy/types": "^2.3.5", + "@smithy/querystring-parser": "^2.0.15", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "optional": true, "dependencies": { "@smithy/util-buffer-from": "^2.0.0", @@ -1757,9 +1794,9 @@ } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "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==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -1791,9 +1828,9 @@ } }, "node_modules/@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "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==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -1803,14 +1840,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.15.tgz", - "integrity": "sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw==", + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.23.tgz", + "integrity": "sha512-2u+7t7Wgz1jlfsf6il3pz6DIzyJHS3qrnNnmATICm00pQeqp2D4kUOYauOgKGIeKgVpwzzq8+hFQe749r3xR5w==", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.12", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", + "@smithy/property-provider": "^2.0.16", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1819,23 +1856,37 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.19.tgz", - "integrity": "sha512-7pScU4jBFADB2MBYKM3zb5onMh6Nn0X3IfaFVLYPyCarTIZDLUtUl1GtruzEUJPmDzP+uGeqOtU589HDY0Ni6g==", + "version": "2.0.31", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.31.tgz", + "integrity": "sha512-ZwdjAJAFkkQQ4hdE8HOcxFAWC3GPFXQ3yQ8IBwHH5nQBlr9q+p5eRQ7Y8iRRORJe4vksR+NASRXZ+E81Us1aXQ==", "optional": true, "dependencies": { - "@smithy/config-resolver": "^2.0.14", - "@smithy/credential-provider-imds": "^2.0.16", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/property-provider": "^2.0.12", - "@smithy/smithy-client": "^2.1.11", - "@smithy/types": "^2.3.5", + "@smithy/config-resolver": "^2.0.22", + "@smithy/credential-provider-imds": "^2.1.4", + "@smithy/node-config-provider": "^2.1.8", + "@smithy/property-provider": "^2.0.16", + "@smithy/smithy-client": "^2.2.0", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { "node": ">= 10.0.0" } }, + "node_modules/@smithy/util-endpoints": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.7.tgz", + "integrity": "sha512-Q2gEind3jxoLk6hdKWyESMU7LnXz8aamVwM+VeVjOYzYT1PalGlY/ETa48hv2YpV4+YV604y93YngyzzzQ4IIA==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.8", + "@smithy/types": "^2.7.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "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", @@ -1849,12 +1900,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz", - "integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.8.tgz", + "integrity": "sha512-qkvqQjM8fRGGA8P2ydWylMhenCDP8VlkPn8kiNuFEaFz9xnUKC2irfqsBSJrfrOB9Qt6pQsI58r3zvvumhFMkw==", "optional": true, "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1862,13 +1913,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz", - "integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.8.tgz", + "integrity": "sha512-cQTPnVaVFMjjS6cb44WV2yXtHVyXDC5icKyIbejMarJEApYeJWpBU3LINTxHqp/tyLI+MZOUdosr2mZ3sdziNg==", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^2.0.4", - "@smithy/types": "^2.3.5", + "@smithy/service-error-classification": "^2.0.8", + "@smithy/types": "^2.7.0", "tslib": "^2.5.0" }, "engines": { @@ -1876,18 +1927,18 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.16.tgz", - "integrity": "sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw==", + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.23.tgz", + "integrity": "sha512-OJMWq99LAZJUzUwTk+00plyxX3ESktBaGPhqNIEVab+53gLULiWN9B/8bRABLg0K6R6Xg4t80uRdhk3B/LZqMQ==", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^2.2.3", - "@smithy/node-http-handler": "^2.1.7", - "@smithy/types": "^2.3.5", - "@smithy/util-base64": "^2.0.0", + "@smithy/fetch-http-handler": "^2.3.1", + "@smithy/node-http-handler": "^2.2.1", + "@smithy/types": "^2.7.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.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -1907,9 +1958,9 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "optional": true, "dependencies": { "@smithy/util-buffer-from": "^2.0.0", @@ -1932,17 +1983,17 @@ } }, "node_modules/@types/node": { - "version": "20.8.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", - "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", + "version": "20.10.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", + "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/webidl-conversions": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", - "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, "node_modules/@types/whatwg-url": { "version": "8.2.2", @@ -1953,6 +2004,12 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1979,9 +2036,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2084,9 +2141,9 @@ } }, "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -2210,9 +2267,9 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", + "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -2477,9 +2534,9 @@ "dev": true }, "node_modules/bson": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.1.0.tgz", - "integrity": "sha512-yiQ3KxvpVoRpx1oD1uPz4Jit9tAVTJgjdmjDKtUErkOoL9VNoF8Dd58qtAOL5E40exx2jvAT9sqdRSK/r+SHlA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", "engines": { "node": ">=16.20.1" } @@ -2508,9 +2565,9 @@ } }, "node_modules/bullmq": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-4.12.4.tgz", - "integrity": "sha512-t+vMfvc2gVZUZWXd0jMh3vr5K83ZEfwwaiLW2HlL+W76ktWzOpwDqkWHmLwu98xylpPI1YcZ2WoGcqG6RsnKiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.1.1.tgz", + "integrity": "sha512-j3zbNEQWsyHjpqGWiem2XBfmxAjYcArbwsmGlkM1E9MAVcrqB5hQUsXmyy9gEBAdL+PVotMICr7xTquR4Y2sKQ==", "dependencies": { "cron-parser": "^4.6.0", "glob": "^8.0.3", @@ -2523,17 +2580,6 @@ "uuid": "^9.0.0" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/bytestreamjs": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", @@ -2600,12 +2646,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2634,32 +2681,32 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/cbor-extract": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.1.1.tgz", - "integrity": "sha512-1UX977+L+zOJHsp0mWFG13GLwO6ucKgSmSW6JTl8B9GUvACvHeIVpFqhU92299Z6PfD09aTXDell5p+lp1rUFA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz", + "integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==", "hasInstallScript": true, "optional": true, "dependencies": { - "node-gyp-build-optional-packages": "5.0.3" + "node-gyp-build-optional-packages": "5.1.1" }, "bin": { "download-cbor-prebuilds": "bin/download-prebuilds.js" }, "optionalDependencies": { - "@cbor-extract/cbor-extract-darwin-arm64": "2.1.1", - "@cbor-extract/cbor-extract-darwin-x64": "2.1.1", - "@cbor-extract/cbor-extract-linux-arm": "2.1.1", - "@cbor-extract/cbor-extract-linux-arm64": "2.1.1", - "@cbor-extract/cbor-extract-linux-x64": "2.1.1", - "@cbor-extract/cbor-extract-win32-x64": "2.1.1" + "@cbor-extract/cbor-extract-darwin-arm64": "2.2.0", + "@cbor-extract/cbor-extract-darwin-x64": "2.2.0", + "@cbor-extract/cbor-extract-linux-arm": "2.2.0", + "@cbor-extract/cbor-extract-linux-arm64": "2.2.0", + "@cbor-extract/cbor-extract-linux-x64": "2.2.0", + "@cbor-extract/cbor-extract-win32-x64": "2.2.0" } }, "node_modules/cbor-x": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.5.4.tgz", - "integrity": "sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.5.7.tgz", + "integrity": "sha512-i6JEJLOXTK++wCpBI1EZUCE5tXxkA1N7Y0NZbPJ0XBcz0vRQlWESOhxb6EDST7SgP2uUf81UnB2Qv3VcxKvjoA==", "optionalDependencies": { - "cbor-extract": "^2.1.1" + "cbor-extract": "^2.2.0" } }, "node_modules/chai": { @@ -2840,10 +2887,13 @@ } }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -3019,33 +3069,33 @@ } }, "node_modules/csv": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.5.tgz", - "integrity": "sha512-Y+KTCAUljtq2JaGP42ZL1bymqlU5BkfnFpZhxRczGFDZox2VXhlRHnG5DRshyUrwQzmCdEiLjSqNldCfm1OVCA==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.6.tgz", + "integrity": "sha512-jsEsX2HhGp7xiwrJu5srQavKsh+HUJcCi78Ar3m4jlmFKRoTkkMy7ZZPP+LnQChmaztW+uj44oyfMb59daAs/Q==", "dependencies": { - "csv-generate": "^4.3.0", - "csv-parse": "^5.5.2", - "csv-stringify": "^6.4.4", - "stream-transform": "^3.2.10" + "csv-generate": "^4.3.1", + "csv-parse": "^5.5.3", + "csv-stringify": "^6.4.5", + "stream-transform": "^3.3.0" }, "engines": { "node": ">= 0.1.90" } }, "node_modules/csv-generate": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.3.0.tgz", - "integrity": "sha512-7KdVId/2RgwPIKfWHaHtjBq7I9mgdi8ICzsUyIhP8is6UwpwVGGSC/aPnrZ8/SkgBcCP20lXrdPuP64Irs1VBg==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.3.1.tgz", + "integrity": "sha512-7YeeJq+44/I/O5N2sr2qBMcHZXhpfe38eh7DOFxyMtYO+Pir7kIfgFkW5MPksqKqqR6+/wX7UGoZm1Ot11151w==" }, "node_modules/csv-parse": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.2.tgz", - "integrity": "sha512-YRVtvdtUNXZCMyK5zd5Wty1W6dNTpGKdqQd4EQ8tl/c6KW1aMBB1Kg1ppky5FONKmEqGJ/8WjLlTNLPne4ioVA==" + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.3.tgz", + "integrity": "sha512-v0KW6C0qlZzoGjk6u5tLmVfyZxNgPGXZsWTXshpAgKVGmGXzaVWGdlCFxNx5iuzcXT/oJN1HHM9DZKwtAtYa+A==" }, "node_modules/csv-stringify": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.4.tgz", - "integrity": "sha512-NDshLupGa7gp4UG4sSNIqwYJqgSwvds0SvENntxoVoVvTzXcrHvd5gG2MWpbRpSNvk59dlmIe1IwNvSxN4IVmg==" + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.5.tgz", + "integrity": "sha512-SPu1Vnh8U5EnzpNOi1NDBL5jU5Rx7DVHr15DNg9LXDTAbQlAVAmEbVt16wZvEW9Fu9Qt4Ji8kmeCJ2B1+4rFTQ==" }, "node_modules/dashdash": { "version": "1.14.1", @@ -3152,6 +3202,19 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3199,6 +3262,15 @@ "node": ">=0.10.0" } }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -3666,18 +3738,19 @@ } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3726,9 +3799,9 @@ "dev": true }, "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -4071,17 +4144,17 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "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": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], "dependencies": { @@ -4092,18 +4165,18 @@ } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fido2-lib": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/fido2-lib/-/fido2-lib-3.4.1.tgz", - "integrity": "sha512-efNrRbckp48AW7Q43o6gcp8/wnoBM7hwKikQntdiR2/NqVMPaCXFQs8kJ9wQqfv5V3PxZdg4kD9DpxdqYl6jxQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/fido2-lib/-/fido2-lib-3.4.4.tgz", + "integrity": "sha512-qbw/dauRg2lO8h3xt5KndTSUh/WgnZ8rf7km1jkaa3BQfqp8abthgMCr0FhnbOz8xCwvPC/CRw8pLYcT9yIqww==", "dependencies": { "@hexagon/base64": "~1.1.26", "@peculiar/webcrypto": "~1.4.3", @@ -4118,9 +4191,9 @@ } }, "node_modules/figlet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.6.0.tgz", - "integrity": "sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", + "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", "dev": true, "bin": { "figlet": "bin/index.js" @@ -4265,9 +4338,9 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { "flatted": "^3.2.9", @@ -4275,7 +4348,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -4285,9 +4358,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", @@ -4438,9 +4511,9 @@ } }, "node_modules/generate-password": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/generate-password/-/generate-password-1.7.0.tgz", - "integrity": "sha512-WPCtlfy0jexf7W5IbwxGUgpIDvsZIohbI2DAq2Q6TSlKKis+G4GT9sxvPxrZUGL8kP6WUXMWNqYnxY6DDKAdFA==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/generate-password/-/generate-password-1.7.1.tgz", + "integrity": "sha512-9bVYY+16m7W7GczRBDqXE+VVuCX+bWNrfYKC/2p2JkZukFb2sKxT6E3zZ3mJGz7GMe5iRK0A/WawSL3jQfJuNQ==" }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -4460,14 +4533,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4627,9 +4700,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4641,6 +4714,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -4949,9 +5033,9 @@ } }, "node_modules/grunt-legacy-util/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/grunt-mocha-test": { @@ -5124,14 +5208,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -5162,6 +5238,17 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -5199,9 +5286,20 @@ } }, "node_modules/hash-wasm": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.10.0.tgz", - "integrity": "sha512-a0NjBNWjavvMalm/pPSEJ00MPDjRG8rv9D5BK7dBQTLGwAOVWqnTEUggaYs5szATB5UK5ULeIQr7QJXbczAZYA==" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.11.0.tgz", + "integrity": "sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/he": { "version": "1.2.0", @@ -5407,18 +5505,18 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/imapflow": { - "version": "1.0.144", - "resolved": "https://registry.npmjs.org/imapflow/-/imapflow-1.0.144.tgz", - "integrity": "sha512-pJENOyIn3oaJwtMbIty4cYcxguNR4oWz+izTo267jcLOpBXrjwnQG2jU7+yEDESxaPazVXlcbr/5ZzBRglT51Q==", + "version": "1.0.147", + "resolved": "https://registry.npmjs.org/imapflow/-/imapflow-1.0.147.tgz", + "integrity": "sha512-ICMPIkgQ0ysrjj4uQyz6JN8e4hUFpDMZJaNHvRW52uZCTIEGDNmH6IoIAfsdErwsn5z/1g+86e7v/n09A/0XmA==", "dev": true, "dependencies": { "encoding-japanese": "2.0.0", @@ -5427,15 +5525,15 @@ "libmime": "5.2.1", "libqp": "2.0.1", "mailsplit": "5.4.0", - "nodemailer": "6.9.5", - "pino": "8.15.1", + "nodemailer": "6.9.7", + "pino": "8.16.1", "socks": "2.7.1" } }, "node_modules/imapflow/node_modules/nodemailer": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", - "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -5611,12 +5709,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6257,27 +6355,27 @@ } }, "node_modules/luxon": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", - "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", "engines": { "node": ">=12" } }, "node_modules/mailauth": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/mailauth/-/mailauth-4.5.2.tgz", - "integrity": "sha512-6gBaJpYZZviI4OM51pZPLDZ3Tc9U0ENIbhNtR4ZkKCKHi11oiVKJLZek0R5m7Z2TieF+xkOpy3uz56vuxsXqdQ==", + "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.7", + "fast-xml-parser": "4.3.2", "ipaddr.js": "2.1.0", - "joi": "17.9.2", + "joi": "17.11.0", "libmime": "5.2.1", - "nodemailer": "6.9.4", + "nodemailer": "6.9.7", "psl": "1.9.0", - "punycode": "2.3.0", - "undici": "5.23.0", + "punycode": "2.3.1", + "undici": "5.27.0", "yargs": "17.7.2" }, "bin": { @@ -6287,32 +6385,20 @@ "node": ">=16.0.0" } }, - "node_modules/mailauth/node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/mailauth/node_modules/nodemailer": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.4.tgz", - "integrity": "sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA==", + "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/undici": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", - "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.0.tgz", + "integrity": "sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==", "dependencies": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" }, "engines": { "node": ">=14.0" @@ -6428,9 +6514,9 @@ } }, "node_modules/medium-zoom": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.8.tgz", - "integrity": "sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", "dev": true }, "node_modules/memory-pager": { @@ -6733,9 +6819,9 @@ } }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } @@ -6841,9 +6927,9 @@ } }, "node_modules/mongodb-extended-json/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/mongodb-extended-json/node_modules/bson": { "version": "1.1.6", @@ -6940,9 +7026,9 @@ } }, "node_modules/msgpackr": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.9.tgz", - "integrity": "sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.1.tgz", + "integrity": "sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ==", "optionalDependencies": { "msgpackr-extract": "^3.0.2" } @@ -7053,6 +7139,14 @@ "node": ">=6.0.0" } }, + "node_modules/mx-connect/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/mx-connect/node_modules/yargs": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", @@ -7177,10 +7271,13 @@ } }, "node_modules/node-gyp-build-optional-packages": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", - "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", + "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==", "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", @@ -7188,18 +7285,18 @@ } }, "node_modules/node-html-parser": { - "version": "6.1.10", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.10.tgz", - "integrity": "sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.12.tgz", + "integrity": "sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==", "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "node_modules/nodemailer": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.6.tgz", - "integrity": "sha512-s7pDtWwe5fLMkQUhw8TkWB/wnZ7SRdd9HRZslq/s24hlZvBP3j32N/ETLmnqTpmj4xoBZL9fOWyCIZ7r2HORHg==", + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.8.tgz", + "integrity": "sha512-cfrYUk16e67Ks051i4CntM9kshRYei1/o/Gi8K1d+R34OIs21xdFnW7Pt7EucmVKA0LKtqUGNcjMZ7ehjl49mQ==", "engines": { "node": ">=6.0.0" } @@ -7273,9 +7370,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", - "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7390,9 +7487,9 @@ } }, "node_modules/openpgp": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.10.2.tgz", - "integrity": "sha512-nRqMp4o31rBagWB02tgfKCsocXWq4uYobZf9GDVlD5rQXBq/wRIZHiDhGX1dlDAI2inkZcPd2dSZOqmtGnsK1A==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.11.0.tgz", + "integrity": "sha512-hytHsxIPtRhuh6uAmoBUThHSwHSX3imLu7x4453T+xkVqIw49rl22MRD4KQIAQdCDoVdouejzYgcuLmMA/2OAA==", "dependencies": { "asn1.js": "^5.0.0" }, @@ -7744,9 +7841,9 @@ } }, "node_modules/pino": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.1.tgz", - "integrity": "sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==", + "version": "8.16.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.1.tgz", + "integrity": "sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA==", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -7757,7 +7854,7 @@ "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.1.0", + "sonic-boom": "^3.7.0", "thread-stream": "^2.0.0" }, "bin": { @@ -7774,9 +7871,9 @@ } }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -7870,9 +7967,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-warning": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", - "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", + "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" }, "node_modules/projection-utils": { "version": "1.1.0", @@ -7912,9 +8009,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -8488,13 +8585,13 @@ } }, "node_modules/restify/node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -8838,6 +8935,20 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -9031,9 +9142,9 @@ "integrity": "sha512-4KAl/FUDqHm4En4cwtNKHSXCztmqkEstGkFs0yofQ5NkC6zK8C3cSuIFmK/aswsCfx+IBlM1uwYFuYE7UT80Rw==" }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -9083,17 +9194,9 @@ } }, "node_modules/stream-transform": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.2.10.tgz", - "integrity": "sha512-Yu+x7zcWbWdyB0Td8dFzHt2JEyD6694CNq2lqh1rbuEBVxPtjb/GZ7xDnZcdYiU5E/RtufM54ClSEOzZDeWguA==" - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.0.tgz", + "integrity": "sha512-pG1NeDdmErNYKtvTpFayrEueAmL0xVU5wd22V7InGnatl4Ocq3HY7dcXIKj629kXvYQvglCC7CeDIGAlx1RNGA==" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -9314,20 +9417,20 @@ } }, "node_modules/tldts": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.0.16.tgz", - "integrity": "sha512-TkEq38COU640mzOKPk4D1oH3FFVvwEtMaKIfw/+F/umVsy7ONWu8PPQH0c11qJ/Jq/zbcQGprXGsT8GcaDSmJg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.0.23.tgz", + "integrity": "sha512-LaA60X7J9mts1EliB7Nq/OBqicaI7TgsheWeQ8RR1uqwcVLjvRVHTGOkWjKAPa/XF+0t2ZBy1oF6OW8ufqOsKA==", "dependencies": { - "tldts-core": "^6.0.16" + "tldts-core": "^6.0.23" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.0.16.tgz", - "integrity": "sha512-/ypKV6FdiDpXnVEUmPy9s5xfoSAyNPvj1r6V/3FqQBWi0ay3asObLX4Hn8eLwkHB0+VEr2bneu3CnX4uT3fO0w==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.1.tgz", + "integrity": "sha512-xBHFfOO2YmEwogupGTKR0IBXe1IJe1/GleNeXpO294Fk90aQSvrop41BKA66CkfNLVOuomJDZ304KxwovT04Vw==" }, "node_modules/to-readable-stream": { "version": "1.0.0", @@ -9517,9 +9620,9 @@ } }, "node_modules/undici": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", - "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", + "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -9528,9 +9631,9 @@ } }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unique-string": { "version": "2.0.0", @@ -9772,13 +9875,13 @@ } }, "node_modules/webcrypto-core/node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz", - "integrity": "sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/webidl-conversions": { @@ -10174,9 +10277,9 @@ } }, "node_modules/zone-mta": { - "version": "3.6.13", - "resolved": "https://registry.npmjs.org/zone-mta/-/zone-mta-3.6.13.tgz", - "integrity": "sha512-we+vhQeXw1S7CzerErqHy9nj8XxTzV08/KCvFeORabe74wGRdQSZs7Y0RmQBpuyODQSO2nbeCY4uVyCKvJSYaQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/zone-mta/-/zone-mta-3.7.0.tgz", + "integrity": "sha512-5k/wWxM+egeVE7mhfOvjgZxzu9hWk1LCG28B2jz2N3VV2wo2pu+qNO18PUaZYFhn4TH9/Vyo0ph0kUYVC9/1ZA==", "dependencies": { "base32.js": "0.1.0", "crc-32": "1.2.2", @@ -10191,10 +10294,10 @@ "mongodb": "4.17.0", "msgpack-js": "0.3.0", "mx-connect": "1.4.4", - "nodemailer": "6.9.6", + "nodemailer": "6.9.7", "npmlog": "7.0.1", "prom-client": "15.0.0", - "punycode": "2.3.0", + "punycode": "2.3.1", "request": "2.88.2", "restify": "11.1.0", "seq-index": "1.1.0", @@ -10209,6 +10312,14 @@ "engines": { "node": ">=16.0.0" } + }, + "node_modules/zone-mta/node_modules/nodemailer": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", + "engines": { + "node": ">=6.0.0" + } } } } diff --git a/package.json b/package.json index 368e6770..2d863309 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,18 @@ { "name": "wildduck", - "version": "1.40.10", + "version": "1.41.3", "description": "IMAP/POP3 server built with Node.js and MongoDB", "main": "server.js", "scripts": { "test": "mongo --eval 'db.dropDatabase()' wildduck-test && redis-cli -n 13 flushdb && npm run runtest", + "test:proto": "NODE_ENV=test grunt proto", "printconf": "NODE_CONFIG_ONLY=true npm start", "runtest": "NODE_ENV=test grunt", "runci": "npm run printconf && npm run runtest", "apidoc": "apidoc -i lib/api/ -o docs/api/", "show": "NODE_CONFIG_ONLY=true node server.js", - "start": "node server.js" + "start": "node server.js", + "update": "rm -rf node_modules package-lock.json && ncu -u && npm install" }, "keywords": [ "imap", @@ -26,16 +28,16 @@ "ajv": "8.12.0", "chai": "4.3.10", "docsify-cli": "4.4.4", - "eslint": "8.51.0", + "eslint": "8.56.0", "eslint-config-nodemailer": "1.2.0", - "eslint-config-prettier": "9.0.0", + "eslint-config-prettier": "9.1.0", "grunt": "1.6.1", "grunt-cli": "1.4.3", "grunt-eslint": "24.3.0", "grunt-mocha-test": "0.13.3", "grunt-shell-spawn": "0.4.0", "grunt-wait": "0.3.0", - "imapflow": "1.0.144", + "imapflow": "1.0.147", "mailparser": "3.6.5", "mocha": "10.2.0", "request": "2.88.2", @@ -49,15 +51,15 @@ "@root/acme": "3.1.0", "@root/csr": "0.8.1", "accesscontrol": "2.2.1", - "axios": "1.5.1", + "axios": "1.6.3", "base32.js": "0.1.0", "bcryptjs": "2.4.3", - "bson": "6.1.0", - "bullmq": "4.12.4", - "fido2-lib": "3.4.1", + "bson": "6.2.0", + "bullmq": "5.1.1", + "fido2-lib": "3.4.4", "gelf": "2.0.1", - "generate-password": "1.7.0", - "hash-wasm": "4.10.0", + "generate-password": "1.7.1", + "hash-wasm": "4.11.0", "he": "1.2.0", "html-to-text": "9.0.5", "humanname": "0.2.2", @@ -73,7 +75,7 @@ "libmime": "5.2.1", "libqp": "2.0.1", "logic-query-parser": "0.0.5", - "mailauth": "4.5.2", + "mailauth": "4.6.0", "mailsplit": "5.4.0", "mobileconfig": "2.4.0", "mongo-cursor-pagination": "8.1.3", @@ -81,12 +83,12 @@ "mongodb-extended-json": "1.11.1", "msgpack5": "6.0.2", "node-forge": "1.3.1", - "node-html-parser": "6.1.10", - "nodemailer": "6.9.6", + "node-html-parser": "6.1.12", + "nodemailer": "6.9.8", "npmlog": "7.0.1", - "openpgp": "5.10.2", + "openpgp": "5.11.0", "pem-jwk": "2.0.0", - "punycode": "2.3.0", + "punycode": "2.3.1", "pwnedpasswords": "1.0.6", "qrcode": "1.5.3", "restify": "11.1.0", @@ -97,13 +99,13 @@ "seq-index": "1.1.0", "smtp-server": "3.13.0", "speakeasy": "2.0.0", - "undici": "5.26.3", + "undici": "5.28.2", "unix-crypt-td-js": "1.1.4", "unixcrypt": "1.2.0", "uuid": "9.0.1", "wild-config": "1.7.1", "yargs": "17.7.2", - "zone-mta": "3.6.13" + "zone-mta": "3.7.0" }, "repository": { "type": "git", diff --git a/public/public/config.html b/public/public/config.html index a901d3a2..e545955f 100644 --- a/public/public/config.html +++ b/public/public/config.html @@ -191,8 +191,18 @@ if (setting.default) { let defaultTextElm = document.createElement('code'); - defaultTextElm.textContent = formatNumber(setting.default, setting.type); - defaultTdElm.title = setting.description; + + let formattedValue = formatNumber(setting.default, setting.type); + let settingTitle = setting.description; + + if (typeof formattedValue !== 'string' || formattedValue.length < 12) { + defaultTextElm.textContent = formattedValue; + } else { + defaultTextElm.textContent = formattedValue.substr(0, 8) + '…'; + settingTitle += '\nDefault: "' + formattedValue + '"'; + } + + defaultTdElm.title = settingTitle; defaultTdElm.appendChild(defaultTextElm); } else { defaultTdElm.textContent = ' '; diff --git a/setup/01_install_commits.sh b/setup/01_install_commits.sh index 99677dd1..3f1b3a84 100755 --- a/setup/01_install_commits.sh +++ b/setup/01_install_commits.sh @@ -3,17 +3,17 @@ OURNAME=01_install_commits.sh apt-get update -apt-get install -y lsb-release curl gnupg +apt-get install -y lsb-release ca-certificates curl gnupg -NODEREPO="node_20.x" +NODE_MAJOR="20" MONGODB="7.0" CODENAME=`lsb_release -c -s` -WILDDUCK_COMMIT="38d80e49b2c4502aa7c873de6c2acdc2986835ce" -ZONEMTA_COMMIT="f6397a69e8d2f3b69bd4cfe7477c3086e8926762" # zone-mta-template -WEBMAIL_COMMIT="6e89e0e926798bfd04bc47f605df76129c067ac9" -WILDDUCK_ZONEMTA_COMMIT="4f46298b03ddf0120981b58e11357b88aaffb249" -WILDDUCK_HARAKA_COMMIT="7778d141cb1ca4e8cacfff7d7f50639d68feede5" +WILDDUCK_COMMIT="cd3d52959e654af0e1cb56b612a2d4886f28e777" +ZONEMTA_COMMIT="0037bcd93c5147426c13a57794037f08840929ee" # zone-mta-template +WEBMAIL_COMMIT="40ee1ef973de33de5bdf3e6b7e877d156d87436a" +WILDDUCK_ZONEMTA_COMMIT="c9c50892f805f6871532a0f5329c0bcbb02e2c43" +WILDDUCK_HARAKA_COMMIT="ca3ac7626fc4f3db1587049bc4b1d1a1213cfd23" HARAKA_VERSION="3.0.2" echo -e "\n-- Executing ${ORANGE}${OURNAME}${NC} subscript --" diff --git a/setup/04_install_import_keys.sh b/setup/04_install_import_keys.sh index c206cccd..63a995be 100755 --- a/setup/04_install_import_keys.sh +++ b/setup/04_install_import_keys.sh @@ -23,12 +23,12 @@ export DEBIAN_FRONTEND=noninteractive keyring="/usr/share/keyrings" # nodejs -node_key_url="https://deb.nodesource.com/gpgkey/nodesource.gpg.key" +node_key_url="https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" local_node_key="${keyring}/nodesource.gpg" curl -fsSL $node_key_url | gpg --dearmor | tee $local_node_key >/dev/null -echo "deb [signed-by=${local_node_key}] https://deb.nodesource.com/$NODEREPO $CODENAME main" > /etc/apt/sources.list.d/nodesource.list -echo "deb-src [signed-by=${local_node_key}] https://deb.nodesource.com/$NODEREPO $CODENAME main" >> /etc/apt/sources.list.d/nodesource.list +echo "deb [signed-by=${local_node_key}] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" > /etc/apt/sources.list.d/nodesource.list +echo "deb-src [signed-by=${local_node_key}] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list # mongodb mongo_key_url="https://pgp.mongodb.com/server-${MONGODB}.asc"