From e949ffb036f2c8aa074bf5446e860a620dbf4544 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:28:35 +0100 Subject: [PATCH 001/176] fix: QueueConsumer rethrows callback errors to prevent message acknowledgment in case of errors (#288) --- src/queue/consumers/QueueConsumer.spec.ts | 105 ++++++++++++++++++++++ src/queue/consumers/QueueConsumer.ts | 3 + 2 files changed, 108 insertions(+) create mode 100644 src/queue/consumers/QueueConsumer.spec.ts diff --git a/src/queue/consumers/QueueConsumer.spec.ts b/src/queue/consumers/QueueConsumer.spec.ts new file mode 100644 index 00000000..ccfb1c4b --- /dev/null +++ b/src/queue/consumers/QueueConsumer.spec.ts @@ -0,0 +1,105 @@ +jest.mock('@user-office-software/duo-logger'); + +import { logger } from '@user-office-software/duo-logger'; +import { MessageBroker } from '@user-office-software/duo-message-broker'; + +import { QueueConsumer } from './QueueConsumer'; + +class TestQueueConsumer extends QueueConsumer { + getQueueName() { + return 'testQueue'; + } + + getExchangeName() { + return 'testExchange'; + } + + onMessage = jest.fn(); +} + +describe('QueueConsumer', () => { + let messageBrokerMock: jest.Mocked; + let queueConsumer: TestQueueConsumer; + + beforeEach(() => { + messageBrokerMock = { + addQueueToExchangeBinding: jest.fn().mockResolvedValue(undefined), + listenOn: jest.fn().mockResolvedValue(undefined), + } as any; + queueConsumer = new TestQueueConsumer(messageBrokerMock); + }); + + it('should throw error if queue name is not set', async () => { + queueConsumer.getQueueName = jest.fn(); + + await expect(queueConsumer.start()).rejects.toThrow( + `Queue name variable not set for consumer ${queueConsumer.constructor.name}` + ); + }); + + it('should throw error if exchange name is not set', async () => { + queueConsumer.getExchangeName = jest.fn(); + + await expect(queueConsumer.start()).rejects.toThrow( + `Exchange name variable not set for consumer ${queueConsumer.constructor.name}` + ); + }); + + it('should call addQueueToExchangeBinding on start', async () => { + await queueConsumer.start(); + + expect(messageBrokerMock.addQueueToExchangeBinding).toHaveBeenCalledWith( + 'testQueue', + 'testExchange' + ); + }); + + it('should call listenOn on start', async () => { + await queueConsumer.start(); + + expect(messageBrokerMock.listenOn).toHaveBeenCalledWith( + 'testQueue', + expect.any(Function) + ); + }); + + it('should call onMessage when a message is received', async () => { + await queueConsumer.start(); + + await messageBrokerMock.listenOn.mock.calls[0][1]( + 'testMessage', + {}, + {} as any + ); + + expect(logger.logInfo).toHaveBeenCalledWith('Received message on queue', { + queueName: 'testQueue', + }); + expect(logger.logException).not.toHaveBeenCalled(); + expect(queueConsumer.onMessage).toHaveBeenCalledWith('testMessage', {}, {}); + }); + + it('should log error if onMessage throws and rethrow the error', async () => { + const error = new Error('Test error'); + queueConsumer.onMessage = jest.fn().mockRejectedValue(error); + + await queueConsumer.start(); + + await expect( + messageBrokerMock.listenOn.mock.calls[0][1]('testMessage', {}, {} as any) + ).rejects.toThrow(error); + + expect(logger.logInfo).toHaveBeenCalledWith('Received message on queue', { + queueName: 'testQueue', + }); + expect(logger.logException).toHaveBeenCalledWith( + 'Error while handling QueueConsumer callback: ', + { + error: error.message, + queue: 'testQueue', + consumer: 'TestQueueConsumer', + args: ['testMessage', {}, {}], + } + ); + }); +}); diff --git a/src/queue/consumers/QueueConsumer.ts b/src/queue/consumers/QueueConsumer.ts index c341ef9a..e12c5b4e 100644 --- a/src/queue/consumers/QueueConsumer.ts +++ b/src/queue/consumers/QueueConsumer.ts @@ -54,6 +54,9 @@ export abstract class QueueConsumer { consumer: this.constructor.name, args, }); + + // Re-throw the error to make sure the message is not acknowledged + throw error; } }); logger.logInfo('Listening on queue', { queueName }); From 3276aa43f2169363e51081e4ad56d7130bc25d3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:31:36 +0000 Subject: [PATCH 002/176] build(deps): bump dotenv from 16.3.1 to 16.4.5 Bumps [dotenv](https://github.com/motdotla/dotenv) from 16.3.1 to 16.4.5. - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v16.3.1...v16.4.5) --- updated-dependencies: - dependency-name: dotenv dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28856e8f..b4bb1491 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.6.5", - "dotenv": "^16.3.1", + "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.18.3", "kafkajs": "^2.2.3", @@ -3293,14 +3293,14 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dynamic-dedupe": { @@ -10806,9 +10806,9 @@ } }, "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, "dynamic-dedupe": { "version": "0.3.0", diff --git a/package.json b/package.json index d75847dc..382fa275 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.6.5", - "dotenv": "^16.3.1", + "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.18.3", "kafkajs": "^2.2.3", From 32dae23f313462c9627ce47619c42f55feb1ba1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 07:56:36 +0000 Subject: [PATCH 003/176] build(deps-dev): bump typescript from 5.3.3 to 5.4.2 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.3.3 to 5.4.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.3.3...v5.4.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4bb1491..5b9537c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.4", "ts-jest": "^29.1.2", - "typescript": "^5.3.3" + "typescript": "^5.4.2" }, "engines": { "node": ">=18.0.0", @@ -8100,9 +8100,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14237,9 +14237,9 @@ } }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 382fa275..92482439 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.4", "ts-jest": "^29.1.2", - "typescript": "^5.3.3" + "typescript": "^5.4.2" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From 1b7419c28fbf7e738773cbf0f3b378a72b69767f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 08:03:50 +0000 Subject: [PATCH 004/176] build(deps-dev): bump @types/node from 20.11.22 to 20.11.26 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.22 to 20.11.26. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b9537c5..7fc7e00a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.22", + "@types/node": "^20.11.26", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.22.tgz", - "integrity": "sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -9623,9 +9623,9 @@ "dev": true }, "@types/node": { - "version": "20.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.22.tgz", - "integrity": "sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 92482439..65e5c724 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.22", + "@types/node": "^20.11.26", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint": "^8.57.0", From bfe26d41e3a2895a81e30257b907e48ce37fe99c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 10:17:19 +0100 Subject: [PATCH 005/176] build(deps-dev): bump @typescript-eslint/parser from 7.1.1 to 7.2.0 (#292) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.1.1 to 7.2.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.2.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7fc7e00a..b295111b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.26", "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", + "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", - "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9791,42 +9791,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", - "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" } }, "@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9836,12 +9836,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index 65e5c724..b2130a98 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.26", "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", + "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From d5871784526ab384ee8b13bbb465da6bb691d730 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 14:16:13 +0100 Subject: [PATCH 006/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#293) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.1.1 to 7.2.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.2.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 234 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index b295111b..735bc84e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.26", - "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", - "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/type-utils": "7.1.1", - "@typescript-eslint/utils": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1728,17 +1728,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" }, "engines": { @@ -1753,12 +1753,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1938,13 +1938,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", - "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2023,17 +2023,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" }, "engines": { @@ -2048,12 +2048,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9695,16 +9695,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", - "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/type-utils": "7.1.1", - "@typescript-eslint/utils": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -9714,29 +9714,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" } }, "@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9746,27 +9746,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -9876,41 +9876,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", - "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" } }, "@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9920,27 +9920,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "requires": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index b2130a98..1b0ad73b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.26", - "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 3993a326dc789e0b18424ea95186f9f7d74c7c1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 14:23:29 +0100 Subject: [PATCH 007/176] build(deps): bump follow-redirects from 1.15.4 to 1.15.6 (#294) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 735bc84e..28359ca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4175,9 +4175,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -11475,9 +11475,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-each": { "version": "0.3.3", From 15351763350bd009de05ef7d1171df205a070bca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:29:22 +0100 Subject: [PATCH 008/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#296) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.2.0 to 7.3.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.3.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 258 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 130 insertions(+), 130 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28359ca2..288954cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.26", - "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1653,7 +1653,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1670,16 +1670,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1687,12 +1687,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1715,7 +1715,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1728,21 +1728,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1753,16 +1753,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1938,18 +1938,18 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1965,16 +1965,16 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1982,12 +1982,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2010,7 +2010,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2023,21 +2023,21 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2048,16 +2048,16 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -9695,16 +9695,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -9714,29 +9714,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" } }, "@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9746,27 +9746,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" } }, @@ -9876,41 +9876,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" } }, "@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9920,27 +9920,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index 1b0ad73b..58c2a43a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.26", - "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From e420c5a57a5ec222d2f38432da2e3666e435ab52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:45:56 +0100 Subject: [PATCH 009/176] build(deps-dev): bump @types/node from 20.11.26 to 20.11.29 (#297) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.26 to 20.11.29. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 288954cc..a5acf48d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.26", + "@types/node": "^20.11.29", "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", - "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", + "version": "20.11.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", + "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", "dependencies": { "undici-types": "~5.26.4" } @@ -9623,9 +9623,9 @@ "dev": true }, "@types/node": { - "version": "20.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", - "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", + "version": "20.11.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", + "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 58c2a43a..5296f299 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.26", + "@types/node": "^20.11.29", "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", From a4fb5a38cb99b1645f10719db7cbc0c930430981 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:51:38 +0100 Subject: [PATCH 010/176] build(deps-dev): bump @typescript-eslint/parser from 7.2.0 to 7.3.1 (#298) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.2.0 to 7.3.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.3.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 108 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5acf48d..038097f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.29", "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.2.0", + "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,19 +1794,19 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1822,16 +1822,16 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1839,12 +1839,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1867,7 +1867,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1880,16 +1880,16 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -9791,42 +9791,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" } }, "@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9836,12 +9836,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index 5296f299..848fa46a 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.29", "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.2.0", + "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From a60566e8af020c2b98946135d883b3589aa27e63 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Tue, 19 Mar 2024 09:21:13 +0100 Subject: [PATCH 011/176] feat: Integrate One Identity Manager Proposal Management (#287) --- .eslintrc | 5 +- package.json | 2 +- sample.env | 9 +- src/config/validateEnv.ts | 5 + src/index.ts | 8 +- src/models/Event.ts | 2 + ...neIdentityIntegrationQueueConsumer.spec.ts | 119 ++++++++ .../OneIdentityIntegrationQueueConsumer.ts | 55 ++++ .../oneIdentityIntegrationHandler.spec.ts | 200 ++++++++++++++ .../oneIdentityIntegrationHandler.ts | 137 +++++++++ .../oneidentity/utils/ESSOneIdentity.spec.ts | 259 ++++++++++++++++++ .../oneidentity/utils/ESSOneIdentity.ts | 159 +++++++++++ .../oneidentity/utils/OneIdentityApi.spec.ts | 101 +++++++ .../oneidentity/utils/OneIdentityApi.ts | 107 ++++++++ .../consumers/FolderCreationQueueConsumer.ts | 2 +- .../utils/collectUsersFromProposalMessage.ts | 10 + src/queue/consumers/utils/validateMessages.ts | 40 --- ...pec.ts => validateProposalMessage.spec.ts} | 2 +- .../utils/validateProposalMessage.ts | 2 +- src/queue/queueHandling.ts | 37 +-- 20 files changed, 1187 insertions(+), 74 deletions(-) create mode 100644 src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts create mode 100644 src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts create mode 100644 src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts create mode 100644 src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts create mode 100644 src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts create mode 100644 src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts create mode 100644 src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts create mode 100644 src/queue/consumers/oneidentity/utils/OneIdentityApi.ts create mode 100644 src/queue/consumers/utils/collectUsersFromProposalMessage.ts rename src/queue/consumers/utils/{validateMessages.spec.ts => validateProposalMessage.spec.ts} (91%) diff --git a/.eslintrc b/.eslintrc index e559f277..cccd3c67 100644 --- a/.eslintrc +++ b/.eslintrc @@ -50,10 +50,7 @@ } } ], - "quotes": [ - "error", - "single" - ], + "quotes": ["error", "single", { "avoidEscape": true }], "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/naming-convention": [ "error", diff --git a/package.json b/package.json index 848fa46a..018ab8b8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "start": "npm run fix-olm-dependency && tsc && node ./build/src/index.js", "start:kafka": "tsc && node ./build/src/kafkaProducerTesting/kafkaMockProducer.js", "test": "env NODE_ENV=test jest --config ./jest.unit.config.js --colors", - "debug": "ts-node-dev --inspect --respawn -T ./src/index.ts", + "debug": "ts-node-dev --inspect --respawn --exit-child --watch src --transpile-only src/index.ts", "fix-olm-dependency": "cp -r ./src/@matrix-org ./node_modules/", "build": "npm run fix-olm-dependency && rm -rf ./build && tsc", "lint": "npm run fix-olm-dependency && tsc --noEmit && eslint . --ext .js,.ts --quiet", diff --git a/sample.env b/sample.env index 9883bbc6..f1452eb7 100644 --- a/sample.env +++ b/sample.env @@ -39,10 +39,17 @@ ENABLE_SCICHAT_ROOM_CREATION=false ENABLE_NICOS_TO_SCICHAT_MESSAGES=false ENABLE_PROPOSAL_FOLDERS_CREATION=false ENABLE_MOODLE_FOLDERS_CREATION=false +ENABLE_ONE_IDENTITY_INTEGRATION=false USER_OFFICE_CORE_EXCHANGE_NAME=user_office_backend.fanout PROPOSAL_CREATION_QUEUE_NAME=connector.proposal_creation.queue CHATROOM_CREATION_QUEUE_NAME=consumer.chatroom_creation.queue FOLDER_CREATION_QUEUE_NAME=connector.proposals_folder_creation.queue MOODLE_EXCHANGE_NAME=moodle.folder-creation.fanout -MOODLE_FOLDER_CREATION_QUEUE_NAME=connector.moodle_folder_creation.queue \ No newline at end of file +MOODLE_FOLDER_CREATION_QUEUE_NAME=connector.moodle_folder_creation.queue +ONE_IDENTITY_INTEGRATION_QUEUE_NAME=connector.one_identity_integration.queue + +ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE="Science proposal" +ONE_IDENTITY_APP_SERVER_URL=https://iam-web01-dev.esss.lu.se/AppServerV9 +ONE_IDENTITY_API_USER= +ONE_IDENTITY_API_PASSWORD= \ No newline at end of file diff --git a/src/config/validateEnv.ts b/src/config/validateEnv.ts index 67855696..6c1635b2 100644 --- a/src/config/validateEnv.ts +++ b/src/config/validateEnv.ts @@ -23,11 +23,16 @@ function validateEnv() { ENABLE_NICOS_TO_SCICHAT_MESSAGES: bool({ default: false }), ENABLE_PROPOSAL_FOLDERS_CREATION: bool({ default: false }), ENABLE_MOODLE_FOLDERS_CREATION: bool({ default: false }), + ENABLE_ONE_IDENTITY_INTEGRATION: bool({ default: false }), PROPOSAL_CREATION_QUEUE_NAME: str({ default: undefined }), CHATROOM_CREATION_QUEUE_NAME: str({ default: undefined }), FOLDER_CREATION_QUEUE_NAME: str({ default: undefined }), MOODLE_EXCHANGE_NAME: str({ default: undefined }), MOODLE_FOLDER_CREATION_QUEUE_NAME: str({ default: undefined }), + ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE: str({ default: undefined }), + ONE_IDENTITY_APP_SERVER_URL: str({ default: undefined }), + ONE_IDENTITY_API_USER: str({ default: undefined }), + ONE_IDENTITY_API_PASSWORD: str({ default: undefined }), }); } diff --git a/src/index.ts b/src/index.ts index 2bea9251..22ac52f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,6 +26,7 @@ async function bootstrap() { nodeVersion: process.version, env: process.env.NODE_ENV, }); + const PORT = process.env.PORT || 4010; const app = express(); @@ -44,6 +45,9 @@ async function bootstrap() { const enableMoodleFoldersCreation = str2Bool( process.env.ENABLE_MOODLE_FOLDERS_CREATION as string ); + const enableOneIdentityIntegration = str2Bool( + process.env.ENABLE_ONE_IDENTITY_INTEGRATION as string + ); logger.logInfo('Services configuration', { SciCat_Proposal_Upsert: enableScicatProposalUpsert, @@ -51,6 +55,7 @@ async function bootstrap() { Proposal_Folders_Creation: enableProposalFoldersCreation, Nicos_to_Scichat_Messages: enableNicosToScichatMessages, Moodle_Folders_Creation: enableMoodleFoldersCreation, + One_Identity_Integration: enableOneIdentityIntegration, }); app.use(healthCheck()).use(readinessCheck()); @@ -67,7 +72,8 @@ async function bootstrap() { enableScicatProposalUpsert || enableScichatRoomCreation || enableProposalFoldersCreation || - enableMoodleFoldersCreation + enableMoodleFoldersCreation || + enableOneIdentityIntegration ) { startRabbitMQHandling(); } diff --git a/src/models/Event.ts b/src/models/Event.ts index e7d96120..5661f87d 100644 --- a/src/models/Event.ts +++ b/src/models/Event.ts @@ -2,4 +2,6 @@ export enum Event { PROPOSAL_STATUS_CHANGED_BY_WORKFLOW = 'PROPOSAL_STATUS_CHANGED_BY_WORKFLOW', PROPOSAL_STATUS_CHANGED_BY_USER = 'PROPOSAL_STATUS_CHANGED_BY_USER', PROPOSAL_STATUS_ACTION_EXECUTED = 'PROPOSAL_STATUS_ACTION_EXECUTED', + PROPOSAL_ACCEPTED = 'PROPOSAL_ACCEPTED', + PROPOSAL_UPDATED = 'PROPOSAL_UPDATED', } diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts new file mode 100644 index 00000000..7a8ab72a --- /dev/null +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts @@ -0,0 +1,119 @@ +jest.mock('@user-office-software/duo-logger'); +jest.mock('../QueueConsumer', () => ({ + QueueConsumer: jest.fn().mockImplementation(() => ({ + start: jest.fn(), + })), +})); +jest.mock('./consumerCallbacks/oneIdentityIntegrationHandler'); + +import { logger } from '@user-office-software/duo-logger'; +import { MessageBroker } from '@user-office-software/duo-message-broker'; +import { MessageProperties } from 'amqplib'; + +import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; +import { OneIdentityIntegrationQueueConsumer } from './OneIdentityIntegrationQueueConsumer'; +import { Event } from '../../../models/Event'; +import { ProposalMessageData } from '../../../models/ProposalMessage'; + +describe('OneIdentityIntegrationQueueConsumer', () => { + let consumer: OneIdentityIntegrationQueueConsumer; + + beforeEach(() => { + consumer = new OneIdentityIntegrationQueueConsumer({} as MessageBroker); + }); + + describe('onMessage', () => { + it('should not handle message if type is not PROPOSAL_ACCEPTED or PROPOSAL_UPDATED', async () => { + const message = {} as ProposalMessageData; + const type = Event.PROPOSAL_STATUS_ACTION_EXECUTED; + + const result = await consumer.onMessage( + type, + message, + {} as MessageProperties + ); + + expect(result).toBeUndefined(); + expect(logger.logInfo).not.toHaveBeenCalled(); + expect(logger.logException).not.toHaveBeenCalled(); + }); + + it('should not handle message if message is not valid ProposalMessageData', async () => { + const message = {} as ProposalMessageData; + const type = Event.PROPOSAL_ACCEPTED; + + await expect( + consumer.onMessage(type, message, {} as MessageProperties) + ).rejects.toThrow('Proposal title is missing'); + }); + + it('should call oneIdentityIntegrationHandler and log message handled', async () => { + const message = createProposalMessage({ + shortCode: 'shortCode', + proposerEmail: 'proposer-email', + memberEmails: [], + }); + const type = Event.PROPOSAL_ACCEPTED; + + await consumer.onMessage(type, message, {} as MessageProperties); + + expect(logger.logInfo).toHaveBeenNthCalledWith( + 1, + 'OneIdentityIntegrationQueueConsumer', + { + type, + message, + } + ); + expect(logger.logInfo).toHaveBeenNthCalledWith(2, 'Message handled', { + type, + message, + }); + expect(logger.logException).not.toHaveBeenCalled(); + }); + + it('should log exception and re-throw error if oneIdentityIntegrationHandler throws', async () => { + const message = createProposalMessage({ + shortCode: 'shortCode', + proposerEmail: 'proposer-email', + memberEmails: [], + }); + const type = Event.PROPOSAL_ACCEPTED; + const error = new Error('Error'); + + (oneIdentityIntegrationHandler as jest.Mock).mockRejectedValueOnce(error); + + await expect( + consumer.onMessage(type, message, {} as MessageProperties) + ).rejects.toThrow(error); + + expect(logger.logException).toHaveBeenCalledWith( + 'Error while handling proposal', + error, + { + type, + message, + } + ); + }); + }); + + function createProposalMessage({ + shortCode, + proposerEmail, + memberEmails, + }: { + shortCode: string; + proposerEmail: string; + memberEmails: string[]; + }): ProposalMessageData { + return { + title: 'title', + shortCode, + proposer: { email: proposerEmail, firstName: 'first', lastName: 'last' }, + members: memberEmails.map((email) => ({ email })), + abstract: 'abstract', + instrument: { id: 1, shortCode: 'instrument' }, + } as ProposalMessageData; + } +}); diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts new file mode 100644 index 00000000..5535c7b4 --- /dev/null +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -0,0 +1,55 @@ +import { logger } from '@user-office-software/duo-logger'; +import { ConsumerCallback } from '@user-office-software/duo-message-broker'; + +import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; +import { Event } from '../../../models/Event'; +import { QueueConsumer } from '../QueueConsumer'; +import { hasTriggeringType } from '../utils/hasTriggeringType'; +import { validateProposalMessage } from '../utils/validateProposalMessage'; + +const ONE_IDENTITY_INTEGRATION_QUEUE_NAME = + process.env.ONE_IDENTITY_INTEGRATION_QUEUE_NAME || ''; +const USER_OFFICE_CORE_EXCHANGE_NAME = + process.env.USER_OFFICE_CORE_EXCHANGE_NAME || ''; +const EVENTS_FOR_HANDLING = [Event.PROPOSAL_ACCEPTED, Event.PROPOSAL_UPDATED]; + +// Class for consuming messages from the ESS One Identity Integration Queue +export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { + getQueueName(): string { + return ONE_IDENTITY_INTEGRATION_QUEUE_NAME; + } + + getExchangeName(): string { + return USER_OFFICE_CORE_EXCHANGE_NAME; + } + + onMessage: ConsumerCallback = async (type, message) => { + if (!hasTriggeringType(type, EVENTS_FOR_HANDLING)) { + return; + } + + logger.logInfo('OneIdentityIntegrationQueueConsumer', { + type, + message, + }); + + try { + const proposalMessage = validateProposalMessage(message); + + await oneIdentityIntegrationHandler(proposalMessage, type as Event); + + logger.logInfo('Message handled', { + type, + message, + }); + } catch (error) { + logger.logException('Error while handling proposal', error, { + type, + message, + }); + + // Re-throw the error to make sure the message is not acknowledged + throw error; + } + }; +} diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts new file mode 100644 index 00000000..b83d35c3 --- /dev/null +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts @@ -0,0 +1,200 @@ +jest.mock('@user-office-software/duo-logger'); +jest.mock('../utils/ESSOneIdentity', () => ({ + ESSOneIdentity: jest.fn().mockImplementation(() => mockOneIdentity), +})); + +import { logger } from '@user-office-software/duo-logger'; + +import { oneIdentityIntegrationHandler } from './oneIdentityIntegrationHandler'; +import { Event } from '../../../../models/Event'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { + ESSOneIdentity, + PersonHasESETValues, + UID_ESet, +} from '../utils/ESSOneIdentity'; + +const mockOneIdentity: jest.Mocked> = { + login: jest.fn(), + logout: jest.fn(), + getProposal: jest.fn(), + getPerson: jest.fn(), + getPersons: jest.fn(), + createProposal: jest.fn(), + connectPersonToProposal: jest.fn(), + getProposalPersonConnections: jest.fn(), + removeConnectionBetweenPersonAndProposal: jest.fn(), +}; + +const setupMocks = (data: { + getProposal: UID_ESet | undefined; + getProposalPersonConnections?: PersonHasESETValues[]; +}) => { + mockOneIdentity.createProposal.mockResolvedValueOnce('proposal-UID_ESet'); + mockOneIdentity.getProposal.mockResolvedValueOnce(data.getProposal); + mockOneIdentity.getProposalPersonConnections.mockResolvedValueOnce( + data.getProposalPersonConnections ?? [] + ); + mockOneIdentity.getPersons.mockResolvedValueOnce([ + { + email: 'proposer@email', + uidPerson: 'proposer-uid', + }, + { + email: 'member@email', + uidPerson: 'member-uid', + }, + ]); +}; + +const proposalMessage = { + shortCode: 'shortCode', + proposer: { email: 'proposer@email' }, + members: [{ email: 'member@email' }], +} as ProposalMessageData; + +describe('oneIdentityIntegrationHandler', () => { + describe('PROPOSAL_ACCEPTED', () => { + it('should handle accepted proposal', async () => { + setupMocks({ + getProposal: undefined, + getProposalPersonConnections: [], + }); + + await oneIdentityIntegrationHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ); + + expect(mockOneIdentity.createProposal).toHaveBeenCalledWith( + proposalMessage + ); + expect(mockOneIdentity.getProposalPersonConnections).toHaveBeenCalledWith( + 'proposal-UID_ESet' + ); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledTimes(0); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenNthCalledWith( + 1, + 'proposal-UID_ESet', + 'proposer-uid' + ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenNthCalledWith( + 2, + 'proposal-UID_ESet', + 'member-uid' + ); + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: ['proposer-uid', 'member-uid'], + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + describe('when proposal already exists in One Identity (Retry logic)', () => { + it('should not create proposal but handle connections if proposal exists', async () => { + setupMocks({ + getProposal: 'proposal-UID_ESet', + getProposalPersonConnections: [ + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'proposer-uid', + }, + ], + }); + + await oneIdentityIntegrationHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ); + + expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes( + 1 + ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'member-uid' + ); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: ['proposer-uid', 'member-uid'], + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + }); + }); + + describe('PROPOSAL_UPDATED', () => { + it('should handle updated proposal', async () => { + setupMocks({ + getProposal: 'proposal-UID_ESet', + getProposalPersonConnections: [ + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'proposer-uid', + }, + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'old-member-uid', // this person should be removed, because it's not in the updated proposal + }, + ], + }); + + await oneIdentityIntegrationHandler( + proposalMessage, + Event.PROPOSAL_UPDATED + ); + + expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); + expect(mockOneIdentity.getProposalPersonConnections).toHaveBeenCalledWith( + 'proposal-UID_ESet' + ); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledTimes(1); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledWith('proposal-UID_ESet', 'old-member-uid'); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'member-uid' + ); + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: ['proposer-uid', 'member-uid'], + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should not handle proposal if there is no created proposal in One Identity', async () => { + setupMocks({ + getProposal: undefined, + }); + + await oneIdentityIntegrationHandler( + proposalMessage, + Event.PROPOSAL_UPDATED + ); + + expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); + expect( + mockOneIdentity.getProposalPersonConnections + ).not.toHaveBeenCalled(); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalled(); + expect(mockOneIdentity.connectPersonToProposal).not.toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith('Proposal in One Identity', { + uidESet: undefined, + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + }); +}); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts new file mode 100644 index 00000000..996be49f --- /dev/null +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts @@ -0,0 +1,137 @@ +import { logger } from '@user-office-software/duo-logger'; + +import { Event } from '../../../../models/Event'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { collectUsersFromProposalMessage } from '../../utils/collectUsersFromProposalMessage'; +import { + ESSOneIdentity, + PersonHasESETValues, + UID_ESet, + UID_Person, + UserPersonConnection, +} from '../utils/ESSOneIdentity'; + +export async function oneIdentityIntegrationHandler( + message: ProposalMessageData, + type: Event +): Promise { + // Create a new ESSOneIdentity instance and log in + const oneIdentity = new ESSOneIdentity(); + await oneIdentity.login(); + + try { + const uidESet = await getUIDESetFromOneIdentity(oneIdentity, message, type); + + if (uidESet) { + await handleConnectionsBetweenProposalAndPersons( + oneIdentity, + uidESet, + message + ); + } + } finally { + await oneIdentity.logout(); + } +} + +// Method to get UID_ESet from One Identity, create it if it does not exist +async function getUIDESetFromOneIdentity( + oneIdentity: ESSOneIdentity, + message: ProposalMessageData, + type: Event +): Promise { + let uidESet: UID_ESet | undefined = await oneIdentity.getProposal(message); + + logger.logInfo('Proposal in One Identity', { uidESet }); + + if (type === Event.PROPOSAL_UPDATED && !uidESet) { + // Proposal does not exist in One Identity + return; + } + + if (!uidESet) { + // Create proposal in One Identity if it does not exist + uidESet = await oneIdentity.createProposal(message); + + logger.logInfo('UID_ESet created', { uidESet }); + + if (!uidESet) { + throw new Error('Proposal creation failed in ESS One Identity'); + } + } + + return uidESet; +} + +async function handleConnectionsBetweenProposalAndPersons( + oneIdentity: ESSOneIdentity, + uidESet: UID_ESet, + message: ProposalMessageData +) { + const users = collectUsersFromProposalMessage(message); + + logger.logInfo('Users from proposal', { users }); + + // Get all users from One Identity + const userPersonConnections = await oneIdentity.getPersons(users); + const uidPersons = getUidPersons(userPersonConnections); + + logger.logInfo('Found persons in One Identity', { uidPersons }); + + // Get all connections between UID_ESet and UID_Person + const connections = await oneIdentity.getProposalPersonConnections(uidESet); + + await removeOldConnections(oneIdentity, connections, uidPersons); + await addNewConnections(oneIdentity, uidESet, connections, uidPersons); + + logger.logInfo('Connections updated', { uidESet, uidPersons }); +} + +// Method to get UID_Person from UserPersonConnection +function getUidPersons( + userPersonConnections: UserPersonConnection[] +): UID_Person[] { + return userPersonConnections + .filter( + (connection): connection is { email: string; uidPerson: UID_Person } => + connection.uidPerson !== undefined + ) + .map(({ uidPerson }) => uidPerson); +} + +async function addNewConnections( + oneIdentity: ESSOneIdentity, + uidESet: UID_ESet, + connections: PersonHasESETValues[], + uidPersons: UID_Person[] +): Promise { + const connectionsToAdd = uidPersons.filter( + (uidPerson) => + !connections.some((connection) => connection.UID_Person === uidPerson) + ); + + await Promise.all( + connectionsToAdd.map((uidPerson) => + oneIdentity.connectPersonToProposal(uidESet, uidPerson) + ) + ); +} + +async function removeOldConnections( + oneIdentity: ESSOneIdentity, + connections: PersonHasESETValues[], + uidPersons: UID_Person[] +): Promise { + const connectionsToRemove = connections.filter( + (connection) => !uidPersons.includes(connection.UID_Person) + ); + + await Promise.all( + connectionsToRemove.map((connection) => + oneIdentity.removeConnectionBetweenPersonAndProposal( + connection.UID_ESet, + connection.UID_Person + ) + ) + ); +} diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts new file mode 100644 index 00000000..dd5fc19b --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts @@ -0,0 +1,259 @@ +jest.mock('./OneIdentityApi', () => ({ + OneIdentityApi: jest.fn().mockImplementation(() => mockOneIdentityApi), +})); +jest.mock('process', () => ({ + env: { + ONE_IDENTITY_API_USER: 'API_USER', + ONE_IDENTITY_API_PASSWORD: 'API_PASSWORD', + ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE: 'PROPOSAL_IDENT_ESET_TYPE', + }, +})); + +import { ESSOneIdentity } from './ESSOneIdentity'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { ProposalUser } from '../../scicat/scicatProposal/dto'; + +const mockOneIdentityApi = { + login: jest.fn(), + logout: jest.fn(), + createEntity: jest.fn(), + getEntities: jest.fn(), + deleteEntity: jest.fn(), +}; + +describe('ESSOneIdentity', () => { + let essOneIdentity: ESSOneIdentity; + + beforeEach(() => { + essOneIdentity = new ESSOneIdentity(); + }); + + describe('login', () => { + it('should login', async () => { + await essOneIdentity.login(); + expect(mockOneIdentityApi.login).toHaveBeenCalledWith( + 'API_USER', + 'API_PASSWORD' + ); + }); + }); + + describe('logout', () => { + it('should logout', async () => { + await essOneIdentity.logout(); + expect(mockOneIdentityApi.logout).toHaveBeenCalled(); + }); + }); + + describe('createProposal', () => { + it('should create proposal', async () => { + const proposalMessage = { + shortCode: 'some-short-code', + } as ProposalMessageData; + + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + UID_ESetType: 'eset-type-uid', + }, + }, + ]); + + mockOneIdentityApi.createEntity.mockResolvedValueOnce({ + uid: 'created-uid', + }); + + const result = await essOneIdentity.createProposal(proposalMessage); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'EsetType', + "Ident_ESetType='PROPOSAL_IDENT_ESET_TYPE'" + ); + expect(mockOneIdentityApi.createEntity).toHaveBeenCalledWith('ESET', { + DisplayName: 'some-short-code', + Ident_ESet: 'some-short-code', + UID_ESetType: 'eset-type-uid', + }); + expect(result).toBe('created-uid'); + }); + }); + + describe('getProposal', () => { + it('should get proposal', async () => { + const proposalMessage = { + shortCode: 'some-short-code', + } as ProposalMessageData; + + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + UID_ESet: 'proposal-uid', + }, + }, + ]); + + const result = await essOneIdentity.getProposal(proposalMessage); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'ESET', + "Ident_ESet='some-short-code'" + ); + expect(result).toBe('proposal-uid'); + }); + }); + + describe('getPerson', () => { + it('should get a person', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + UID_Person: 'person-uid', + }, + }, + ]); + + const result = await essOneIdentity.getPerson({ + email: 'foo@email', + }); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'Person', + "ContactEmail='foo@email'" + ); + expect(result).toEqual({ UID_Person: 'person-uid' }); + }); + + // Currently, the ContactEmail field is not unique in the 1IM.Person table. + // This means that it is possible to have multiple persons with the same email. + it('should return the first person if multiple persons are found', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + UID_Person: 'person-1-uid', + }, + }, + { + values: { + UID_Person: 'person-2-uid', + }, + }, + ]); + + const result = await essOneIdentity.getPerson({ + email: 'foo@email', + }); + + expect(result).toEqual({ UID_Person: 'person-1-uid' }); + }); + }); + + describe('getPersons', () => { + it('should get person records for multiple users, undefined if not found', async () => { + mockOneIdentityApi.getEntities.mockImplementation((table, filter) => { + if (table === 'Person' && filter === "ContactEmail='unknown-email'") + return Promise.resolve([]); + else + return Promise.resolve([ + { + values: { + UID_Person: 'known-person-uid', + }, + }, + ]); + }); + + const result = await essOneIdentity.getPersons([ + { + email: 'unknown-email', + } as ProposalUser, + { + email: 'known-email', + } as ProposalUser, + ]); + + expect(result).toEqual([ + { + email: 'unknown-email', + uidPerson: undefined, + }, + { + email: 'known-email', + uidPerson: 'known-person-uid', + }, + ]); + }); + }); + + describe('connectPersonToProposal', () => { + it('should connect person to proposal', async () => { + mockOneIdentityApi.createEntity.mockResolvedValueOnce({ + uid: 'created-uid', + }); + + const result = await essOneIdentity.connectPersonToProposal( + 'proposal-uid', + 'person-uid' + ); + + expect(mockOneIdentityApi.createEntity).toHaveBeenCalledWith( + 'PersonHasESET', + { + UID_ESet: 'proposal-uid', + UID_Person: 'person-uid', + } + ); + expect(result).toBe('created-uid'); + }); + }); + + describe('removeConnectionBetweenPersonAndProposal', () => { + it('should remove connection between person and proposal', async () => { + await essOneIdentity.removeConnectionBetweenPersonAndProposal( + 'proposal-uid', + 'person-uid' + ); + + expect(mockOneIdentityApi.deleteEntity).toHaveBeenCalledWith( + 'PersonHasESET', + 'proposal-uid;person-uid' + ); + }); + }); + + describe('getProposalPersonConnections', () => { + it('should get proposal person connections', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + UID_ESet: 'proposal-uid', + UID_Person: 'person-1-uid', + }, + }, + { + values: { + UID_ESet: 'proposal-uid', + UID_Person: 'person-2-uid', + }, + }, + ]); + + const result = + await essOneIdentity.getProposalPersonConnections('proposal-uid'); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'PersonHasESET', + "UID_ESet='proposal-uid'" + ); + expect(result).toEqual([ + { + UID_ESet: 'proposal-uid', + UID_Person: 'person-1-uid', + }, + { + UID_ESet: 'proposal-uid', + UID_Person: 'person-2-uid', + }, + ]); + }); + }); +}); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts new file mode 100644 index 00000000..f2d8c684 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts @@ -0,0 +1,159 @@ +import { env } from 'process'; + +import { OneIdentityApi } from './OneIdentityApi'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { ProposalUser } from '../../scicat/scicatProposal/dto'; + +type UID_ESetType = string; +export type UID_Person = string; +export type UID_ESet = string; + +interface EsetValues { + UID_ESet: UID_ESet; + UID_ESetType: UID_ESetType; + Ident_ESet: string; + DisplayName: string; +} + +interface EsetTypeValues { + UID_ESetType: UID_ESetType; +} + +interface PersonValues { + UID_Person: UID_Person; +} + +export interface PersonHasESETValues { + UID_Person: UID_Person; + UID_ESet: UID_ESet; +} + +export interface UserPersonConnection { + email: string; + uidPerson: UID_Person | undefined; +} + +const SERVER_URL = env.ONE_IDENTITY_APP_SERVER_URL || ''; +const API_USER = env.ONE_IDENTITY_API_USER || ''; +const API_PASSWORD = env.ONE_IDENTITY_API_PASSWORD || ''; +const PROPOSAL_IDENT_ESET_TYPE = + env.ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE || ''; + +// ESSOneIdentity is a class that provides methods to interact with ESS One Identity Manager +// It is used to create, update and delete proposals and users in ESS One Identity Manager +export class ESSOneIdentity { + private oneIdentityApi: OneIdentityApi; + + constructor() { + this.oneIdentityApi = new OneIdentityApi(SERVER_URL); + } + + public async login() { + await this.oneIdentityApi.login(API_USER, API_PASSWORD); + } + + public async logout() { + await this.oneIdentityApi.logout(); + } + + public async createProposal( + proposalMessage: ProposalMessageData + ): Promise { + // get "Science Proposal" UID_ESetType from ESS One Identity + const entities = await this.oneIdentityApi.getEntities( + 'EsetType', + `Ident_ESetType='${PROPOSAL_IDENT_ESET_TYPE}'` + ); + + const uidESetType = entities[0]?.values?.UID_ESetType; + + if (!uidESetType) { + throw new Error('UID_ESetType not found: ' + PROPOSAL_IDENT_ESET_TYPE); + } + + // create proposal in ESS One Identity + const esetResponse = await this.oneIdentityApi.createEntity< + Omit + >('ESET', { + UID_ESetType: uidESetType, + Ident_ESet: proposalMessage.shortCode, + DisplayName: proposalMessage.shortCode, + }); + + return esetResponse.uid; + } + + public async getProposal( + proposalMessage: ProposalMessageData + ): Promise { + const entities = await this.oneIdentityApi.getEntities( + 'ESET', + `Ident_ESet='${proposalMessage.shortCode}'` + ); + + return entities[0]?.values?.UID_ESet; + } + + public async getPerson( + user: Pick + ): Promise { + const entities = await this.oneIdentityApi.getEntities( + 'Person', + `ContactEmail='${user.email}'` + ); + + // In theory there should be only one person with the same email, but the 1IM.Person table has no unique constraint on ContactEmail. + // We can't control this, so we just take the first one. + return entities[0]?.values; + } + + public async getPersons( + users: ProposalUser[] + ): Promise { + return await Promise.all( + users + .filter((user): user is ProposalUser => user !== undefined) + .map(async (user) => { + const uidPerson = (await this.getPerson(user))?.UID_Person; + + return { email: user.email, uidPerson }; + }) + ); + } + + public async connectPersonToProposal( + uidEset: UID_ESet, + uidPerson: UID_Person + ): Promise { + const { uid } = await this.oneIdentityApi.createEntity( + 'PersonHasESET', + { + UID_ESet: uidEset, + UID_Person: uidPerson, + } + ); + + return uid; + } + + public async removeConnectionBetweenPersonAndProposal( + uidEset: UID_ESet, + uidPerson: UID_Person + ) { + await this.oneIdentityApi.deleteEntity( + 'PersonHasESET', + `${uidEset};${uidPerson}` + ); + } + + public async getProposalPersonConnections( + uidEset: UID_ESet + ): Promise { + const entities = await this.oneIdentityApi.getEntities( + 'PersonHasESET', + `UID_ESet='${uidEset}'` + ); + + return entities.map(({ values }) => values); + } +} diff --git a/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts b/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts new file mode 100644 index 00000000..6ede6de9 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts @@ -0,0 +1,101 @@ +jest.mock('axios'); + +import axios from 'axios'; + +import { OneIdentityApi } from './OneIdentityApi'; + +describe('OneIdentityApi', () => { + let api: OneIdentityApi; + + beforeEach(() => { + (axios.create as jest.Mock).mockReturnValue(axios); + api = new OneIdentityApi('http://localhost'); + }); + + describe('login', () => { + it('should login successfully', async () => { + (axios.post as jest.Mock).mockResolvedValueOnce({ + headers: { 'set-cookie': 'test-cookie' }, + }); + + await api.login('user', 'password'); + + expect(axios.post).toHaveBeenCalledWith( + '/auth/apphost', + { + module: 'DialogUser', + props: [ + { + name: 'User', + type: 'Edit', + display: 'User', + value: 'user', + isMandatory: true, + }, + { + name: 'Password', + type: 'Password', + display: 'Password', + value: 'password', + isMandatory: false, + }, + ], + config: [], + }, + { + baseURL: 'http://localhost', + } + ); + }); + }); + + describe('logout', () => { + it('should logout successfully', async () => { + (axios.post as jest.Mock).mockResolvedValueOnce({}); + + await api.logout(); + + expect(axios.post).toHaveBeenCalledWith('/auth/logout', undefined, { + baseURL: 'http://localhost', + }); + }); + }); + + describe('createEntity', () => { + it('should create entity successfully', async () => { + const mockEntity = { id: 1, name: 'test' }; + (axios.post as jest.Mock).mockResolvedValueOnce({ data: mockEntity }); + + const result = await api.createEntity('testTable', mockEntity); + + expect(axios.post).toHaveBeenCalledWith('/entity/testTable', { + values: mockEntity, + }); + expect(result).toEqual(mockEntity); + }); + }); + + describe('getEntities', () => { + it('should get entities successfully', async () => { + const mockEntities = [{ id: 1, name: 'test' }]; + (axios.get as jest.Mock).mockResolvedValueOnce({ data: mockEntities }); + + const result = await api.getEntities('testTable', 'id=1'); + + expect(axios.get).toHaveBeenCalledWith('/entities/testTable', { + params: { where: 'id=1' }, + }); + expect(result).toEqual(mockEntities); + }); + }); + + describe('deleteEntity', () => { + it('should delete entity successfully', async () => { + (axios.delete as jest.Mock).mockResolvedValueOnce({}); + + await api.deleteEntity('testTable', '1'); + + expect(axios.delete).toHaveBeenCalledWith('/entity/testTable/1'); + }); + }); +}); diff --git a/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts b/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts new file mode 100644 index 00000000..99e9e015 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts @@ -0,0 +1,107 @@ +import axios, { AxiosInstance, AxiosResponse } from 'axios'; + +interface CreateEntityResult { + uid?: string; + uri?: string; +} + +interface EntityValues { + values: T; +} + +// This class is a basic wrapper around the OneIdentity API +export class OneIdentityApi { + private baseUrl: string; + private apiUrl: string; + private axiosInstance: AxiosInstance; + + constructor(url: string) { + this.baseUrl = url; + this.apiUrl = `${this.baseUrl}/api`; + this.axiosInstance = this.createAxiosInstance(); + } + + private createAxiosInstance(): AxiosInstance { + return axios.create({ + baseURL: this.apiUrl, + withCredentials: true, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + }, + }); + } + + public async login(user: string, password: string): Promise { + const res = await this.axiosInstance.post( + '/auth/apphost', + { + module: 'DialogUser', + props: [ + { + name: 'User', + type: 'Edit', + display: 'User', + value: user, + isMandatory: true, + }, + { + name: 'Password', + type: 'Password', + display: 'Password', + value: password, + isMandatory: false, + }, + ], + config: [], + }, + { + baseURL: this.baseUrl, + } + ); + + if (!res.headers['set-cookie']) throw new Error('No cookie set'); + + // We need to set the cookie for the following requests + // It contains the session information + this.axiosInstance.defaults.headers.Cookie = res.headers['set-cookie']; + } + + public logout(): Promise { + return this.axiosInstance.post('/auth/logout', undefined, { + baseURL: this.baseUrl, + }); + } + + public async createEntity( + table: string, + values: T + ): Promise { + const { data } = await this.axiosInstance.post< + T, + AxiosResponse + >(`/entity/${table}`, { + values, + }); + + return data; + } + + public async getEntities( + table: string, + where: string + ): Promise[]> { + const { data } = await this.axiosInstance.get< + T, + AxiosResponse[]> + >(`/entities/${table}`, { + params: { where }, + }); + + return data; + } + + public deleteEntity(table: string, uid: string): Promise { + return this.axiosInstance.delete(`/entity/${table}/${uid}`); + } +} diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts index 1b4af1d9..bd87dd5e 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts @@ -5,7 +5,7 @@ import { ProposalMessageData } from '../../../../../models/ProposalMessage'; import { QueueConsumer } from '../../../QueueConsumer'; import { hasTriggeringStatus } from '../../../utils/hasTriggeringStatus'; import { hasTriggeringType } from '../../../utils/hasTriggeringType'; -import { validateProposalMessage } from '../../../utils/validateMessages'; +import { validateProposalMessage } from '../../../utils/validateProposalMessage'; import { proposalFoldersCreation } from '../consumerCallbacks/proposalFoldersCreation'; const EVENT_TYPES = [ diff --git a/src/queue/consumers/utils/collectUsersFromProposalMessage.ts b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts new file mode 100644 index 00000000..a711dab1 --- /dev/null +++ b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts @@ -0,0 +1,10 @@ +import { ProposalMessageData } from '../../../models/ProposalMessage'; +import { ProposalUser } from '../scicat/scicatProposal/dto'; + +export function collectUsersFromProposalMessage( + proposalMessage: ProposalMessageData +): ProposalUser[] { + return [...proposalMessage.members, proposalMessage.proposer].filter( + (user): user is ProposalUser => user !== undefined + ); +} diff --git a/src/queue/consumers/utils/validateMessages.ts b/src/queue/consumers/utils/validateMessages.ts index 84f2415b..effc7a0b 100644 --- a/src/queue/consumers/utils/validateMessages.ts +++ b/src/queue/consumers/utils/validateMessages.ts @@ -1,44 +1,4 @@ import { MoodleMessageData } from '../../../models/MoodleMessage'; -import { ProposalMessageData } from '../../../models/ProposalMessage'; -export type ValidProposalMessageData = Required; - -export function validateProposalMessage( - proposalMessage: ProposalMessageData -): ValidProposalMessageData { - if (!proposalMessage.title) { - throw new Error('Proposal title is missing'); - } - - if (!proposalMessage.proposer) { - throw new Error('Proposal proposer is missing'); - } - - if (!proposalMessage.proposer.firstName) { - throw new Error('Proposal proposer first name is missing'); - } - - if (!proposalMessage.proposer.lastName) { - throw new Error('Proposal proposer last name is missing'); - } - - if (!proposalMessage.proposer.email) { - throw new Error('Proposal proposer email is missing'); - } - - if (!proposalMessage.abstract) { - throw new Error('Proposal abstract is missing'); - } - - if (!proposalMessage.shortCode) { - throw new Error('Proposal short code is missing'); - } - - if (!proposalMessage.instrument) { - throw new Error('Instrument is missing'); - } - - return proposalMessage as ValidProposalMessageData; -} export function validateMoodleMessage( moodleMessage: MoodleMessageData diff --git a/src/queue/consumers/utils/validateMessages.spec.ts b/src/queue/consumers/utils/validateProposalMessage.spec.ts similarity index 91% rename from src/queue/consumers/utils/validateMessages.spec.ts rename to src/queue/consumers/utils/validateProposalMessage.spec.ts index d9608e96..912e4fc8 100644 --- a/src/queue/consumers/utils/validateMessages.spec.ts +++ b/src/queue/consumers/utils/validateProposalMessage.spec.ts @@ -1,4 +1,4 @@ -import { validateProposalMessage } from './validateMessages'; +import { validateProposalMessage } from './validateProposalMessage'; describe('Validate messages', () => { it('should throw error when message is not valid', () => { diff --git a/src/queue/consumers/utils/validateProposalMessage.ts b/src/queue/consumers/utils/validateProposalMessage.ts index f3c4d58f..f3dd3e7a 100644 --- a/src/queue/consumers/utils/validateProposalMessage.ts +++ b/src/queue/consumers/utils/validateProposalMessage.ts @@ -2,7 +2,7 @@ import { ProposalMessageData } from '../../../models/ProposalMessage'; export type ValidProposalMessageData = Required; export function validateProposalMessage( - proposalMessage: ProposalMessageData + proposalMessage: any ): ValidProposalMessageData { if (!proposalMessage.title) { throw new Error('Proposal title is missing'); diff --git a/src/queue/queueHandling.ts b/src/queue/queueHandling.ts index f672239e..1f79839e 100644 --- a/src/queue/queueHandling.ts +++ b/src/queue/queueHandling.ts @@ -1,6 +1,7 @@ import { container } from 'tsyringe'; import { MoodleFolderCreationQueueConsumer } from './consumers/moodle/MoodleFolderCreationQueueConsumer'; +import { OneIdentityIntegrationQueueConsumer } from './consumers/oneidentity/OneIdentityIntegrationQueueConsumer'; import { ChatroomCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer'; import { FolderCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer'; import { ProposalCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer'; @@ -8,37 +9,25 @@ import { GetMessageBroker } from './messageBroker/getMessageBroker'; import { Tokens } from '../config/Tokens'; import { str2Bool } from '../config/utils'; -const ENABLE_SCICAT_PROPOSAL_UPSERT = str2Bool( - process.env.ENABLE_SCICAT_PROPOSAL_UPSERT as string -); -const ENABLE_SCICHAT_ROOM_CREATION = str2Bool( - process.env.ENABLE_SCICHAT_ROOM_CREATION as string -); -const ENABLE_PROPOSAL_FOLDERS_CREATION = str2Bool( - process.env.ENABLE_PROPOSAL_FOLDERS_CREATION as string -); -const ENABLE_MOODLE_FOLDERS_CREATION = str2Bool( - process.env.ENABLE_MOODLE_FOLDERS_CREATION as string -); - const getMessageBroker: GetMessageBroker = container.resolve( Tokens.ProvideMessageBroker ); +const queueConsumers = { + ENABLE_SCICAT_PROPOSAL_UPSERT: ProposalCreationQueueConsumer, + ENABLE_SCICHAT_ROOM_CREATION: ChatroomCreationQueueConsumer, + ENABLE_PROPOSAL_FOLDERS_CREATION: FolderCreationQueueConsumer, + ENABLE_MOODLE_FOLDERS_CREATION: MoodleFolderCreationQueueConsumer, + ENABLE_ONE_IDENTITY_INTEGRATION: OneIdentityIntegrationQueueConsumer, +}; + const startQueueHandling = async (): Promise => { const messageBroker = await getMessageBroker(); - if (ENABLE_SCICAT_PROPOSAL_UPSERT) { - new ProposalCreationQueueConsumer(messageBroker); - } - if (ENABLE_SCICHAT_ROOM_CREATION) { - new ChatroomCreationQueueConsumer(messageBroker); - } - if (ENABLE_PROPOSAL_FOLDERS_CREATION) { - new FolderCreationQueueConsumer(messageBroker); - } - if (ENABLE_MOODLE_FOLDERS_CREATION) { - new MoodleFolderCreationQueueConsumer(messageBroker); + for (const [envVar, QueueConsumer] of Object.entries(queueConsumers)) { + if (str2Bool(process.env[envVar] as string)) { + new QueueConsumer(messageBroker); + } } }; From 88f79e56c3986881bdeef390fa9b1d413fcedc9e Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 19 Mar 2024 15:01:53 +0100 Subject: [PATCH 012/176] BREAKING CHANGE: validate and support multiple instruments per proposal in the messages (#266) * BREAKING CHANGE: validate and support multiple instruments per proposal in the messages * fix failing test * organize different message validations in their own files --- src/models/ProposalMessage.ts | 3 +- .../MoodleFolderCreationQueueConsumer.spec.ts | 4 +- .../MoodleFolderCreationQueueConsumer.ts | 2 +- .../utils/validateMoodleMessage.ts} | 20 +++-- ...neIdentityIntegrationQueueConsumer.spec.ts | 2 +- .../proposalFoldersCreation.spec.ts | 8 +- .../proposalFoldersCreation.ts | 83 ++++++++++--------- .../ChatroomCreationQueueConsumer.ts | 5 +- .../consumers/FolderCreationQueueConsumer.ts | 5 +- .../ProposalCreationQueueConsumer.ts | 5 +- .../utils/validateProposalMessage.spec.ts | 2 +- .../utils/validateProposalMessage.ts | 19 ++++- 12 files changed, 87 insertions(+), 71 deletions(-) rename src/queue/consumers/{utils/validateMessages.ts => moodle/utils/validateMoodleMessage.ts} (83%) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index b4d42318..702ecccd 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -3,6 +3,7 @@ import { ProposalUser } from './../queue/consumers/scicat/scicatProposal/dto'; export type Instrument = { id: number; shortCode: string; + allocatedTime: number; }; export type ProposalMessageData = { @@ -13,5 +14,5 @@ export type ProposalMessageData = { newStatus?: string; members: ProposalUser[]; proposer?: ProposalUser; - instrument?: Instrument; + instruments?: Instrument[]; }; diff --git a/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.spec.ts b/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.spec.ts index 66a88d3b..c1cd9c2a 100644 --- a/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.spec.ts +++ b/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.spec.ts @@ -1,4 +1,4 @@ -jest.mock('../utils/validateMessages'); +jest.mock('./utils/validateMoodleMessage'); jest.mock('../QueueConsumer', () => ({ QueueConsumer: jest.fn().mockImplementation(() => ({ start: jest.fn(), @@ -10,7 +10,7 @@ import { logger } from '@user-office-software/duo-logger'; import { MessageBroker } from '@user-office-software/duo-message-broker'; import { MoodleFolderCreationQueueConsumer } from './MoodleFolderCreationQueueConsumer'; -import { validateMoodleMessage } from '../utils/validateMessages'; +import { validateMoodleMessage } from './utils/validateMoodleMessage'; describe('MoodleFolderCreationQueueConsumer', () => { let mockLoggerLogError: jest.SpyInstance; diff --git a/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.ts b/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.ts index e04504cd..a9c6abac 100644 --- a/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.ts +++ b/src/queue/consumers/moodle/MoodleFolderCreationQueueConsumer.ts @@ -1,10 +1,10 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; +import { validateMoodleMessage } from './utils/validateMoodleMessage'; import { MoodleMessageData } from '../../../models/MoodleMessage'; import { genericFoldersCreation } from '../generic/genericFoldersCreationCallBack'; import { QueueConsumer } from '../QueueConsumer'; -import { validateMoodleMessage } from '../utils/validateMessages'; const MOODLE_FOLDERS_CREATION_COMMAND = process.env.MOODLE_FOLDERS_CREATION_COMMAND; diff --git a/src/queue/consumers/utils/validateMessages.ts b/src/queue/consumers/moodle/utils/validateMoodleMessage.ts similarity index 83% rename from src/queue/consumers/utils/validateMessages.ts rename to src/queue/consumers/moodle/utils/validateMoodleMessage.ts index effc7a0b..b21fb9d9 100644 --- a/src/queue/consumers/utils/validateMessages.ts +++ b/src/queue/consumers/moodle/utils/validateMoodleMessage.ts @@ -1,4 +1,14 @@ -import { MoodleMessageData } from '../../../models/MoodleMessage'; +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { MoodleMessageData } from '../../../../models/MoodleMessage'; + +// NOTE: +// context can be: instrument_shortCode, course_id +// item can be: (proposal_shortCode, user_id) +export type ValidMoodleMessageData = { + enrolled_user_id: string; + course_short_name: string; +}; export function validateMoodleMessage( moodleMessage: MoodleMessageData @@ -16,11 +26,3 @@ export function validateMoodleMessage( course_short_name: moodleMessage.course_short_name, }; } - -// NOTE: -// context can be: instrument_shortCode, course_id -// item can be: (proposal_shortCode, user_id) -export type ValidMoodleMessageData = { - enrolled_user_id: string; - course_short_name: string; -}; diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts index 7a8ab72a..63999ee1 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts @@ -113,7 +113,7 @@ describe('OneIdentityIntegrationQueueConsumer', () => { proposer: { email: proposerEmail, firstName: 'first', lastName: 'last' }, members: memberEmails.map((email) => ({ email })), abstract: 'abstract', - instrument: { id: 1, shortCode: 'instrument' }, + instruments: [{ id: 1, shortCode: 'instrument', allocatedTime: 1 }], } as ProposalMessageData; } }); diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts index 6bbe2113..3ba795db 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts @@ -16,9 +16,11 @@ import { ValidProposalMessageData } from '../../../utils/validateProposalMessage describe('proposalFoldersCreation', () => { const proposalMessage = { shortCode: 'shortCode', - instrument: { - shortCode: 'shortCode', - }, + instruments: [ + { + shortCode: 'shortCode', + }, + ], proposer: { email: 'test.proposer@email.com', }, diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts index 2f5eeb42..cdf09bf3 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts @@ -12,51 +12,56 @@ const proposalFoldersCreation = async ( const proposalId = proposalMessage.shortCode; const group = proposalMessage.shortCode; const year = new Date().getFullYear().toString(); - const instrument = proposalMessage.instrument.shortCode.toLowerCase(); const proposerEmail = proposalMessage.proposer.email; const membersEmails = proposalMessage.members.map((m) => m.email).join(' '); - logger.logInfo('Preparing year, instrument and proposal', { - proposalId: proposalId, - year: year, - instrument: instrument, - group: group, - proposerEmail: proposerEmail, - membersEmails: membersEmails, - }); - - // update command - const command = (env.PROPOSAL_FOLDERS_CREATION_COMMAND! as string) - .replace(//, instrument) - .replace(//, year) - .replace(//, proposalId) - .replace(//, group) - .replace(//, proposerEmail) - .replace(//, membersEmails); - logger.logInfo('Command to be run', { command: command }); - - // run command - exec(command, (error, stdout, stderr) => { - if (error) { - logger.logError('Unable to create folders with error', { - command: command, - errorMessage: error.message, - }); + const instruments = proposalMessage.instruments.map((instrument) => + instrument.shortCode.toLowerCase() + ); + + for (const instrument of instruments) { + logger.logInfo('Preparing year, instrument and proposal', { + proposalId: proposalId, + year: year, + instrument: instrument, + group: group, + proposerEmail: proposerEmail, + membersEmails: membersEmails, + }); - return; - } - if (stderr) { - logger.logError('Unable to create folders with stderr', { + // update command + const command = (env.PROPOSAL_FOLDERS_CREATION_COMMAND! as string) + .replace(//, instrument) + .replace(//, year) + .replace(//, proposalId) + .replace(//, group) + .replace(//, proposerEmail) + .replace(//, membersEmails); + logger.logInfo('Command to be run', { command: command }); + + // run command + exec(command, (error, stdout, stderr) => { + if (error) { + logger.logError('Unable to create folders with error', { + command: command, + errorMessage: error.message, + }); + + return; + } + if (stderr) { + logger.logError('Unable to create folders with stderr', { + command: command, + stderr: stderr, + }); + + return; + } + logger.logInfo('Proposal folder creation successful', { command: command, - stderr: stderr, + output: stdout, }); - - return; - } - logger.logInfo('Proposal folder creation successful', { - command: command, - output: stdout, }); - }); + } }; export { proposalFoldersCreation }; diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts index 25d13f01..1a2a58ad 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts @@ -1,7 +1,6 @@ import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { Event } from '../../../../../models/Event'; -import { ProposalMessageData } from '../../../../../models/ProposalMessage'; import { QueueConsumer } from '../../../QueueConsumer'; import { hasTriggeringStatus } from '../../../utils/hasTriggeringStatus'; import { hasTriggeringType } from '../../../utils/hasTriggeringType'; @@ -38,9 +37,7 @@ export class ChatroomCreationQueueConsumer extends QueueConsumer { return; } - const proposalMessage = validateProposalMessage( - message as ProposalMessageData - ); + const proposalMessage = validateProposalMessage(message); createChatroom(proposalMessage); }; diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts index bd87dd5e..e734aa10 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts @@ -1,7 +1,6 @@ import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { Event } from '../../../../../models/Event'; -import { ProposalMessageData } from '../../../../../models/ProposalMessage'; import { QueueConsumer } from '../../../QueueConsumer'; import { hasTriggeringStatus } from '../../../utils/hasTriggeringStatus'; import { hasTriggeringType } from '../../../utils/hasTriggeringType'; @@ -39,9 +38,7 @@ export class FolderCreationQueueConsumer extends QueueConsumer { return; } - const proposalMessage = validateProposalMessage( - message as ProposalMessageData - ); + const proposalMessage = validateProposalMessage(message); proposalFoldersCreation(proposalMessage); }; diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts index bf4c849a..f3862bb2 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts @@ -1,7 +1,6 @@ import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { Event } from '../../../../../models/Event'; -import { ProposalMessageData } from '../../../../../models/ProposalMessage'; import { QueueConsumer } from '../../../QueueConsumer'; import { hasTriggeringStatus } from '../../../utils/hasTriggeringStatus'; import { hasTriggeringType } from '../../../utils/hasTriggeringType'; @@ -38,9 +37,7 @@ export class ProposalCreationQueueConsumer extends QueueConsumer { return; } - const proposalMessage = validateProposalMessage( - message as ProposalMessageData - ); + const proposalMessage = validateProposalMessage(message); upsertProposalInScicat(proposalMessage); }; diff --git a/src/queue/consumers/utils/validateProposalMessage.spec.ts b/src/queue/consumers/utils/validateProposalMessage.spec.ts index 912e4fc8..0606ac9e 100644 --- a/src/queue/consumers/utils/validateProposalMessage.spec.ts +++ b/src/queue/consumers/utils/validateProposalMessage.spec.ts @@ -15,7 +15,7 @@ describe('Validate messages', () => { members: [], proposalPk: 1, shortCode: '123123', - instrument: { id: 1, shortCode: 'TEST' }, + instruments: [{ id: 1, shortCode: 'TEST', allocatedTime: 1 }], newStatus: 'REVIEW', proposer: { id: 1, diff --git a/src/queue/consumers/utils/validateProposalMessage.ts b/src/queue/consumers/utils/validateProposalMessage.ts index f3dd3e7a..e4d563c1 100644 --- a/src/queue/consumers/utils/validateProposalMessage.ts +++ b/src/queue/consumers/utils/validateProposalMessage.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { ProposalMessageData } from '../../../models/ProposalMessage'; export type ValidProposalMessageData = Required; @@ -32,9 +33,23 @@ export function validateProposalMessage( throw new Error('Proposal short code is missing'); } - if (!proposalMessage.instrument) { - throw new Error('Instrument is missing'); + if (!proposalMessage.instruments.length) { + throw new Error('Instruments are missing'); } + proposalMessage.instruments.forEach((instrument: any) => { + if (!instrument.id) { + throw new Error('Instrument id is missing'); + } + + if (!instrument.shortCode) { + throw new Error('Instrument short code is missing'); + } + + if (typeof instrument.allocatedTime !== 'number') { + throw new Error('Instrument allocated time is missing'); + } + }); + return proposalMessage as ValidProposalMessageData; } From 2fad71abb110a5e705c9fb31ddc919814a1e1fd8 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:57:10 +0100 Subject: [PATCH 013/176] update: use own message validator in 1IM integration queue consumer (#300) --- ...neIdentityIntegrationQueueConsumer.spec.ts | 5 +- .../OneIdentityIntegrationQueueConsumer.ts | 4 +- ...idateRequiredProposalMessageFields.spec.ts | 62 +++++++++++++++++++ .../validateRequiredProposalMessageFields.ts | 18 ++++++ .../utils/validateProposalMessage.ts | 2 +- 5 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts create mode 100644 src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts index 63999ee1..7ef8c4ef 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts @@ -44,7 +44,7 @@ describe('OneIdentityIntegrationQueueConsumer', () => { await expect( consumer.onMessage(type, message, {} as MessageProperties) - ).rejects.toThrow('Proposal title is missing'); + ).rejects.toThrow('Invalid proposal message'); }); it('should call oneIdentityIntegrationHandler and log message handled', async () => { @@ -108,12 +108,9 @@ describe('OneIdentityIntegrationQueueConsumer', () => { memberEmails: string[]; }): ProposalMessageData { return { - title: 'title', shortCode, proposer: { email: proposerEmail, firstName: 'first', lastName: 'last' }, members: memberEmails.map((email) => ({ email })), - abstract: 'abstract', - instruments: [{ id: 1, shortCode: 'instrument', allocatedTime: 1 }], } as ProposalMessageData; } }); diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts index 5535c7b4..b15b3ba1 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -2,10 +2,10 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; +import { validateRequiredProposalMessageFields } from './utils/validateRequiredProposalMessageFields'; import { Event } from '../../../models/Event'; import { QueueConsumer } from '../QueueConsumer'; import { hasTriggeringType } from '../utils/hasTriggeringType'; -import { validateProposalMessage } from '../utils/validateProposalMessage'; const ONE_IDENTITY_INTEGRATION_QUEUE_NAME = process.env.ONE_IDENTITY_INTEGRATION_QUEUE_NAME || ''; @@ -34,7 +34,7 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { }); try { - const proposalMessage = validateProposalMessage(message); + const proposalMessage = validateRequiredProposalMessageFields(message); await oneIdentityIntegrationHandler(proposalMessage, type as Event); diff --git a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts b/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts new file mode 100644 index 00000000..f16bd774 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts @@ -0,0 +1,62 @@ +import { validateRequiredProposalMessageFields } from './validateRequiredProposalMessageFields'; + +describe('validateRequiredProposalMessageFields', () => { + it('should throw an error if message is not an object', () => { + const message = 'not an object'; + + expect(() => validateRequiredProposalMessageFields(message)).toThrow( + 'Invalid proposal message' + ); + }); + + it('should throw an error if message is null', () => { + const message = null; + + expect(() => validateRequiredProposalMessageFields(message)).toThrow( + 'Invalid proposal message' + ); + }); + + it('should throw an error if shortCode is undefined', () => { + const message = { + proposer: {}, + members: [], + }; + + expect(() => validateRequiredProposalMessageFields(message)).toThrow( + 'Invalid proposal message' + ); + }); + + it('should throw an error if proposer is undefined', () => { + const message = { + shortCode: 'shortCode', + members: [], + }; + + expect(() => validateRequiredProposalMessageFields(message)).toThrow( + 'Invalid proposal message' + ); + }); + + it('should throw an error if members is undefined', () => { + const message = { + shortCode: 'shortCode', + proposer: {}, + }; + + expect(() => validateRequiredProposalMessageFields(message)).toThrow( + 'Invalid proposal message' + ); + }); + + it('should return the message if shortCode, proposer, and members are defined', () => { + const message = { + shortCode: 'shortCode', + proposer: {}, + members: [], + }; + + expect(validateRequiredProposalMessageFields(message)).toEqual(message); + }); +}); diff --git a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts b/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts new file mode 100644 index 00000000..072590e6 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts @@ -0,0 +1,18 @@ +import { ProposalMessageData } from '../../../../models/ProposalMessage'; + +// For OneIdentity, only these fields are required +export function validateRequiredProposalMessageFields( + message: any +): ProposalMessageData | never { + if ( + typeof message !== 'object' || + message === null || + message?.shortCode === undefined || + message?.proposer === undefined || + message?.members === undefined + ) { + throw new Error('Invalid proposal message'); + } + + return message as ProposalMessageData; +} diff --git a/src/queue/consumers/utils/validateProposalMessage.ts b/src/queue/consumers/utils/validateProposalMessage.ts index e4d563c1..7e55a5ee 100644 --- a/src/queue/consumers/utils/validateProposalMessage.ts +++ b/src/queue/consumers/utils/validateProposalMessage.ts @@ -33,7 +33,7 @@ export function validateProposalMessage( throw new Error('Proposal short code is missing'); } - if (!proposalMessage.instruments.length) { + if (!proposalMessage.instruments?.length) { throw new Error('Instruments are missing'); } From 3b055e404c5f7900fa83e2a9fb8b1dd4ff416c58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 09:30:08 +0100 Subject: [PATCH 014/176] build(deps-dev): bump @types/node from 20.11.29 to 20.11.30 (#305) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.29 to 20.11.30. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 038097f5..2d6c30d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.29", + "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", - "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dependencies": { "undici-types": "~5.26.4" } @@ -9623,9 +9623,9 @@ "dev": true }, "@types/node": { - "version": "20.11.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz", - "integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 018ab8b8..51497058 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.29", + "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.3.1", "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", From cab905e220fa9dd0c5e136cc3c70be2f03e9b174 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:22:22 +0100 Subject: [PATCH 015/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#301) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.3.1 to 7.4.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.4.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 234 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d6c30d7..de03eda1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.30", - "@typescript-eslint/eslint-plugin": "^7.3.1", + "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", - "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", + "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/type-utils": "7.3.1", - "@typescript-eslint/utils": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/type-utils": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1728,17 +1728,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" }, "engines": { @@ -1753,12 +1753,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1938,13 +1938,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", - "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", + "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/utils": "7.4.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2023,17 +2023,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" }, "engines": { @@ -2048,12 +2048,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9695,16 +9695,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", - "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", + "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/type-utils": "7.3.1", - "@typescript-eslint/utils": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/type-utils": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -9714,29 +9714,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" } }, "@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9746,27 +9746,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -9876,41 +9876,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", - "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", + "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/utils": "7.4.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" } }, "@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9920,27 +9920,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index 51497058..33290e40 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.11.30", - "@typescript-eslint/eslint-plugin": "^7.3.1", + "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.3.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From d7217069425b01952bbbd2318789dc6f89aa5972 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 08:44:09 +0100 Subject: [PATCH 016/176] build(deps-dev): bump typescript from 5.4.2 to 5.4.3 (#302) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.4.2 to 5.4.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.4.2...v5.4.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index de03eda1..414ad8cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.4", "ts-jest": "^29.1.2", - "typescript": "^5.4.2" + "typescript": "^5.4.3" }, "engines": { "node": ">=18.0.0", @@ -8100,9 +8100,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14237,9 +14237,9 @@ } }, "typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==" + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 33290e40..2cd84bc6 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.4", "ts-jest": "^29.1.2", - "typescript": "^5.4.2" + "typescript": "^5.4.3" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From 0eb503ebfc268d60ca19ee11d5e8320768845920 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:06:53 +0100 Subject: [PATCH 017/176] build(deps-dev): bump @typescript-eslint/parser from 7.3.1 to 7.4.0 (#303) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.3.1 to 7.4.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.4.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 414ad8cf..3bd68d97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.3.1", + "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", - "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", + "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9791,42 +9791,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", - "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", + "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" } }, "@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9836,12 +9836,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index 2cd84bc6..615a126f 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.3.1", + "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From bf60b4813cff07bf476dd7f5f81e7af78699efe1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:22:32 +0100 Subject: [PATCH 018/176] build(deps): bump express from 4.18.3 to 4.19.2 (#304) Bumps [express](https://github.com/expressjs/express) from 4.18.3 to 4.19.2. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.3...4.19.2) --- updated-dependencies: - dependency-name: express dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd68d97..4abfa7c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.6.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.18.3", + "express": "^4.19.2", "kafkajs": "^2.2.3", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.1", @@ -3085,9 +3085,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -3939,16 +3939,16 @@ } }, "node_modules/express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10662,9 +10662,9 @@ "dev": true }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" }, "cookie-signature": { "version": "1.0.6", @@ -11274,16 +11274,16 @@ } }, "express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", diff --git a/package.json b/package.json index 615a126f..e2b4aaaa 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "axios": "^1.6.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.18.3", + "express": "^4.19.2", "kafkajs": "^2.2.3", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.1", From 85f45915cbcfdc354d7465d5e70861dc880e6c3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 09:28:26 +0200 Subject: [PATCH 019/176] build(deps-dev): bump @typescript-eslint/parser from 7.4.0 to 7.5.0 (#306) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.4.0 to 7.5.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.5.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4abfa7c8..c1d1e5f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", + "@typescript-eslint/parser": "^7.5.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", - "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", + "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/scope-manager": "7.5.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/typescript-estree": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", + "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", + "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", + "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", + "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/types": "7.5.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9791,42 +9791,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", - "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", + "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/scope-manager": "7.5.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/typescript-estree": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", + "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0" } }, "@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", + "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", + "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9836,12 +9836,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", + "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/types": "7.5.0", "eslint-visitor-keys": "^3.4.1" } }, diff --git a/package.json b/package.json index e2b4aaaa..76e9dc6e 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", + "@typescript-eslint/parser": "^7.5.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 125f17cdb2149cfaa4cb51679c18703080252712 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:04:07 +0200 Subject: [PATCH 020/176] build(deps-dev): bump @types/node from 20.11.30 to 20.12.2 (#307) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.30 to 20.12.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1d1e5f2..cc62c8dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.30", + "@types/node": "^20.12.2", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.5.0", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", + "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -9623,9 +9623,9 @@ "dev": true }, "@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", + "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 76e9dc6e..69660adb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.30", + "@types/node": "^20.12.2", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.5.0", "eslint": "^8.57.0", From d264764b3cbc11532ebc36fb1159744a4650e5aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:41:37 +0200 Subject: [PATCH 021/176] build(deps): bump reflect-metadata from 0.2.1 to 0.2.2 (#308) Bumps [reflect-metadata](https://github.com/rbuckton/reflect-metadata) from 0.2.1 to 0.2.2. - [Release notes](https://github.com/rbuckton/reflect-metadata/releases) - [Changelog](https://github.com/rbuckton/reflect-metadata/blob/main/tsconfig-release.json) - [Commits](https://github.com/rbuckton/reflect-metadata/commits) --- updated-dependencies: - dependency-name: reflect-metadata dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index cc62c8dd..3111617e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "express": "^4.19.2", "kafkajs": "^2.2.3", "matrix-js-sdk": "24.1.0", - "reflect-metadata": "^0.2.1", + "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" }, @@ -7016,9 +7016,9 @@ } }, "node_modules/reflect-metadata": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", - "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "node_modules/regenerator-runtime": { "version": "0.13.11", @@ -13460,9 +13460,9 @@ } }, "reflect-metadata": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", - "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "regenerator-runtime": { "version": "0.13.11", diff --git a/package.json b/package.json index 69660adb..880c5c2a 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "express": "^4.19.2", "kafkajs": "^2.2.3", "matrix-js-sdk": "24.1.0", - "reflect-metadata": "^0.2.1", + "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" } From df35efe3c49e6038e647a26713892a642952a41b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:40:59 +0200 Subject: [PATCH 022/176] build(deps-dev): bump prettier from 3.2.4 to 3.2.5 (#309) Bumps [prettier](https://github.com/prettier/prettier) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.2.4...3.2.5) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3111617e..00d6d33f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.2", - "prettier": "3.2.4", + "prettier": "3.2.5", "ts-jest": "^29.1.2", "typescript": "^5.4.3" }, @@ -6819,9 +6819,9 @@ } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -13330,9 +13330,9 @@ "dev": true }, "prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index 880c5c2a..4d3ee582 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.2", - "prettier": "3.2.4", + "prettier": "3.2.5", "ts-jest": "^29.1.2", "typescript": "^5.4.3" }, From 79804056b758b71b84a92aeb012e2477652f4aa1 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 5 Apr 2024 10:33:26 +0200 Subject: [PATCH 023/176] fix: fix scicat proposal update input (#311) * fix: fix scicat proposal update input * create separate function for update proposal dto --- .../upsertProposalInScicat.ts | 24 +++++++++++++++++-- .../consumers/scicat/scicatProposal/dto.ts | 16 +++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index b618c4d0..52bbc12c 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -1,7 +1,7 @@ import { logger } from '@user-office-software/duo-logger'; import { ValidProposalMessageData } from '../../../utils/validateProposalMessage'; -import { CreateProposalDto } from '../dto'; +import { CreateProposalDto, UpdateProposalDto } from '../dto'; const sciCatBaseUrl = process.env.SCICAT_BASE_URL; const sciCatLoginEndpoint = process.env.SCICAT_LOGIN_ENDPOINT || '/Users/login'; @@ -74,6 +74,26 @@ const getCreateProposalDto = (proposalMessage: ValidProposalMessageData) => { return createProposalDto; }; +const getUpdateProposalDto = (proposalMessage: ValidProposalMessageData) => { + const updateProposalDto: UpdateProposalDto = { + title: proposalMessage.title, + pi_email: proposalMessage.proposer.email, + pi_firstname: proposalMessage.proposer.firstName, + pi_lastname: proposalMessage.proposer.lastName, + email: proposalMessage.proposer.email, + firstname: proposalMessage.proposer.firstName, + lastname: proposalMessage.proposer.lastName, + abstract: proposalMessage.abstract, + ownerGroup: proposalMessage.shortCode, + accessGroups: [], + startTime: new Date(), + endTime: new Date(), + MeasurementPeriodList: [], + }; + + return updateProposalDto; +}; + const createProposal = async ( proposalMessage: ValidProposalMessageData, sciCatAccessToken: string @@ -105,7 +125,7 @@ const updateProposal = async ( sciCatAccessToken: string ) => { const url = `${sciCatBaseUrl}/Proposals/${proposalMessage.shortCode}`; - const updateProposalDto = getCreateProposalDto(proposalMessage); + const updateProposalDto = getUpdateProposalDto(proposalMessage); const updateProposalResponse = await request(url, { method: 'PATCH', diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index 3ff3ff79..767db2bc 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -15,6 +15,22 @@ export type CreateProposalDto = { MeasurementPeriodList: any[]; }; +export type UpdateProposalDto = { + ownerGroup?: string; + accessGroups?: string[]; + pi_email?: string; + pi_firstname?: string; + pi_lastname?: string; + email: string; + firstname?: string; + lastname?: string; + title: string; + abstract?: string; + startTime?: Date; + endTime?: Date; + MeasurementPeriodList?: any[]; +}; + export interface ProposalUser { id: number; firstName: string; From 86121e854ec1f80fb6166ed8c87a00f3d4d46296 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 08:52:51 +0200 Subject: [PATCH 024/176] build(deps-dev): bump eslint-plugin-jest from 27.9.0 to 28.2.0 (#312) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 27.9.0 to 28.2.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v27.9.0...v28.2.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 282 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 125 insertions(+), 159 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00d6d33f..304b0123 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-jest": "^28.2.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.1.0", "husky": "^9.0.11", @@ -1921,16 +1921,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", - "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2089,12 +2089,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", - "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2102,21 +2102,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", - "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2128,43 +2129,66 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", - "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", - "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3662,19 +3686,19 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "version": "28.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", + "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -3746,28 +3770,6 @@ "node": ">=4.0.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -7952,27 +7954,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/tsyringe": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz", @@ -9866,13 +9847,13 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", - "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" } }, "@typescript-eslint/type-utils": { @@ -9965,50 +9946,70 @@ } }, "@typescript-eslint/types": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", - "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", - "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", - "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", - "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" } }, "@ungap/structured-clone": { @@ -11117,12 +11118,12 @@ } }, "eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "version": "28.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", + "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", "dev": true, "requires": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0" } }, "eslint-plugin-prettier": { @@ -11150,24 +11151,6 @@ "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", "dev": true }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -14127,23 +14110,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "tsyringe": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz", diff --git a/package.json b/package.json index 4d3ee582..7a653726 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-jest": "^28.2.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.1.0", "husky": "^9.0.11", From 43cade8a24c890878f2fe3b6739b204cf366a179 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 06:58:51 +0000 Subject: [PATCH 025/176] build(deps-dev): bump @typescript-eslint/parser from 7.5.0 to 7.6.0 (#313) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.5.0 to 7.6.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.6.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 150 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 304b0123..c8b48dbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.2", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,19 +1852,19 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1880,13 +1880,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1906,9 +1906,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -7251,9 +7251,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7749,9 +7749,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { "node": ">=16" @@ -9772,58 +9772,58 @@ } }, "@typescript-eslint/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "requires": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" } }, "@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" } }, "brace-expansion": { @@ -9836,9 +9836,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -13605,9 +13605,9 @@ "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -13984,9 +13984,9 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, "ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index 7a653726..f76b682d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.2", "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 333a531331fdc0bfe039915a7f319dabe7de0d6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 09:12:22 +0200 Subject: [PATCH 026/176] build(deps-dev): bump typescript from 5.4.3 to 5.4.4 (#314) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.4.3 to 5.4.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.4.3...v5.4.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8b48dbf..70895b52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.5", "ts-jest": "^29.1.2", - "typescript": "^5.4.3" + "typescript": "^5.4.4" }, "engines": { "node": ">=18.0.0", @@ -8081,9 +8081,9 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14203,9 +14203,9 @@ } }, "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==" + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index f76b682d..d215cd96 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.5", "ts-jest": "^29.1.2", - "typescript": "^5.4.3" + "typescript": "^5.4.4" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From 17e78295564965b4f85c89f649de81c4b81a7b14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 07:18:37 +0000 Subject: [PATCH 027/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#315) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.4.0 to 7.6.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.6.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 382 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 192 insertions(+), 192 deletions(-) diff --git a/package-lock.json b/package-lock.json index 70895b52..b9c88415 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.2", - "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -785,9 +785,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", - "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "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" @@ -1545,9 +1545,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/json5": { @@ -1588,9 +1588,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/serve-static": { @@ -1635,22 +1635,22 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", - "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/type-utils": "7.4.0", - "@typescript-eslint/utils": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1700,19 +1700,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1728,18 +1728,18 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1753,13 +1753,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1779,9 +1779,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1938,15 +1938,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", - "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1995,19 +1995,19 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2023,18 +2023,18 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2048,13 +2048,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2074,9 +2074,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4613,9 +4613,9 @@ } }, "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.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -8959,9 +8959,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", - "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "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 }, "@eslint/eslintrc": { @@ -9586,9 +9586,9 @@ } }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/json5": { @@ -9629,9 +9629,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "@types/serve-static": { @@ -9676,79 +9676,79 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", - "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", + "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/type-utils": "7.4.0", - "@typescript-eslint/utils": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/type-utils": "7.6.0", + "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" } }, "@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" } }, "brace-expansion": { @@ -9761,9 +9761,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9857,72 +9857,72 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", - "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", + "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/utils": "7.6.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", + "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" } }, "@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", + "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", + "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", + "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", + "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" } }, "brace-expansion": { @@ -9935,9 +9935,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -11744,9 +11744,9 @@ } }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true }, "import-fresh": { diff --git a/package.json b/package.json index d215cd96..9df6c09a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.2", - "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From d95b6d685150c5b072eaeeb7800ddf38edc39400 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 10:09:16 +0200 Subject: [PATCH 028/176] build(deps-dev): bump @types/node from 20.12.2 to 20.12.6 (#317) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.2 to 20.12.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b9c88415..56be122f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.2", + "@types/node": "^20.12.6", "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", - "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", + "version": "20.12.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", + "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -9604,9 +9604,9 @@ "dev": true }, "@types/node": { - "version": "20.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", - "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", + "version": "20.12.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", + "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 9df6c09a..fe0399e6 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.2", + "@types/node": "^20.12.6", "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.6.0", "eslint": "^8.57.0", From 5063f8f510135d5d593ad43d9173a28f0bc70547 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 09:09:34 +0200 Subject: [PATCH 029/176] build(deps-dev): bump @typescript-eslint/parser from 7.6.0 to 7.7.0 (#318) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.6.0 to 7.7.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.7.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56be122f..07220d18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.6", "@typescript-eslint/eslint-plugin": "^7.6.0", - "@typescript-eslint/parser": "^7.6.0", + "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9772,42 +9772,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" } }, "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9817,12 +9817,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index fe0399e6..563b3c68 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.6", "@typescript-eslint/eslint-plugin": "^7.6.0", - "@typescript-eslint/parser": "^7.6.0", + "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 881d4a5b3b7282b232d18719bbfcc987f9a7ecb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:55:08 +0200 Subject: [PATCH 030/176] build(deps-dev): bump @types/node from 20.12.6 to 20.12.7 (#319) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.6 to 20.12.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07220d18..6009345b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.6", + "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", - "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } @@ -9604,9 +9604,9 @@ "dev": true }, "@types/node": { - "version": "20.12.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", - "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 563b3c68..be2e6753 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.6", + "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.6.0", "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", From c867f7227abfd9fc11eab150249a476b720c5034 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:01:12 +0000 Subject: [PATCH 031/176] build(deps-dev): bump typescript from 5.4.4 to 5.4.5 (#320) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.4.4 to 5.4.5. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.4.4...v5.4.5) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6009345b..9bc11927 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.5", "ts-jest": "^29.1.2", - "typescript": "^5.4.4" + "typescript": "^5.4.5" }, "engines": { "node": ">=18.0.0", @@ -8081,9 +8081,9 @@ } }, "node_modules/typescript": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", - "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14203,9 +14203,9 @@ } }, "typescript": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", - "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==" + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index be2e6753..8b6242cf 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "lint-staged": "^15.2.2", "prettier": "3.2.5", "ts-jest": "^29.1.2", - "typescript": "^5.4.4" + "typescript": "^5.4.5" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From b2843e7931d1adf27cda4c945b2bdf42c9440fd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 08:40:29 +0200 Subject: [PATCH 032/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#322) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.6.0 to 7.7.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.7.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 234 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9bc11927..7914b99a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.6.0", + "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", + "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/type-utils": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1728,17 +1728,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" }, "engines": { @@ -1753,12 +1753,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1938,13 +1938,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", + "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/utils": "7.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2023,17 +2023,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" }, "engines": { @@ -2048,12 +2048,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9676,16 +9676,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", + "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/type-utils": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -9695,29 +9695,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" } }, "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9727,27 +9727,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -9857,41 +9857,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", + "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/utils": "7.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" } }, "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9901,27 +9901,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 8b6242cf..faed1776 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.6.0", + "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 2594ae9095e93bb9f962f845f675de000bc95b72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:35:53 +0200 Subject: [PATCH 033/176] build(deps-dev): bump @typescript-eslint/parser from 7.7.0 to 7.7.1 (#323) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.7.0 to 7.7.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.7.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7914b99a..3c2d28ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", + "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", - "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9772,42 +9772,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", - "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" } }, "@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9817,12 +9817,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index faed1776..19b7a19f 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", + "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 6fb25d1882845d19716454eda33fd2721c6d3c39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:41:35 +0200 Subject: [PATCH 034/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#324) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.7.0 to 7.7.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.7.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 234 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c2d28ca..7be7d8a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", - "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/type-utils": "7.7.0", - "@typescript-eslint/utils": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1728,17 +1728,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", - "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" }, "engines": { @@ -1753,12 +1753,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1938,13 +1938,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", - "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2023,17 +2023,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", - "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" }, "engines": { @@ -2048,12 +2048,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9676,16 +9676,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", - "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/type-utils": "7.7.0", - "@typescript-eslint/utils": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -9695,29 +9695,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" } }, "@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9727,27 +9727,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", - "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" } }, @@ -9857,41 +9857,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", - "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", - "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" } }, "@typescript-eslint/types": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", - "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", - "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9901,27 +9901,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", - "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", - "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 19b7a19f..e6141142 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 6f9ea30507e739c9d4f160d73dc889a7ef9aecb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 08:55:03 +0200 Subject: [PATCH 035/176] build(deps-dev): bump @typescript-eslint/parser from 7.7.1 to 7.8.0 (#325) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.7.1 to 7.8.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.8.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7be7d8a4..315ccca8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.1", - "@typescript-eslint/parser": "^7.7.1", + "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", - "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9772,42 +9772,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", - "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" } }, "@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9817,12 +9817,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index e6141142..909240b8 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.1", - "@typescript-eslint/parser": "^7.7.1", + "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 5fec045cd43badc0643f236f8442af2b9365aa0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 10:18:47 +0200 Subject: [PATCH 036/176] build(deps-dev): bump eslint-plugin-jest from 28.2.0 to 28.3.0 (#326) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.2.0 to 28.3.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.2.0...v28.3.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 315ccca8..b8e6ad5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.2.0", + "eslint-plugin-jest": "^28.3.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.1.0", "husky": "^9.0.11", @@ -3686,9 +3686,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", - "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz", + "integrity": "sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^6.0.0" @@ -11118,9 +11118,9 @@ } }, "eslint-plugin-jest": { - "version": "28.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", - "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz", + "integrity": "sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==", "dev": true, "requires": { "@typescript-eslint/utils": "^6.0.0" diff --git a/package.json b/package.json index 909240b8..41053d69 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.2.0", + "eslint-plugin-jest": "^28.3.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.1.0", "husky": "^9.0.11", From 14c388de2f42ba0141006b1862053db21e1c08dd Mon Sep 17 00:00:00 2001 From: janosbabik Date: Fri, 3 May 2024 07:24:27 +0200 Subject: [PATCH 037/176] chore: add response data to logs when error occurs in one identity integration handler --- .../OneIdentityIntegrationQueueConsumer.ts | 16 ++++++++++++++++ .../oneIdentityIntegrationHandler.ts | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts index b15b3ba1..680e31c7 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -1,5 +1,6 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; +import { isAxiosError } from 'axios'; import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; import { validateRequiredProposalMessageFields } from './utils/validateRequiredProposalMessageFields'; @@ -43,9 +44,12 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { message, }); } catch (error) { + const response = extractAxiosErrorResponse(error); + logger.logException('Error while handling proposal', error, { type, message, + response, }); // Re-throw the error to make sure the message is not acknowledged @@ -53,3 +57,15 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { } }; } + +function extractAxiosErrorResponse(error: unknown) { + if (isAxiosError(error)) { + return { + status: error.response?.status, + headers: error.response?.headers, + data: error.response?.data, + }; + } + + return undefined; +} diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts index 996be49f..74b8466e 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts @@ -19,9 +19,13 @@ export async function oneIdentityIntegrationHandler( const oneIdentity = new ESSOneIdentity(); await oneIdentity.login(); + logger.logInfo('One Identity successfully logged in', {}); + try { const uidESet = await getUIDESetFromOneIdentity(oneIdentity, message, type); + logger.logInfo('UID_ESet from One Identity', { uidESet }); + if (uidESet) { await handleConnectionsBetweenProposalAndPersons( oneIdentity, @@ -31,6 +35,7 @@ export async function oneIdentityIntegrationHandler( } } finally { await oneIdentity.logout(); + logger.logInfo('One Identity successfully logged out', {}); } } From 95897027a78db9020b651328648fc46b7bcfba89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 08:16:11 +0200 Subject: [PATCH 038/176] build(deps-dev): bump eslint-plugin-unused-imports from 3.1.0 to 3.2.0 (#332) Bumps [eslint-plugin-unused-imports](https://github.com/sweepline/eslint-plugin-unused-imports) from 3.1.0 to 3.2.0. - [Commits](https://github.com/sweepline/eslint-plugin-unused-imports/commits) --- updated-dependencies: - dependency-name: eslint-plugin-unused-imports dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8e6ad5d..2e790951 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.3.0", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unused-imports": "^3.1.0", + "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.2", @@ -3741,9 +3741,9 @@ } }, "node_modules/eslint-plugin-unused-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", - "integrity": "sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", + "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", "dev": true, "dependencies": { "eslint-rule-composer": "^0.3.0" @@ -11137,9 +11137,9 @@ } }, "eslint-plugin-unused-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", - "integrity": "sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", + "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", "dev": true, "requires": { "eslint-rule-composer": "^0.3.0" diff --git a/package.json b/package.json index 41053d69..2a15013b 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.3.0", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unused-imports": "^3.1.0", + "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.2", From 138da3261c06b34e67e73d6fe2449d1f01211987 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 08:24:40 +0200 Subject: [PATCH 039/176] build(deps-dev): bump @types/node from 20.12.7 to 20.12.10 (#333) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.7 to 20.12.10. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e790951..ece8071c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.7", + "@types/node": "^20.12.10", "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", @@ -1563,9 +1563,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", "dependencies": { "undici-types": "~5.26.4" } @@ -9604,9 +9604,9 @@ "dev": true }, "@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 2a15013b..84a28c36 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.7", + "@types/node": "^20.12.10", "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", From 8ea2b48a63b83e15e86964ebdf5a33ba3d19f287 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 06:30:04 +0000 Subject: [PATCH 040/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#327) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.7.1 to 7.8.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.8.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 234 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index ece8071c..73c229fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.10", - "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1635,16 +1635,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", - "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/type-utils": "7.7.1", - "@typescript-eslint/utils": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -1670,13 +1670,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1687,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1700,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1728,17 +1728,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", - "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", "semver": "^7.6.0" }, "engines": { @@ -1753,12 +1753,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1938,13 +1938,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", - "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1965,13 +1965,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1982,9 +1982,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1995,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2023,17 +2023,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", - "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", "semver": "^7.6.0" }, "engines": { @@ -2048,12 +2048,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9676,16 +9676,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", - "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/type-utils": "7.7.1", - "@typescript-eslint/utils": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -9695,29 +9695,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" } }, "@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9727,27 +9727,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", - "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -9857,41 +9857,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", - "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" } }, "@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9901,27 +9901,27 @@ } }, "@typescript-eslint/utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", - "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", "semver": "^7.6.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/types": "7.8.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 84a28c36..993ac0b1 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.10", - "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 53993c2a32cd82b5a402235f949eb4dee3e9802f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 08:37:11 +0200 Subject: [PATCH 041/176] build(deps-dev): bump eslint-plugin-jest from 28.3.0 to 28.5.0 (#334) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.3.0 to 28.5.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.3.0...v28.5.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73c229fe..ae9d71b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.3.0", + "eslint-plugin-jest": "^28.5.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", @@ -3686,12 +3686,12 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz", - "integrity": "sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==", + "version": "28.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", + "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^6.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" }, "engines": { "node": "^16.10.0 || ^18.12.0 || >=20.0.0" @@ -11118,12 +11118,12 @@ } }, "eslint-plugin-jest": { - "version": "28.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz", - "integrity": "sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==", + "version": "28.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", + "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "^6.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" } }, "eslint-plugin-prettier": { diff --git a/package.json b/package.json index 993ac0b1..7108170c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.3.0", + "eslint-plugin-jest": "^28.5.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", From a64ede45ebb1dae740b29cb80aef89eb29f5bdaf Mon Sep 17 00:00:00 2001 From: janosbabik Date: Tue, 7 May 2024 11:25:52 +0200 Subject: [PATCH 042/176] chore: add DefaultEmailAddress field to where clause in ESSOneIdentity.getPerson method --- .../consumers/oneidentity/utils/ESSOneIdentity.spec.ts | 8 ++++++-- src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts index dd5fc19b..bf73d3f1 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts @@ -118,7 +118,7 @@ describe('ESSOneIdentity', () => { expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( 'Person', - "ContactEmail='foo@email'" + "ContactEmail='foo@email' OR DefaultEmailAddress='foo@email'" ); expect(result).toEqual({ UID_Person: 'person-uid' }); }); @@ -150,7 +150,11 @@ describe('ESSOneIdentity', () => { describe('getPersons', () => { it('should get person records for multiple users, undefined if not found', async () => { mockOneIdentityApi.getEntities.mockImplementation((table, filter) => { - if (table === 'Person' && filter === "ContactEmail='unknown-email'") + if ( + table === 'Person' && + filter === + "ContactEmail='unknown-email' OR DefaultEmailAddress='unknown-email'" + ) return Promise.resolve([]); else return Promise.resolve([ diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts index f2d8c684..d9afda4d 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts @@ -99,7 +99,7 @@ export class ESSOneIdentity { ): Promise { const entities = await this.oneIdentityApi.getEntities( 'Person', - `ContactEmail='${user.email}'` + `ContactEmail='${user.email}' OR DefaultEmailAddress='${user.email}'` // ContactEmail is for scienceusers, DefaultEmailAddress is for ESS employees ); // In theory there should be only one person with the same email, but the 1IM.Person table has no unique constraint on ContactEmail. From 4fda8e5e7ea78c2a09d237be6faa4edcd1174c4d Mon Sep 17 00:00:00 2001 From: janosbabik Date: Tue, 7 May 2024 11:52:50 +0200 Subject: [PATCH 043/176] chore: add group prefix to folder creation --- sample.env | 1 + src/config/validateEnv.ts | 1 + .../proposalFoldersCreation.spec.ts | 20 +++++++++++++++++++ .../proposalFoldersCreation.ts | 2 +- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/sample.env b/sample.env index f1452eb7..00926ccc 100644 --- a/sample.env +++ b/sample.env @@ -18,6 +18,7 @@ SCICAT_USERNAME=admin SCICAT_PASSWORD=am2jf70TPNZsSan SCICAT_PROPOSAL_TRIGGERING_STATUSES="SCHEDULING, ALLOCATED" +PROPOSAL_FOLDERS_CREATION_GROUP_PREFIX="" PROPOSAL_FOLDERS_CREATION_TRIGGERING_STATUSES="PROPOSAL_ACCEPTED" PROPOSAL_FOLDERS_CREATION_COMMAND="echo \"Instrument: , Year: , Proposal: \"" MOODLE_FOLDERS_CREATION_COMMAND="echo \"UserId: , CourseShortName: \"" diff --git a/src/config/validateEnv.ts b/src/config/validateEnv.ts index 6c1635b2..63bd57d1 100644 --- a/src/config/validateEnv.ts +++ b/src/config/validateEnv.ts @@ -16,6 +16,7 @@ function validateEnv() { GRAYLOG_SERVER: str({ default: 'it-graylog.esss.lu.se' }), GRAYLOG_PORT: port({ default: 12201 }), SCICAT_PROPOSAL_TRIGGERING_STATUSES: str({ default: undefined }), + PROPOSAL_FOLDERS_CREATION_GROUP_PREFIX: str({ default: '' }), PROPOSAL_FOLDERS_CREATION_COMMAND: str({ default: undefined }), PROPOSAL_FOLDERS_CREATION_TRIGGERING_STATUSES: str({ default: undefined }), ENABLE_SCICAT_PROPOSAL_UPSERT: bool({ default: false }), diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts index 3ba795db..24a1936f 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts @@ -7,6 +7,7 @@ jest.mock('node:process', () => ({ jest.mock('@user-office-software/duo-logger'); import { exec } from 'node:child_process'; +import { env } from 'node:process'; import { logger } from '@user-office-software/duo-logger'; @@ -69,4 +70,23 @@ describe('proposalFoldersCreation', () => { } ); }); + + it('should call exec with the correct command', () => { + env.PROPOSAL_FOLDERS_CREATION_COMMAND = + 'command '; + env.PROPOSAL_FOLDERS_CREATION_GROUP_PREFIX = 'group_prefix_'; + (exec as unknown as jest.Mock).mockImplementationOnce( + (command, callback) => { + callback(undefined, '', undefined); + } + ); + + proposalFoldersCreation(proposalMessage); + + expect(exec).toHaveBeenCalledTimes(1); + expect(exec).toHaveBeenCalledWith( + 'command shortcode 2024 shortCode group_prefix_shortCode test.proposer@email.com test.member@email.com', + expect.any(Function) + ); + }); }); diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts index cdf09bf3..aee7ff1f 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.ts @@ -10,7 +10,7 @@ const proposalFoldersCreation = async ( ) => { // prepare path with correct year, instrument, proposal const proposalId = proposalMessage.shortCode; - const group = proposalMessage.shortCode; + const group = `${env.PROPOSAL_FOLDERS_CREATION_GROUP_PREFIX}${proposalMessage.shortCode}`; const year = new Date().getFullYear().toString(); const proposerEmail = proposalMessage.proposer.email; const membersEmails = proposalMessage.members.map((m) => m.email).join(' '); From 03f42d47b4707fde54c7e44d48dd67422ca2bb06 Mon Sep 17 00:00:00 2001 From: janosbabik Date: Tue, 7 May 2024 12:06:00 +0200 Subject: [PATCH 044/176] fix: remove sample scicat username and password values from sample.env --- sample.env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample.env b/sample.env index 00926ccc..3bf6bcd0 100644 --- a/sample.env +++ b/sample.env @@ -14,8 +14,8 @@ KAFKA_TOPIC=TestTopic SCICAT_BASE_URL=http://127.0.0.1:3200/api/v3 SCICAT_LOGIN_ENDPOINT=/Users/login -SCICAT_USERNAME=admin -SCICAT_PASSWORD=am2jf70TPNZsSan +SCICAT_USERNAME= +SCICAT_PASSWORD= SCICAT_PROPOSAL_TRIGGERING_STATUSES="SCHEDULING, ALLOCATED" PROPOSAL_FOLDERS_CREATION_GROUP_PREFIX="" From a3bc0f020e92d3a33190177198845eeef2df2678 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 08:24:11 +0200 Subject: [PATCH 045/176] build(deps-dev): bump @typescript-eslint/parser from 7.8.0 to 7.9.0 (#340) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.8.0 to 7.9.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.9.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae9d71b6..3f94c5d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.10", "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1794,15 +1794,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", + "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/typescript-estree": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4" }, "engines": { @@ -1822,13 +1822,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", + "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1839,9 +1839,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", + "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1852,13 +1852,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", + "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1880,12 +1880,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", + "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.9.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9772,42 +9772,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", + "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/typescript-estree": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", + "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0" } }, "@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", + "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", + "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9817,12 +9817,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", + "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.9.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 7108170c..ea4797d1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.10", "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 6047ef9cf51016ac92ad6d5067305369494400c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 06:55:13 +0000 Subject: [PATCH 046/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#337) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.8.0 to 7.9.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.9.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin --- package-lock.json | 610 +++++++--------------------------------------- package.json | 2 +- 2 files changed, 88 insertions(+), 524 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f94c5d5..b9fc8c9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.10", - "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/eslint-plugin": "^7.9.0", "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1544,12 +1544,6 @@ "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1587,12 +1581,6 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "node_modules/@types/serve-static": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", @@ -1635,21 +1623,19 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", + "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/type-utils": "7.9.0", + "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { @@ -1669,130 +1655,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/parser": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", @@ -1921,16 +1783,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", + "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1938,13 +1800,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", + "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.9.0", + "@typescript-eslint/utils": "7.9.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1964,27 +1826,10 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "node_modules/@typescript-eslint/types": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", + "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1994,14 +1839,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", + "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2022,49 +1867,7 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -2073,7 +1876,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", @@ -2088,107 +1891,39 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", + "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/typescript-estree": "7.9.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", + "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.9.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -9585,12 +9320,6 @@ "pretty-format": "^29.0.0" } }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -9628,12 +9357,6 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "@types/serve-static": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", @@ -9676,99 +9399,20 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", + "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/type-utils": "7.9.0", + "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" - } - }, - "@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "@typescript-eslint/parser": { @@ -9847,124 +9491,47 @@ } }, "@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", + "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0" } }, "@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", + "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.9.0", + "@typescript-eslint/utils": "7.9.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" - } - }, - "@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", + "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", + "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/visitor-keys": "7.9.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { "brace-expansion": { @@ -9977,9 +9544,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9988,28 +9555,25 @@ } }, "@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", + "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "7.9.0", + "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/typescript-estree": "7.9.0" } }, "@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", + "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.9.0", + "eslint-visitor-keys": "^3.4.3" } }, "@ungap/structured-clone": { diff --git a/package.json b/package.json index ea4797d1..ef9eaee2 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.10", - "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/eslint-plugin": "^7.9.0", "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 8ba89863944bba223077a505ed4547ecf0624f08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 09:45:59 +0200 Subject: [PATCH 047/176] build(deps-dev): bump @types/node from 20.12.10 to 20.12.12 (#341) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.10 to 20.12.12. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b9fc8c9e..aa63a3a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.10", + "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", @@ -1557,9 +1557,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "dependencies": { "undici-types": "~5.26.4" } @@ -9333,9 +9333,9 @@ "dev": true }, "@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index ef9eaee2..9db31f68 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.10", + "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", "@typescript-eslint/parser": "^7.9.0", "eslint": "^8.57.0", From d0344c77b117bb3820c615f7a9f5c60ec9288520 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 08:37:10 +0200 Subject: [PATCH 048/176] --- (#344) updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa63a3a7..98689569 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", - "@typescript-eslint/parser": "^7.9.0", + "@typescript-eslint/parser": "^7.10.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1656,15 +1656,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", + "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4" }, "engines": { @@ -1684,13 +1684,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", + "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1701,9 +1701,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", + "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1714,13 +1714,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", + "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1742,12 +1742,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", + "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.10.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9416,42 +9416,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", + "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", + "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" } }, "@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", + "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", + "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9461,12 +9461,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", + "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.10.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 9db31f68..de9a3f74 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", - "@typescript-eslint/parser": "^7.9.0", + "@typescript-eslint/parser": "^7.10.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 04d4bce540dd15c70094462c62df49194fa1431c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 08:28:00 +0200 Subject: [PATCH 049/176] build(deps-dev): bump @typescript-eslint/parser from 7.10.0 to 7.11.0 (#349) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.10.0 to 7.11.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.11.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98689569..406ae44f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", - "@typescript-eslint/parser": "^7.10.0", + "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1656,15 +1656,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", - "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.11.0", + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/typescript-estree": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0", "debug": "^4.3.4" }, "engines": { @@ -1684,13 +1684,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", - "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", + "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0" + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1701,9 +1701,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", - "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", + "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1714,13 +1714,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", - "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", + "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1742,12 +1742,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", - "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", + "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/types": "7.11.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9416,42 +9416,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", - "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.11.0", + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/typescript-estree": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", - "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", + "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0" + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0" } }, "@typescript-eslint/types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", - "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", + "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", - "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", + "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/visitor-keys": "7.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9461,12 +9461,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", - "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", + "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/types": "7.11.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index de9a3f74..f5382668 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.9.0", - "@typescript-eslint/parser": "^7.10.0", + "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From c16ddd8f443df5170ffe79ea11202ac9aa94ab28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 05:58:10 +0200 Subject: [PATCH 050/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#355) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.9.0 to 7.13.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.13.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 142 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 72 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index 406ae44f..da0391a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.12", - "@typescript-eslint/eslint-plugin": "^7.9.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1623,16 +1623,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", - "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1783,13 +1783,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1800,13 +1800,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", - "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1827,9 +1827,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1840,13 +1840,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1892,15 +1892,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1914,12 +1914,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9399,16 +9399,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", - "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -9491,41 +9491,41 @@ } }, "@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" } }, "@typescript-eslint/type-utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", - "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9555,24 +9555,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index f5382668..30d56200 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.12.12", - "@typescript-eslint/eslint-plugin": "^7.9.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 4584588593d851ddf4d999697b859d9dcb28b5ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 06:03:06 +0200 Subject: [PATCH 051/176] build(deps-dev): bump lint-staged from 15.2.2 to 15.2.5 (#345) Bumps [lint-staged](https://github.com/okonet/lint-staged) from 15.2.2 to 15.2.5. - [Release notes](https://github.com/okonet/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/okonet/lint-staged/compare/v15.2.2...v15.2.5) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 200 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 92 insertions(+), 110 deletions(-) diff --git a/package-lock.json b/package-lock.json index da0391a1..042ecaad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.2", + "lint-staged": "^15.2.5", "prettier": "3.2.5", "ts-jest": "^29.1.2", "typescript": "^5.4.5" @@ -2416,11 +2416,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2786,12 +2786,12 @@ } }, "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/concat-map": { @@ -3836,9 +3836,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5452,12 +5452,15 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -5467,21 +5470,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", - "dev": true, - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", + "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -5640,16 +5643,16 @@ } }, "node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -5787,13 +5790,10 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, "engines": { "node": ">=14.16" }, @@ -5894,18 +5894,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -6046,12 +6034,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8075,10 +8063,13 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -9943,11 +9934,11 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -10190,9 +10181,9 @@ } }, "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true }, "concat-map": { @@ -10959,9 +10950,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -12117,9 +12108,9 @@ } }, "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true }, "lines-and-columns": { @@ -12129,21 +12120,21 @@ "dev": true }, "lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", + "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", "dev": true, "requires": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "dependencies": { "chalk": { @@ -12232,16 +12223,16 @@ } }, "listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -12336,13 +12327,10 @@ }, "dependencies": { "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dev": true, - "requires": { - "type-fest": "^3.0.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true }, "ansi-regex": { "version": "6.0.1", @@ -12401,12 +12389,6 @@ "ansi-regex": "^6.0.1" } }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true - }, "wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -12518,12 +12500,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -13953,9 +13935,9 @@ "dev": true }, "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 30d56200..8b0f1de9 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.2", + "lint-staged": "^15.2.5", "prettier": "3.2.5", "ts-jest": "^29.1.2", "typescript": "^5.4.5" From fec8a9bc7c43d5142d3a59a5d6b8051cdf150ba8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 06:15:52 +0200 Subject: [PATCH 052/176] build(deps-dev): bump @types/node from 20.12.12 to 20.14.2 (#353) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.12.12 to 20.14.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 042ecaad..9bae549f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", + "@types/node": "^20.14.2", "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", @@ -1557,9 +1557,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dependencies": { "undici-types": "~5.26.4" } @@ -9324,9 +9324,9 @@ "dev": true }, "@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 8b0f1de9..561ebfcf 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.12.12", + "@types/node": "^20.14.2", "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", From 241e3b7eaefb5c393bd67b7d185d24f484a434f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 06:44:01 +0200 Subject: [PATCH 053/176] build(deps): bump axios from 1.6.5 to 1.7.2 (#346) Bumps [axios](https://github.com/axios/axios) from 1.6.5 to 1.7.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.5...v1.7.2) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9bae549f..ee283427 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.6.5", + "axios": "^1.7.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -2252,11 +2252,11 @@ } }, "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -9796,11 +9796,11 @@ "dev": true }, "axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "requires": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } diff --git a/package.json b/package.json index 561ebfcf..14a2e2f5 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.6.5", + "axios": "^1.7.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", From c7446974bc899607ab37a15f15d56c089d3ea9d7 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 16:25:26 +0200 Subject: [PATCH 054/176] feat: Added Visa Connector --- .env.tests | 5 +- .eslintrc | 8 +- package-lock.json | 227 +++++++++++++++++- package.json | 2 + sample.env | 9 +- src/config/Tokens.ts | 5 + src/config/dependencyConfigRun.ts | 36 ++- src/config/dependencyConfigTest.ts | 6 + src/config/validateEnv.ts | 4 + src/datasources/visa/ExperimentDataSource.ts | 12 + .../visa/ExperimentUserDataSource.ts | 19 ++ src/datasources/visa/InstitutionDataSource.ts | 18 ++ src/datasources/visa/InstrumentDataSource.ts | 16 ++ src/datasources/visa/ProposalDataSource.ts | 33 +++ src/datasources/visa/UserDataSource.ts | 37 +++ .../visa/mock/InstrumentDataSource.ts | 18 ++ .../visa/mock/ProposalDataSource.ts | 20 ++ .../visa/postgres/ExperimentDataSource.ts | 62 +++++ .../visa/postgres/ExperimentUserDataSource.ts | 71 ++++++ .../visa/postgres/InstitutionDataSource.ts | 38 +++ .../visa/postgres/InstrumentDataSource.ts | 98 ++++++++ .../visa/postgres/ProposalDataSource.ts | 71 ++++++ .../visa/postgres/UserDataSource.ts | 135 +++++++++++ .../visa/postgres/database/index.ts | 6 + .../visa/postgres/database/local.ts | 36 +++ .../visa/postgres/database/remote.ts | 10 + src/datasources/visa/records.ts | 123 ++++++++++ src/index.ts | 8 +- src/models/ProposalMessage.ts | 18 +- src/models/Visa.ts | 71 ++++++ .../consumers/scicat/scicatProposal/dto.ts | 15 ++ .../consumerCallbacks/syncVisaProposal.ts | 131 ++++++++++ .../consumers/syncProposalQueueConsumer.ts | 47 ++++ 33 files changed, 1403 insertions(+), 12 deletions(-) create mode 100644 src/datasources/visa/ExperimentDataSource.ts create mode 100644 src/datasources/visa/ExperimentUserDataSource.ts create mode 100644 src/datasources/visa/InstitutionDataSource.ts create mode 100644 src/datasources/visa/InstrumentDataSource.ts create mode 100644 src/datasources/visa/ProposalDataSource.ts create mode 100644 src/datasources/visa/UserDataSource.ts create mode 100644 src/datasources/visa/mock/InstrumentDataSource.ts create mode 100644 src/datasources/visa/mock/ProposalDataSource.ts create mode 100644 src/datasources/visa/postgres/ExperimentDataSource.ts create mode 100644 src/datasources/visa/postgres/ExperimentUserDataSource.ts create mode 100644 src/datasources/visa/postgres/InstitutionDataSource.ts create mode 100644 src/datasources/visa/postgres/InstrumentDataSource.ts create mode 100644 src/datasources/visa/postgres/ProposalDataSource.ts create mode 100644 src/datasources/visa/postgres/UserDataSource.ts create mode 100644 src/datasources/visa/postgres/database/index.ts create mode 100644 src/datasources/visa/postgres/database/local.ts create mode 100644 src/datasources/visa/postgres/database/remote.ts create mode 100644 src/datasources/visa/records.ts create mode 100644 src/models/Visa.ts create mode 100644 src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts create mode 100644 src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts diff --git a/.env.tests b/.env.tests index 67af142f..0fe7df5c 100644 --- a/.env.tests +++ b/.env.tests @@ -24,4 +24,7 @@ SYNAPSE_OAUTH_ISSUER=SAMPLE_ISSUER USER_OFFICE_CORE_EXCHANGE_NAME=user_office_backend.fanout PROPOSAL_CREATION_QUEUE_NAME=connector.proposal_creation.queue CHATROOM_CREATION_QUEUE_NAME=consumer.chatroom_creation.queue -FOLDER_CREATION_QUEUE_NAME=connector.proposals_folders_creation.queue \ No newline at end of file +FOLDER_CREATION_QUEUE_NAME=connector.proposals_folders_creation.queue +VISA_QUEUE_NAME=dummy +VISA_SYNCING_TRIGGERING_STATUSES="ALLOCATED" +VISA_DATABASE_URL=postgres://postgres:qwerty123@127.0.0.1:5434/visa \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index cccd3c67..f196f653 100644 --- a/.eslintrc +++ b/.eslintrc @@ -50,7 +50,13 @@ } } ], - "quotes": ["error", "single", { "avoidEscape": true }], + "quotes": [ + "error", + "single", + { + "avoidEscape": true + } + ], "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/naming-convention": [ "error", diff --git a/package-lock.json b/package-lock.json index ee283427..c2968627 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "@types/knex": "^0.16.1", "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.7.2", @@ -16,6 +17,7 @@ "envalid": "^8.0.0", "express": "^4.19.2", "kafkajs": "^2.2.3", + "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", @@ -1550,6 +1552,15 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/knex": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz", + "integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==", + "deprecated": "This is a stub types definition. knex provides its own type definitions, so you do not need this installed.", + "dependencies": { + "knex": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -3224,7 +3235,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -3533,6 +3543,14 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -4077,7 +4095,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { "node": ">=8.0.0" } @@ -4110,6 +4127,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4428,6 +4450,14 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5429,6 +5459,77 @@ "node": ">=6" } }, + "node_modules/knex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/knex/-/knex-3.1.0.tgz", + "integrity": "sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==", + "dependencies": { + "colorette": "2.0.19", + "commander": "^10.0.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.6.2", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=16" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "node_modules/knex/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/knex/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -6432,6 +6533,11 @@ "node": ">=8" } }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6740,6 +6846,17 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", @@ -7409,6 +7526,14 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7429,6 +7554,14 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "engines": { + "node": ">=8" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -9317,6 +9450,14 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/knex": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz", + "integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==", + "requires": { + "knex": "*" + } + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -10500,8 +10641,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -10712,6 +10852,11 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, "espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -11120,8 +11265,7 @@ "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { "version": "6.0.1", @@ -11139,6 +11283,11 @@ "get-intrinsic": "^1.1.1" } }, + "getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -11355,6 +11504,11 @@ "side-channel": "^1.0.4" } }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -12091,6 +12245,44 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "knex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/knex/-/knex-3.1.0.tgz", + "integrity": "sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==", + "requires": { + "colorette": "2.0.19", + "commander": "^10.0.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.6.2", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12781,6 +12973,11 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12988,6 +13185,14 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "requires": { + "resolve": "^1.20.0" + } + }, "reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", @@ -13482,6 +13687,11 @@ "tslib": "^2.6.2" } }, + "tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13499,6 +13709,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==" + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", diff --git a/package.json b/package.json index 14a2e2f5..0df39875 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "typescript": "^5.4.5" }, "dependencies": { + "@types/knex": "^0.16.1", "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.7.2", @@ -51,6 +52,7 @@ "envalid": "^8.0.0", "express": "^4.19.2", "kafkajs": "^2.2.3", + "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", diff --git a/sample.env b/sample.env index 3bf6bcd0..ef399096 100644 --- a/sample.env +++ b/sample.env @@ -49,8 +49,15 @@ FOLDER_CREATION_QUEUE_NAME=connector.proposals_folder_creation.queue MOODLE_EXCHANGE_NAME=moodle.folder-creation.fanout MOODLE_FOLDER_CREATION_QUEUE_NAME=connector.moodle_folder_creation.queue ONE_IDENTITY_INTEGRATION_QUEUE_NAME=connector.one_identity_integration.queue +VISA_QUEUE_NAME= ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE="Science proposal" ONE_IDENTITY_APP_SERVER_URL=https://iam-web01-dev.esss.lu.se/AppServerV9 ONE_IDENTITY_API_USER= -ONE_IDENTITY_API_PASSWORD= \ No newline at end of file +ONE_IDENTITY_API_PASSWORD= + + +VISA_QUEUE_NAME=dummy +VISA_SYNCING_TRIGGERING_STATUSES="ALLOCATED" +VISA_DATABASE_URL=postgres://postgres:qwerty123@127.0.0.1:5434/visa +ENABLE_SYNC_VISA_PROPOSALS=false \ No newline at end of file diff --git a/src/config/Tokens.ts b/src/config/Tokens.ts index abb601fe..cb7b3657 100644 --- a/src/config/Tokens.ts +++ b/src/config/Tokens.ts @@ -3,4 +3,9 @@ export const Tokens = { ProvideMessageBroker: Symbol('MessageBroker'), ConfigureLogger: Symbol('ConfigureLogger'), SynapseService: Symbol('SynapseService'), + VisaInstrumentDataSource: Symbol('VisaInstrumentDataSource'), + VisaProposalDataSource: Symbol('VisaProposalDataSource'), + VisaExperimentDataSource: Symbol('VisaExperimentDataSource'), + VisaExperimentUserDataSource: Symbol('VisaExperimentUserDataSource'), + VisaUserDataSource: Symbol('VisaUserDataSource'), }; diff --git a/src/config/dependencyConfigRun.ts b/src/config/dependencyConfigRun.ts index e57b6811..7c6310c2 100644 --- a/src/config/dependencyConfigRun.ts +++ b/src/config/dependencyConfigRun.ts @@ -1,7 +1,12 @@ import 'reflect-metadata'; import { configureGraylogLogger } from './logger/configureGrayLogLogger'; import { Tokens } from './Tokens'; -import { mapValue, str2Bool } from './utils'; +import { mapClass, mapValue, str2Bool } from './utils'; +import VisaPostgresExperimentDataSource from '../datasources/visa/postgres/ExperimentDataSource'; +import VisaPostgresExperimentUserDataSource from '../datasources/visa/postgres/ExperimentUserDataSource'; +import VisaPostgresInstrumentDataSource from '../datasources/visa/postgres/InstrumentDataSource'; +import VisaPostgresProposalDataSource from '../datasources/visa/postgres/ProposalDataSource'; +import VisaPostgresUserDataSource from '../datasources/visa/postgres/UserDataSource'; import getRabbitMqMessageBroker from '../queue/messageBroker/getRabbitMqMessageBroker'; import { SynapseService } from '../services/synapse/SynapseService'; @@ -16,9 +21,38 @@ const enableScichatRoomCreation = str2Bool( process.env.ENABLE_SCICHAT_ROOM_CREATION as string ); +const enableSyncVisaProposals = str2Bool( + process.env.ENABLE_SYNC_VISA_PROPOSALS as string +); + mapValue( Tokens.SynapseService, enableNicosToScichatMessages || enableScichatRoomCreation ? new SynapseService() : {} ); + +mapClass( + Tokens.VisaInstrumentDataSource, + enableSyncVisaProposals ? VisaPostgresInstrumentDataSource : undefined +); + +mapClass( + Tokens.VisaProposalDataSource, + enableSyncVisaProposals ? VisaPostgresProposalDataSource : undefined +); + +mapClass( + Tokens.VisaExperimentDataSource, + enableSyncVisaProposals ? VisaPostgresExperimentDataSource : undefined +); + +mapClass( + Tokens.VisaExperimentUserDataSource, + enableSyncVisaProposals ? VisaPostgresExperimentUserDataSource : undefined +); + +mapClass( + Tokens.VisaUserDataSource, + enableSyncVisaProposals ? VisaPostgresUserDataSource : undefined +); diff --git a/src/config/dependencyConfigTest.ts b/src/config/dependencyConfigTest.ts index 85e5cef3..19481b1e 100644 --- a/src/config/dependencyConfigTest.ts +++ b/src/config/dependencyConfigTest.ts @@ -6,3 +6,9 @@ import getMockMqMessageBroker from '../queue/messageBroker/getMockMessageBroker' mapValue(Tokens.ConfigureLogger, configureConsoleLogger); mapValue(Tokens.ProvideMessageBroker, getMockMqMessageBroker); + +mapValue(Tokens.VisaInstrumentDataSource, undefined); +mapValue(Tokens.VisaProposalDataSource, undefined); +mapValue(Tokens.VisaExperimentDataSource, undefined); +mapValue(Tokens.VisaExperimentUserDataSource, undefined); +mapValue(Tokens.VisaUserDataSource, undefined); diff --git a/src/config/validateEnv.ts b/src/config/validateEnv.ts index 63bd57d1..96fe2475 100644 --- a/src/config/validateEnv.ts +++ b/src/config/validateEnv.ts @@ -34,6 +34,10 @@ function validateEnv() { ONE_IDENTITY_APP_SERVER_URL: str({ default: undefined }), ONE_IDENTITY_API_USER: str({ default: undefined }), ONE_IDENTITY_API_PASSWORD: str({ default: undefined }), + USER_OFFICE_CORE_EXCHANGE_NAME: str({ default: undefined }), + VISA_QUEUE_NAME: str({ default: undefined }), + VISA_SYNCING_TRIGGERING_STATUSES: str({ default: undefined }), + VISA_DATABASE_URL: str({ default: undefined }), }); } diff --git a/src/datasources/visa/ExperimentDataSource.ts b/src/datasources/visa/ExperimentDataSource.ts new file mode 100644 index 00000000..ed2d9f6f --- /dev/null +++ b/src/datasources/visa/ExperimentDataSource.ts @@ -0,0 +1,12 @@ +import { Experiment } from '../../models/Visa'; + +export interface ExperimentDataSource { + getByProposalId(proposalId: number): Promise; + create({ + proposalPk, + instrumentId, + }: { + proposalPk: number; + instrumentId: number; + }): Promise; +} diff --git a/src/datasources/visa/ExperimentUserDataSource.ts b/src/datasources/visa/ExperimentUserDataSource.ts new file mode 100644 index 00000000..05d1121c --- /dev/null +++ b/src/datasources/visa/ExperimentUserDataSource.ts @@ -0,0 +1,19 @@ +import { ExperimentUser, User } from '../../models/Visa'; + +export interface ExperimentUserDataSource { + create({ + experimentId, + userId, + }: { + experimentId: string; + userId: string; + }): Promise; + delete({ + experimentId, + userId, + }: { + experimentId: string; + userId: string; + }): Promise; + getAllUsersByExperimentId(experimentId: string): Promise; +} diff --git a/src/datasources/visa/InstitutionDataSource.ts b/src/datasources/visa/InstitutionDataSource.ts new file mode 100644 index 00000000..f7566d3f --- /dev/null +++ b/src/datasources/visa/InstitutionDataSource.ts @@ -0,0 +1,18 @@ +import { Employer } from '../../models/Visa'; +export interface CountryPayload { + countryId?: number; + country?: string; +} +export interface InstitutionPayload { + id: number; + name: string; + country?: number; + verified: boolean; + rorId?: string; +} +export interface InstitutionDataSource { + create( + institution: InstitutionPayload, + country: CountryPayload + ): Promise; +} diff --git a/src/datasources/visa/InstrumentDataSource.ts b/src/datasources/visa/InstrumentDataSource.ts new file mode 100644 index 00000000..77fd6f38 --- /dev/null +++ b/src/datasources/visa/InstrumentDataSource.ts @@ -0,0 +1,16 @@ +import { Instrument } from '../../models/Visa'; +export interface InstrumentCreationEventPayload { + id: number; + name: string; +} + +export type InstrumentUpdationEventPayload = InstrumentCreationEventPayload; + +export type InstrumentDeletionEventPayload = InstrumentCreationEventPayload; + +export interface InstrumentDataSource { + get(id: number): Promise; + create(instrument: InstrumentCreationEventPayload): Promise; + update(instrument: InstrumentUpdationEventPayload): Promise; + delete(id: number): Promise; +} diff --git a/src/datasources/visa/ProposalDataSource.ts b/src/datasources/visa/ProposalDataSource.ts new file mode 100644 index 00000000..9d2ceb0d --- /dev/null +++ b/src/datasources/visa/ProposalDataSource.ts @@ -0,0 +1,33 @@ +import { CountryPayload, InstitutionPayload } from './InstitutionDataSource'; +import { ProposalStatusDefaultShortCodes } from '../../models/ProposalMessage'; +import { Instrument, Proposal } from '../../models/Visa'; +import { ValidProposalMessageData } from '../../queue/consumers/utils/validateProposalMessage'; +export interface ProposerPayload { + firstName?: string; + lastName?: string; + email?: string; + id?: string; + oidcSub?: string; + oauthIssuer?: string; + institution?: InstitutionPayload; + country?: CountryPayload; +} +export interface ProposalSubmissionEventPayload { + proposalPk: number; + shortCode: string; + title: string; + abstract: string; + callId: number; + newStatus: ProposalStatusDefaultShortCodes; + submitted: boolean; + proposer?: ProposerPayload; + members: ProposerPayload[]; + instruments: Instrument[]; +} +export type ProposalUpdationEventPayload = ProposalSubmissionEventPayload; +export interface ProposalDataSource { + get(id: number): Promise; + create(proposal: ValidProposalMessageData): Promise; + update(proposal: ValidProposalMessageData): Promise; + delete(id: number): Promise; +} diff --git a/src/datasources/visa/UserDataSource.ts b/src/datasources/visa/UserDataSource.ts new file mode 100644 index 00000000..1c1e6552 --- /dev/null +++ b/src/datasources/visa/UserDataSource.ts @@ -0,0 +1,37 @@ +import { User } from '../../models/Visa'; +import { ProposalUser } from '../../queue/consumers/scicat/scicatProposal/dto'; +export interface UserUpdationEventPayload { + id: number; + user_title: string; + firstname: string; + middlename: string; + lastname: string; + username: string; + preferredname: string; + oidcSub: string; + oauthRefreshToken: string; + oauthAccessToken: string; + + oauthIssuer: string; + oauthgenderccessToken: string; + nationality: number; + birthdate: string; + organisation: number; + + department: string; + position: string; + email: string; + emailVerified: boolean; + + telephone: string; + telephone_alt: string; + placeholder: string; + created: string; + updated: string; +} + +export interface UserDataSource { + create(user: ProposalUser): Promise; + update(user: UserUpdationEventPayload): Promise; + delete(userId: number): Promise; +} diff --git a/src/datasources/visa/mock/InstrumentDataSource.ts b/src/datasources/visa/mock/InstrumentDataSource.ts new file mode 100644 index 00000000..37f55527 --- /dev/null +++ b/src/datasources/visa/mock/InstrumentDataSource.ts @@ -0,0 +1,18 @@ +import { Instrument } from '../../../models/Visa'; +import { InstrumentDataSource } from '../InstrumentDataSource'; + +export default class MockInstrumentDataSource implements InstrumentDataSource { + async get(id: number): Promise { + return { id, name: 'test', shortCode: 'test' }; + } + async create(instrument: Instrument): Promise { + return instrument; + } + + async update(instrument: Instrument): Promise { + return instrument; + } + async delete(id: number): Promise { + return id; + } +} diff --git a/src/datasources/visa/mock/ProposalDataSource.ts b/src/datasources/visa/mock/ProposalDataSource.ts new file mode 100644 index 00000000..0826c702 --- /dev/null +++ b/src/datasources/visa/mock/ProposalDataSource.ts @@ -0,0 +1,20 @@ +import { Proposal } from '../../../models/Visa'; +import { ValidProposalMessageData } from '../../../queue/consumers/utils/validateProposalMessage'; +import { ProposalDataSource } from '../ProposalDataSource'; + +export default class MockProposalDataSource implements ProposalDataSource { + get(id: number): Promise { + throw new Error('Method not implemented.'); + } + async create(proposal: ValidProposalMessageData): Promise { + throw new Error('Method not implemented.'); + } + + async update(proposal: ValidProposalMessageData): Promise { + throw new Error('Method not implemented.'); + } + + async delete(id: number): Promise { + throw new Error('Method not implemented.'); + } +} diff --git a/src/datasources/visa/postgres/ExperimentDataSource.ts b/src/datasources/visa/postgres/ExperimentDataSource.ts new file mode 100644 index 00000000..e9138622 --- /dev/null +++ b/src/datasources/visa/postgres/ExperimentDataSource.ts @@ -0,0 +1,62 @@ +import database from './database'; +import { Experiment } from '../../../models/Visa'; +import { ExperimentDataSource } from '../ExperimentDataSource'; +import { ExperimentRecord, createExperimentObject } from '../records'; + +export default class PostgresExperimentDataSource + implements ExperimentDataSource +{ + private TABLE_NAME = 'experiment'; + + async getByProposalId(proposalPk: number): Promise { + return await database(this.TABLE_NAME) + .where({ + proposal_id: proposalPk, + }) + .first() + .then((experiment: ExperimentRecord | null) => { + return experiment ? createExperimentObject(experiment) : null; + }); + } + + async create({ + proposalPk, + instrumentId, + }: { + proposalPk: number; + instrumentId: number; + }): Promise { + const experimentExists = await database(this.TABLE_NAME).where({ + proposal_id: proposalPk, + }); + + if (experimentExists.length > 0) { + return await database(this.TABLE_NAME) + .where({ + proposal_id: proposalPk, + }) + .update({ + instrument_id: instrumentId, + }) + .returning(['*']) + .then((experiment: ExperimentRecord[]) => { + return createExperimentObject(experiment[0]); + }); + } + + return await database(this.TABLE_NAME) + .insert({ + id: proposalPk, + proposal_id: proposalPk, + instrument_id: instrumentId, + start_date: '2022-01-01 00:00:00', + end_date: new Date( + new Date().setFullYear(new Date().getFullYear() + 1) + ), + }) + .returning(['*']) + .then(async (experiment: ExperimentRecord[]) => { + return createExperimentObject(experiment[0]); + }); + } +} diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts new file mode 100644 index 00000000..296d9be7 --- /dev/null +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -0,0 +1,71 @@ +import database from './database'; +import { ExperimentUser, User } from '../../../models/Visa'; +import { ExperimentUserDataSource } from '../ExperimentUserDataSource'; +import { + ExperimentUserRecord, + UserRecord, + createExperimentUserObject, + createUserObject, +} from '../records'; + +export default class PostgresExperimentUserDataSource + implements ExperimentUserDataSource +{ + private TABLE_NAME = 'experiment_user'; + + async create({ + experimentId, + userId, + }: { + experimentId: string; + userId: string; + }): Promise { + const experimentUserExists = await database(this.TABLE_NAME).where({ + experiment_id: experimentId, + user_id: userId, + }); + + if (experimentUserExists.length > 0) { + return experimentUserExists[0]; + } + + return await database(this.TABLE_NAME) + .insert({ + experiment_id: experimentId, + user_id: userId, + }) + .returning(['*']) + .then((experimentUser: ExperimentUserRecord[]) => { + return createExperimentUserObject(experimentUser[0]); + }); + } + + async delete({ + experimentId, + userId, + }: { + experimentId: string; + userId: string; + }): Promise { + return await database(this.TABLE_NAME) + .where({ + experiment_id: experimentId, + user_id: userId, + }) + .del(); + } + + async getAllUsersByExperimentId(experimentId: string): Promise { + return await database(this.TABLE_NAME) + .join('users', 'users.id', '=', this.TABLE_NAME + '.user_id') + .where({ + experiment_id: experimentId, + }) + .select('users.*') + .then((users: UserRecord[]) => { + return users.map((user) => { + return createUserObject(user); + }); + }); + } +} diff --git a/src/datasources/visa/postgres/InstitutionDataSource.ts b/src/datasources/visa/postgres/InstitutionDataSource.ts new file mode 100644 index 00000000..4bc5b919 --- /dev/null +++ b/src/datasources/visa/postgres/InstitutionDataSource.ts @@ -0,0 +1,38 @@ +import database from './database'; +import { Employer } from '../../../models/Visa'; +import { + CountryPayload, + InstitutionDataSource, + InstitutionPayload, +} from '../InstitutionDataSource'; +import { EmployerRecord, createEmployerObject } from '../records'; + +export default class PostgresInstitutionDataSource + implements InstitutionDataSource +{ + private TABLE_NAME = 'employer'; + + async create( + institution: InstitutionPayload, + country: CountryPayload + ): Promise { + const institutionExists = await database(this.TABLE_NAME).where({ + name: institution.name, + }); + + if (institutionExists.length > 0) { + return institutionExists[0]; + } + + // Insert into institution table + return await database(this.TABLE_NAME) + .insert({ + id: institution.id, + name: institution.name, + }) + .returning(['*']) + .then((institution: EmployerRecord[]) => { + return createEmployerObject(institution[0]); + }); + } +} diff --git a/src/datasources/visa/postgres/InstrumentDataSource.ts b/src/datasources/visa/postgres/InstrumentDataSource.ts new file mode 100644 index 00000000..67e897eb --- /dev/null +++ b/src/datasources/visa/postgres/InstrumentDataSource.ts @@ -0,0 +1,98 @@ +import database from './database'; +import { Instrument } from '../../../models/Visa'; +import { + InstrumentCreationEventPayload, + InstrumentDataSource, + InstrumentUpdationEventPayload, +} from '../InstrumentDataSource'; +import { InstrumentRecord, createInstrumentObject } from '../records'; + +export default class PostgresInstrumentDataSource + implements InstrumentDataSource +{ + private TABLE_NAME = 'instrument'; + + async get(id: number): Promise { + return await database(this.TABLE_NAME) + .where({ + id: id, + }) + .first() + .then((instrument: InstrumentRecord | null) => { + return instrument ? createInstrumentObject(instrument) : null; + }); + } + async create( + instrument: InstrumentCreationEventPayload + ): Promise { + // Insert if not exists and return the instrument + const instrumentExists = await database(this.TABLE_NAME) + .where({ + name: instrument.name, + id: instrument.id, + }) + .first(); + + if (instrumentExists) { + return createInstrumentObject(instrumentExists); + } + + return await database(this.TABLE_NAME) + .insert({ + id: instrument.id, + name: instrument.name, + }) + .returning(['*']) + .then((instrument: InstrumentRecord[]) => { + return createInstrumentObject(instrument[0]); + }); + } + + async update( + instrument: InstrumentUpdationEventPayload + ): Promise { + const instrumentExists = await database(this.TABLE_NAME) + .where({ + id: instrument.id, + }) + .first(); + + if (instrumentExists) { + return await database(this.TABLE_NAME) + .where({ + id: instrument.id, + }) + .update({ + name: instrument.name, + }) + .returning(['*']) + .then((instrument: InstrumentRecord[]) => { + return createInstrumentObject(instrument[0]); + }); + } + + return await database(this.TABLE_NAME) + .insert({ + id: instrument.id, + name: instrument.name, + }) + .returning(['*']) + .then((instrument: InstrumentRecord[]) => { + return createInstrumentObject(instrument[0]); + }); + } + + async delete(id: number) { + await database(this.TABLE_NAME) + .where({ + id: id, + }) + .delete() + .returning(['*']) + .then((instrument: InstrumentRecord[]) => { + return createInstrumentObject(instrument[0]); + }); + + return id; + } +} diff --git a/src/datasources/visa/postgres/ProposalDataSource.ts b/src/datasources/visa/postgres/ProposalDataSource.ts new file mode 100644 index 00000000..c7e2bf51 --- /dev/null +++ b/src/datasources/visa/postgres/ProposalDataSource.ts @@ -0,0 +1,71 @@ +import database from './database'; +import { Proposal } from '../../../models/Visa'; +import { ValidProposalMessageData } from '../../../queue/consumers/utils/validateProposalMessage'; +import { ProposalDataSource } from '../ProposalDataSource'; +import { ProposalRecord, createProposalObject } from '../records'; +export default class PostgresProposalDataSource implements ProposalDataSource { + private TABLE_NAME = 'proposal'; + + async get(id: number): Promise { + return await database(this.TABLE_NAME) + .where({ + id, + }) + .first() + .then((proposal: ProposalRecord | null) => { + return proposal ? createProposalObject(proposal) : null; + }); + } + async create(proposal: ValidProposalMessageData): Promise { + return await database(this.TABLE_NAME) + .insert({ + id: proposal.proposalPk, + identifier: proposal.shortCode, + title: proposal.title, + summary: proposal.abstract, + }) + .returning(['*']) + .then(async (proposal: ProposalRecord[]) => { + return createProposalObject(proposal[0]); + }); + } + + async update(proposal: ValidProposalMessageData): Promise { + const proposalExists = await database(this.TABLE_NAME) + .where({ + id: proposal.proposalPk, + }) + .first(); + + // Update only if the Proposal exists and submitted + if (proposalExists && proposal.submitted) { + return await database(this.TABLE_NAME) + .where({ + id: proposal.proposalPk, + }) + .update({ + identifier: proposal.proposalPk, + title: proposal.title, + summary: proposal.abstract, + }) + .returning(['*']) + .then((proposal: ProposalRecord[]) => { + return createProposalObject(proposal[0]); + }); + } else return proposalExists; + } + + async delete(id: number) { + await database(this.TABLE_NAME) + .where({ + id: id, + }) + .delete() + .returning(['*']) + .then((proposal: ProposalRecord[]) => { + return createProposalObject(proposal[0]); + }); + + return id; + } +} diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts new file mode 100644 index 00000000..e8ca8f38 --- /dev/null +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -0,0 +1,135 @@ +import database from './database'; +import { Employer, User } from '../../../models/Visa'; +import { ProposalUser } from '../../../queue/consumers/scicat/scicatProposal/dto'; +import { + EmployerRecord, + UserRecord, + createEmployerObject, + createUserObject, +} from '../records'; +import { UserDataSource, UserUpdationEventPayload } from '../UserDataSource'; + +export default class PostgresUserDataSource implements UserDataSource { + private TABLE_NAME = 'users'; + private EMPLOYER_TABLE_NAME = 'employer'; + private USER_ROLE = 'user_role'; + private ROLE = 'role'; + + async create(user: ProposalUser): Promise { + if (!user.email || !user.institution) return null; + const userExists = await database(this.TABLE_NAME) + .where({ + id: user.email, + }) + .first() + .then((user: UserRecord) => { + return user ? createUserObject(user) : null; + }); + // Create an Employer, if it does not exist + let employer: Employer; + const employerExists = await database(this.EMPLOYER_TABLE_NAME) + .where({ + id: user.institution.id, + }) + .first() + .then((employer: EmployerRecord) => { + return employer ? createEmployerObject(employer) : null; + }); + if (employerExists) { + employer = employerExists; + } else { + employer = await database(this.EMPLOYER_TABLE_NAME) + .insert({ + id: user.institution.id, + name: user.institution.name, + country_code: user.country?.country?.slice(0, 10) ?? '', + }) + .returning(['*']) + .then((employer: EmployerRecord[]) => { + return createEmployerObject(employer[0]); + }); + } + if (userExists) { + // Update user table if the institution_id is different + if (userExists.affiliationId !== employer.id) { + return await database(this.TABLE_NAME) + .where({ + email: user.email, + }) + .update({ + affiliation_id: employer.id, + }) + .returning('*') + .then((user: UserRecord[]) => { + return userExists; + }); + } else { + return userExists; + } + } else { + // Insert into users table + return await database(this.TABLE_NAME) + .insert({ + id: user.email, + email: user.email, + first_name: user.firstName ?? '', + last_name: user.lastName ?? '', + instance_quota: 1, + affiliation_id: employer.id, + }) + .returning(['*']) + .then(async (user: UserRecord[]) => { + const scientificComputingRole = await database(this.ROLE) + .where({ + name: 'SCIENTIFIC_COMPUTING', + }) + .first(); + + if (scientificComputingRole) { + await database(this.USER_ROLE).insert({ + user_id: user[0].id, + role_id: scientificComputingRole.id, + }); + } + + return createUserObject(user[0]); + }); + } + } + + async update(user: UserUpdationEventPayload): Promise { + const userExists = await database(this.TABLE_NAME).where({ + email: user.email, + }); + + // Update only if the User exists and submitted + if (userExists) { + return await database(this.TABLE_NAME) + .where({ + email: user.email, + }) + .update({ + first_name: user.firstname ?? '', + last_name: user.lastname ?? '', + }) + .returning(['*']) + .then((user: UserRecord[]) => { + return createUserObject(user[0]); + }); + } else return userExists; + } + + async delete(id: number) { + await database(this.TABLE_NAME) + .where({ + id: id, + }) + .delete() + .returning(['*']) + .then((user: UserRecord[]) => { + return createUserObject(user[0]); + }); + + return id; + } +} diff --git a/src/datasources/visa/postgres/database/index.ts b/src/datasources/visa/postgres/database/index.ts new file mode 100644 index 00000000..09395d04 --- /dev/null +++ b/src/datasources/visa/postgres/database/index.ts @@ -0,0 +1,6 @@ +import LocalDB from './local'; +import RemoteDB from './remote'; + +const database = process.env.NODE_ENV == 'local' ? LocalDB : RemoteDB; + +export default database; diff --git a/src/datasources/visa/postgres/database/local.ts b/src/datasources/visa/postgres/database/local.ts new file mode 100644 index 00000000..1a42a802 --- /dev/null +++ b/src/datasources/visa/postgres/database/local.ts @@ -0,0 +1,36 @@ +import { logger } from '@user-office-software/duo-logger'; +import knex from 'knex'; + +const db = knex({ + client: 'postgresql', + connection: process.env.VISA_DATABASE_URL, + pool: { + afterCreate: function (connection: any, done: any) { + const defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone; + connection.query( + `SET timezone = "${process.env.TZ || defaultTimezone}";`, + function (err: any) { + done(err, connection); + } + ); + }, + }, +}); + +db.on('query-error', function (error: any, obj: any) { + logger.logError('QUERY ERROR', { + message: error?.message, + error, + obj, + QueryName: obj?.sql, + }); +}); + +if (process.env.DATABASE_LOG_QUERIES === '1') { + db.on('query', function ({ sql }: any) { + // TODO: add timestamp to logger (maybe only ConsoleLogger needs it) + logger.logDebug(`${new Date().toISOString()} - QUERY`, sql); + }); +} + +export default db; diff --git a/src/datasources/visa/postgres/database/remote.ts b/src/datasources/visa/postgres/database/remote.ts new file mode 100644 index 00000000..51f863d5 --- /dev/null +++ b/src/datasources/visa/postgres/database/remote.ts @@ -0,0 +1,10 @@ +import knex from 'knex'; + +const conString = process.env.VISA_DATABASE_URL; + +const db = knex({ + client: 'pg', + connection: conString, +}); + +export default db; diff --git a/src/datasources/visa/records.ts b/src/datasources/visa/records.ts new file mode 100644 index 00000000..f5054230 --- /dev/null +++ b/src/datasources/visa/records.ts @@ -0,0 +1,123 @@ +import { + Employer, + Experiment, + ExperimentUser, + Instrument, + Proposal, + Role, + User, +} from '../../models/Visa'; + +export interface EmployerRecord { + readonly id: number; + readonly country_code: string; + readonly name: string; + readonly town: string; +} + +export const createEmployerObject = (employer: EmployerRecord) => { + return new Employer( + employer.id, + employer.country_code, + employer.name, + employer.town + ); +}; +export interface InstrumentRecord { + readonly id: number; + readonly name: string; + readonly short_code: string; +} + +export const createInstrumentObject = (instrument: InstrumentRecord) => { + return new Instrument(instrument.id, instrument.name, instrument.short_code); +}; + +export interface ProposalRecord { + readonly id: number; + readonly identifier: string; + readonly public_at: string; + readonly summary: string; + readonly title: string; +} + +export const createProposalObject = (proposal: ProposalRecord) => { + return new Proposal( + proposal.id, + proposal.identifier, + proposal.public_at, + proposal.summary, + proposal.title + ); +}; + +export interface ExperimentRecord { + readonly id: string; + readonly start_date: string; + readonly end_date: string; + readonly proposal_id: number; + readonly instrument_id: number; +} + +export const createExperimentObject = (experiment: ExperimentRecord) => { + return new Experiment( + experiment.id, + experiment.start_date, + experiment.end_date, + experiment.proposal_id, + experiment.instrument_id + ); +}; + +export interface ExperimentUserRecord { + readonly experiment_id: string; + readonly user_id: string; +} + +export const createExperimentUserObject = ( + experimentUser: ExperimentUserRecord +) => { + return new ExperimentUser( + experimentUser.experiment_id, + experimentUser.user_id + ); +}; + +export interface UserRecord { + readonly id: string; + readonly activated_at: string; + readonly email: string; + readonly first_name: string; + readonly last_name: string; + readonly instance_quota: string; + readonly last_seen_at: string; + readonly affiliation_id: number; +} + +export const createUserObject = (user: UserRecord) => { + return new User( + user.id, + user.activated_at, + user.email, + user.first_name, + user.last_name, + user.instance_quota, + user.last_seen_at, + user.affiliation_id + ); +}; + +export interface RoleRecord { + readonly id: number; + readonly description: string; + readonly name: string; +} + +export const createRoleObject = (role: RoleRecord) => { + return new Role(role.id, role.description, role.name); +}; + +export interface RoleUser { + readonly role_id: number; + readonly user_id: number; +} diff --git a/src/index.ts b/src/index.ts index 22ac52f5..f86bd995 100644 --- a/src/index.ts +++ b/src/index.ts @@ -49,6 +49,10 @@ async function bootstrap() { process.env.ENABLE_ONE_IDENTITY_INTEGRATION as string ); + const enableSyncVisaProposals = str2Bool( + process.env.ENABLE_SYNC_VISA_PROPOSALS as string + ); + logger.logInfo('Services configuration', { SciCat_Proposal_Upsert: enableScicatProposalUpsert, Scichat_Room_Creation: enableScichatRoomCreation, @@ -56,6 +60,7 @@ async function bootstrap() { Nicos_to_Scichat_Messages: enableNicosToScichatMessages, Moodle_Folders_Creation: enableMoodleFoldersCreation, One_Identity_Integration: enableOneIdentityIntegration, + Sync_Visa_Proposals: enableSyncVisaProposals, }); app.use(healthCheck()).use(readinessCheck()); @@ -73,7 +78,8 @@ async function bootstrap() { enableScichatRoomCreation || enableProposalFoldersCreation || enableMoodleFoldersCreation || - enableOneIdentityIntegration + enableOneIdentityIntegration || + enableSyncVisaProposals ) { startRabbitMQHandling(); } diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index 702ecccd..b61dfb02 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -6,12 +6,28 @@ export type Instrument = { allocatedTime: number; }; +export enum ProposalStatusDefaultShortCodes { + DRAFT = 'DRAFT', + FEASIBILITY_REVIEW = 'FEASIBILITY_REVIEW', + NOT_FEASIBLE = 'NOT_FEASIBLE', + SEP_SELECTION = 'SEP_SELECTION', + SEP_REVIEW = 'SEP_REVIEW', + ALLOCATED = 'ALLOCATED', + NOT_ALLOCATED = 'NOT_ALLOCATED', + SCHEDULING = 'SCHEDULING', + EXPIRED = 'EXPIRED', + EDITABLE_SUBMITTED = 'EDITABLE_SUBMITTED', + EDITABLE_SUBMITTED_INTERNAL = 'EDITABLE_SUBMITTED_INTERNAL', +} + export type ProposalMessageData = { proposalPk: number; shortCode: string; title: string; abstract: string; - newStatus?: string; + callId: number; + newStatus?: ProposalStatusDefaultShortCodes; + submitted: boolean; members: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; diff --git a/src/models/Visa.ts b/src/models/Visa.ts new file mode 100644 index 00000000..beb82af6 --- /dev/null +++ b/src/models/Visa.ts @@ -0,0 +1,71 @@ +export class Experiment { + constructor( + public id: string, + public startDate: string, + public endDate: string, + public instrumentId: number, + public proposalId: number + ) {} +} + +export class Instrument { + constructor( + public id: number, + public name: string, + public shortCode: string + ) {} +} + +export class Proposal { + constructor( + public id: number, + public identifier: string, + public publicAt: string, + public summary: string, + public title: string + ) {} +} + +export class Role { + constructor( + public id: number, + public description: string, + public name: string + ) {} +} + +export class UserRole { + constructor( + public userId: number, + public roleId: number + ) {} +} + +export class User { + constructor( + public id: string, + public activatedAt: string, + public email: string, + public firstName: string, + public lastName: string, + public instanceQuota: string, + public lastSeenAt: string, + public affiliationId: number + ) {} +} + +export class Employer { + constructor( + public id: number, + public countryCode: string, + public name: string, + public town: string + ) {} +} + +export class ExperimentUser { + constructor( + public experimentId: string, + public userId: string + ) {} +} diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index 767db2bc..dd0c6ac8 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -31,6 +31,19 @@ export type UpdateProposalDto = { MeasurementPeriodList?: any[]; }; +export interface Institution { + id: number; + name: string; + country?: number; + verified: boolean; + rorId?: string; +} + +export interface Country { + countryId?: number; + country?: string; +} + export interface ProposalUser { id: number; firstName: string; @@ -38,6 +51,8 @@ export interface ProposalUser { email: string; oidcSub: string; oauthIssuer?: string; + institution?: Institution; + country?: Country; } export interface ProposalAcceptedMessage { diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts new file mode 100644 index 00000000..1ef0ff84 --- /dev/null +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -0,0 +1,131 @@ +import { container } from 'tsyringe'; + +import { Tokens } from '../../../../config/Tokens'; +import { ExperimentDataSource } from '../../../../datasources/visa/ExperimentDataSource'; +import { ExperimentUserDataSource } from '../../../../datasources/visa/ExperimentUserDataSource'; +import { InstrumentDataSource } from '../../../../datasources/visa/InstrumentDataSource'; +import { ProposalDataSource } from '../../../../datasources/visa/ProposalDataSource'; +import { UserDataSource } from '../../../../datasources/visa/UserDataSource'; +import { ProposalUser } from '../../scicat/scicatProposal/dto'; +import { ValidProposalMessageData } from '../../utils/validateProposalMessage'; + +async function createUserAndAssignToExperiment( + user: ProposalUser, + proposalPk: number +) { + const userDataSource = container.resolve( + Tokens.VisaUserDataSource + ); + + const experimentDataSource = container.resolve( + Tokens.VisaExperimentDataSource + ); + + const experimentUserDataSource = container.resolve( + Tokens.VisaExperimentUserDataSource + ); + + const createdUser = await userDataSource.create(user); + const experiment = await experimentDataSource.getByProposalId(proposalPk); + if (experiment && createdUser) { + await experimentUserDataSource.create({ + experimentId: experiment.id, + userId: createdUser.id, + }); + } +} + +async function deleteMissingUsersFromExperiment( + proposalPk: number, + allProposalUsers: ProposalUser[] +) { + const experimentDataSource = container.resolve( + Tokens.VisaExperimentDataSource + ); + const experimentUserDataSource = container.resolve( + Tokens.VisaExperimentUserDataSource + ); + + const experiment = await experimentDataSource.getByProposalId(proposalPk); + if (!experiment) return; + + const experimentUsers = + await experimentUserDataSource.getAllUsersByExperimentId( + experiment.id.toString() + ); + + for (const experimentUser of experimentUsers) { + if ( + !allProposalUsers.some((member) => member.email === experimentUser.email) + ) { + await experimentUserDataSource.delete({ + experimentId: experiment.id, + userId: experimentUser.id, + }); + } + } +} +export async function syncVisaProposal( + proposalWithNewStatus: ValidProposalMessageData +) { + const proposalDatasource = container.resolve( + Tokens.VisaProposalDataSource + ); + + const experimentDataSource = container.resolve( + Tokens.VisaExperimentDataSource + ); + + const instrumentDataSource = container.resolve( + Tokens.VisaInstrumentDataSource + ); + + // Create New Proposal + let proposal = await proposalDatasource.get(proposalWithNewStatus.proposalPk); + if (!proposal) { + proposal = await proposalDatasource.create(proposalWithNewStatus); + } + // Get Instrument + for (const proposalInstrument of proposalWithNewStatus.instruments) { + let instrument = await instrumentDataSource.get(proposalInstrument.id); + + if (!instrument) { + instrument = await instrumentDataSource.create({ + id: proposalInstrument.id, + name: proposalInstrument.shortCode, + }); + } + // Assign Instrument to Proposal and create an Experiment + await experimentDataSource.create({ + proposalPk: proposal.id, + instrumentId: instrument.id, + }); + } + + const proposersAndCoproposers = [ + ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), + ...proposalWithNewStatus.members, + ]; + // // Create new user for the proposer + // if (proposalWithNewStatus.proposer) { + // await createUserAndAssignToExperiment( + // proposalWithNewStatus.proposer, + // proposalWithNewStatus.proposalPk + // ); + // } + + // Create new user for the co-proposer + // const members = proposalWithNewStatus.members; + for (const member of proposersAndCoproposers) { + await createUserAndAssignToExperiment( + member, + proposalWithNewStatus.proposalPk + ); + } + + // Delete the users that are saved in the experiment users table, but not in the Proposal Payload + await deleteMissingUsersFromExperiment( + proposalWithNewStatus.proposalPk, + proposersAndCoproposers + ); +} diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts new file mode 100644 index 00000000..a2c104df --- /dev/null +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -0,0 +1,47 @@ +import { logger } from '@user-office-software/duo-logger'; +import { ConsumerCallback } from '@user-office-software/duo-message-broker'; + +import { Event } from '../../../../models/Event'; +import { QueueConsumer } from '../../QueueConsumer'; +import { hasTriggeringStatus } from '../../utils/hasTriggeringStatus'; +import { hasTriggeringType } from '../../utils/hasTriggeringType'; +import { validateProposalMessage } from '../../utils/validateProposalMessage'; +import { syncVisaProposal } from '../consumerCallbacks/syncVisaProposal'; + +const EVENTS_FOR_HANDLING = [ + Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, + Event.PROPOSAL_STATUS_CHANGED_BY_USER, + Event.PROPOSAL_STATUS_ACTION_EXECUTED, +]; + +const triggeringStatuses = + process.env.PROPOSAL_FOLDERS_CREATION_TRIGGERING_STATUSES?.split(', '); + +export class SyncProposalQueueConsumer extends QueueConsumer { + getQueueName(): string { + return process.env.VISA_QUEUE_NAME as string; + } + getExchangeName(): string { + return process.env.USER_OFFICE_CORE_EXCHANGE_NAME as string; + } + onMessage: ConsumerCallback = async (type, message) => { + if (!hasTriggeringType(type, EVENTS_FOR_HANDLING)) { + return; + } + + logger.logInfo('VisaQueueConsumer', { + type, + message, + }); + + const hasStatus = hasTriggeringStatus(message, triggeringStatuses); + + if (!hasStatus) { + return; + } + + const proposalMessage = validateProposalMessage(message); + + syncVisaProposal(proposalMessage); + }; +} From 2577573704815dfb0e540c0ea45c0aa2ed19cf87 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 16:39:15 +0200 Subject: [PATCH 055/176] fix: Adding pg as db adapter --- package-lock.json | 380 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 6 +- 2 files changed, 383 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2968627..29702e7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@types/knex": "^0.16.1", "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.7.2", @@ -19,6 +18,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", + "pg": "^8.11.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" @@ -26,7 +26,9 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", + "@types/knex": "^0.16.1", "@types/node": "^20.14.2", + "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.11.0", "eslint": "^8.57.0", @@ -1557,6 +1559,7 @@ "resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz", "integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==", "deprecated": "This is a stub types definition. knex provides its own type definitions, so you do not need this installed.", + "dev": true, "dependencies": { "knex": "*" } @@ -1575,6 +1578,17 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -6348,6 +6362,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -6533,11 +6553,154 @@ "node": ">=8" } }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, "node_modules/pg-connection-string": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "node_modules/pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "dev": true, + "dependencies": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pg/node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "node_modules/pg/node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pg/node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pg/node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6640,6 +6803,51 @@ "node": ">=8" } }, + "node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "dependencies": { + "obuf": "~1.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7324,6 +7532,14 @@ "source-map": "^0.6.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -9454,6 +9670,7 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz", "integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==", + "dev": true, "requires": { "knex": "*" } @@ -9472,6 +9689,17 @@ "undici-types": "~5.26.4" } }, + "@types/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "dev": true, + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -12842,6 +13070,12 @@ "es-abstract": "^1.22.1" } }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -12973,11 +13207,117 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "requires": { + "pg-cloudflare": "^1.1.1", + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "dependencies": { + "pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + } + } + }, + "pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, "pg-connection-string": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true + }, + "pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "requires": {} + }, + "pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "dev": true, + "requires": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -13049,6 +13389,39 @@ } } }, + "postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true + }, + "postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "requires": { + "obuf": "~1.1.2" + } + }, + "postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "dev": true + }, + "postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true + }, + "postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13543,6 +13916,11 @@ "source-map": "^0.6.0" } }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", diff --git a/package.json b/package.json index 0df39875..117e7d37 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,8 @@ "license": "MIT", "devDependencies": { "@types/express": "^4.17.21", + "@types/knex": "^0.16.1", + "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", "@types/node": "^20.14.2", "@typescript-eslint/eslint-plugin": "^7.13.0", @@ -44,7 +46,6 @@ "typescript": "^5.4.5" }, "dependencies": { - "@types/knex": "^0.16.1", "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", "axios": "^1.7.2", @@ -53,9 +54,10 @@ "express": "^4.19.2", "kafkajs": "^2.2.3", "knex": "^3.1.0", + "pg": "^8.11.3", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" } -} +} \ No newline at end of file From 1c8c16c35cf0804a4a1cad1e73a26704ca1971af Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 17:05:52 +0200 Subject: [PATCH 056/176] fix: Adding the visa queue listener to the main. Attached console log for debugging. --- src/config/validateEnv.ts | 1 + .../consumers/visa/consumers/syncProposalQueueConsumer.ts | 6 ++++++ src/queue/queueHandling.ts | 2 ++ 3 files changed, 9 insertions(+) diff --git a/src/config/validateEnv.ts b/src/config/validateEnv.ts index 96fe2475..df7e4bf8 100644 --- a/src/config/validateEnv.ts +++ b/src/config/validateEnv.ts @@ -25,6 +25,7 @@ function validateEnv() { ENABLE_PROPOSAL_FOLDERS_CREATION: bool({ default: false }), ENABLE_MOODLE_FOLDERS_CREATION: bool({ default: false }), ENABLE_ONE_IDENTITY_INTEGRATION: bool({ default: false }), + ENABLE_SYNC_VISA_PROPOSALS: bool({ default: false }), PROPOSAL_CREATION_QUEUE_NAME: str({ default: undefined }), CHATROOM_CREATION_QUEUE_NAME: str({ default: undefined }), FOLDER_CREATION_QUEUE_NAME: str({ default: undefined }), diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index a2c104df..81f779b6 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -25,6 +25,9 @@ export class SyncProposalQueueConsumer extends QueueConsumer { return process.env.USER_OFFICE_CORE_EXCHANGE_NAME as string; } onMessage: ConsumerCallback = async (type, message) => { + console.log( + '===================Message received in SyncProposalQueueConsumer===================' + ); if (!hasTriggeringType(type, EVENTS_FOR_HANDLING)) { return; } @@ -43,5 +46,8 @@ export class SyncProposalQueueConsumer extends QueueConsumer { const proposalMessage = validateProposalMessage(message); syncVisaProposal(proposalMessage); + console.log( + '===================SyncProposalQueueConsumer DONE===================' + ); }; } diff --git a/src/queue/queueHandling.ts b/src/queue/queueHandling.ts index 1f79839e..e221b72e 100644 --- a/src/queue/queueHandling.ts +++ b/src/queue/queueHandling.ts @@ -5,6 +5,7 @@ import { OneIdentityIntegrationQueueConsumer } from './consumers/oneidentity/One import { ChatroomCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer'; import { FolderCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer'; import { ProposalCreationQueueConsumer } from './consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer'; +import { SyncProposalQueueConsumer } from './consumers/visa/consumers/syncProposalQueueConsumer'; import { GetMessageBroker } from './messageBroker/getMessageBroker'; import { Tokens } from '../config/Tokens'; import { str2Bool } from '../config/utils'; @@ -19,6 +20,7 @@ const queueConsumers = { ENABLE_PROPOSAL_FOLDERS_CREATION: FolderCreationQueueConsumer, ENABLE_MOODLE_FOLDERS_CREATION: MoodleFolderCreationQueueConsumer, ENABLE_ONE_IDENTITY_INTEGRATION: OneIdentityIntegrationQueueConsumer, + ENABLE_SYNC_VISA_PROPOSALS: SyncProposalQueueConsumer, }; const startQueueHandling = async (): Promise => { From e4c4128516f0b66535043d2002d97239dc7450a8 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 17:07:56 +0200 Subject: [PATCH 057/176] console logging --- src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 81f779b6..ea4a1265 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -42,7 +42,7 @@ export class SyncProposalQueueConsumer extends QueueConsumer { if (!hasStatus) { return; } - + console.log('Checkpoint1'); const proposalMessage = validateProposalMessage(message); syncVisaProposal(proposalMessage); From 245ccafe77e5ae5ef2fba743fa742d21875a53cc Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 17:09:04 +0200 Subject: [PATCH 058/176] console logging --- .../consumers/visa/consumers/syncProposalQueueConsumer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index ea4a1265..d26e7393 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -36,13 +36,13 @@ export class SyncProposalQueueConsumer extends QueueConsumer { type, message, }); - + console.log('Checkpoint1'); const hasStatus = hasTriggeringStatus(message, triggeringStatuses); if (!hasStatus) { return; } - console.log('Checkpoint1'); + console.log('Checkpoint2'); const proposalMessage = validateProposalMessage(message); syncVisaProposal(proposalMessage); From 008d198dd2903f653ee7ff0db588562eda6c67d2 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 17:13:06 +0200 Subject: [PATCH 059/176] console logging --- src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index d26e7393..fc97467e 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -37,6 +37,8 @@ export class SyncProposalQueueConsumer extends QueueConsumer { message, }); console.log('Checkpoint1'); + console.log({ EVENTS_FOR_HANDLING, type }); + const hasStatus = hasTriggeringStatus(message, triggeringStatuses); if (!hasStatus) { From 2545ea89bd41f7bec406490b38ba723a904e5f74 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 17 Jun 2024 17:16:00 +0200 Subject: [PATCH 060/176] console logging --- .../consumers/visa/consumers/syncProposalQueueConsumer.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index fc97467e..d48910b6 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -15,7 +15,7 @@ const EVENTS_FOR_HANDLING = [ ]; const triggeringStatuses = - process.env.PROPOSAL_FOLDERS_CREATION_TRIGGERING_STATUSES?.split(', '); + process.env.VISA_SYNCING_TRIGGERING_STATUSES?.split(', '); export class SyncProposalQueueConsumer extends QueueConsumer { getQueueName(): string { @@ -36,15 +36,12 @@ export class SyncProposalQueueConsumer extends QueueConsumer { type, message, }); - console.log('Checkpoint1'); - console.log({ EVENTS_FOR_HANDLING, type }); const hasStatus = hasTriggeringStatus(message, triggeringStatuses); if (!hasStatus) { return; } - console.log('Checkpoint2'); const proposalMessage = validateProposalMessage(message); syncVisaProposal(proposalMessage); From 186da7aa83a2dc91730d557c7ff39d0d50a68a70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 08:34:22 +0200 Subject: [PATCH 061/176] build(deps-dev): bump ts-jest from 29.1.2 to 29.1.5 (#358) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.1.2 to 29.1.5. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.1.2...v29.1.5) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 20 ++++++++++++-------- package.json | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee283427..a42471f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.5", "prettier": "3.2.5", - "ts-jest": "^29.1.2", + "ts-jest": "^29.1.5", "typescript": "^5.4.5" }, "engines": { @@ -7484,9 +7484,9 @@ } }, "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -7502,10 +7502,11 @@ "ts-jest": "cli.js" }, "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -7515,6 +7516,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -13537,9 +13541,9 @@ "requires": {} }, "ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", "dev": true, "requires": { "bs-logger": "0.x", diff --git a/package.json b/package.json index 14a2e2f5..e0f0352a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.5", "prettier": "3.2.5", - "ts-jest": "^29.1.2", + "ts-jest": "^29.1.5", "typescript": "^5.4.5" }, "dependencies": { From 255c6b95b4953fa8bdba928b13fc6e8ea793ab11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 09:00:47 +0200 Subject: [PATCH 062/176] build(deps-dev): bump @typescript-eslint/parser from 7.11.0 to 7.13.1 (#359) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.11.0 to 7.13.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.13.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index a42471f1..06a9c536 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.14.2", "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.11.0", + "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1656,15 +1656,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", + "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.11.0", - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/typescript-estree": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4" }, "engines": { @@ -1684,13 +1684,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", - "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1701,9 +1701,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", - "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1714,13 +1714,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", - "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1742,12 +1742,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", - "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/types": "7.13.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9411,42 +9411,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", + "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.11.0", - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/typescript-estree": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", - "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" } }, "@typescript-eslint/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", - "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", - "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.11.0", - "@typescript-eslint/visitor-keys": "7.11.0", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9456,12 +9456,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", - "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.11.0", + "@typescript-eslint/types": "7.13.1", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index e0f0352a..59b1d574 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.14.2", "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.11.0", + "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From 48ac274f8fb3827ba25e93c8505f3a59adf34aaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:56:54 +0200 Subject: [PATCH 063/176] build(deps-dev): bump lint-staged from 15.2.5 to 15.2.7 (#361) Bumps [lint-staged](https://github.com/okonet/lint-staged) from 15.2.5 to 15.2.7. - [Release notes](https://github.com/okonet/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/okonet/lint-staged/compare/v15.2.5...v15.2.7) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06a9c536..39aa938d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.7", "prettier": "3.2.5", "ts-jest": "^29.1.5", "typescript": "^5.4.5" @@ -5470,9 +5470,9 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "dependencies": { "chalk": "~5.3.0", @@ -12124,9 +12124,9 @@ "dev": true }, "lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "requires": { "chalk": "~5.3.0", diff --git a/package.json b/package.json index 59b1d574..c9d6fee2 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.7", "prettier": "3.2.5", "ts-jest": "^29.1.5", "typescript": "^5.4.5" From 4fa692a350594061fef8ba82bad96e75ba7b9da1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:36:31 +0200 Subject: [PATCH 064/176] build(deps-dev): bump @types/node from 20.14.2 to 20.14.5 (#362) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.14.2 to 20.14.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39aa938d..3d37b3e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.14.2", + "@types/node": "^20.14.5", "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", @@ -1557,9 +1557,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "version": "20.14.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", + "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", "dependencies": { "undici-types": "~5.26.4" } @@ -9328,9 +9328,9 @@ "dev": true }, "@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "version": "20.14.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", + "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index c9d6fee2..8a9eaca5 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.14.2", + "@types/node": "^20.14.5", "@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", From 145924581e04544e464ce6d8e860376d9df38a76 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Tue, 18 Jun 2024 23:57:42 +0200 Subject: [PATCH 065/176] console logging --- src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 1ef0ff84..2b9f3cf8 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -26,6 +26,7 @@ async function createUserAndAssignToExperiment( ); const createdUser = await userDataSource.create(user); + console.log({ createdUser }); const experiment = await experimentDataSource.getByProposalId(proposalPk); if (experiment && createdUser) { await experimentUserDataSource.create({ @@ -117,6 +118,8 @@ export async function syncVisaProposal( // Create new user for the co-proposer // const members = proposalWithNewStatus.members; for (const member of proposersAndCoproposers) { + console.log('-=======members==========='); + console.log({ member }); await createUserAndAssignToExperiment( member, proposalWithNewStatus.proposalPk From 568803350feb4d8ece642e1388da095c18d0556b Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:01:30 +0200 Subject: [PATCH 066/176] console logging --- src/datasources/visa/postgres/UserDataSource.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index e8ca8f38..ce3015c7 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -25,6 +25,7 @@ export default class PostgresUserDataSource implements UserDataSource { .then((user: UserRecord) => { return user ? createUserObject(user) : null; }); + console.log({ userExists }); // Create an Employer, if it does not exist let employer: Employer; const employerExists = await database(this.EMPLOYER_TABLE_NAME) @@ -35,6 +36,7 @@ export default class PostgresUserDataSource implements UserDataSource { .then((employer: EmployerRecord) => { return employer ? createEmployerObject(employer) : null; }); + console.log({ employerExists }); if (employerExists) { employer = employerExists; } else { @@ -50,6 +52,7 @@ export default class PostgresUserDataSource implements UserDataSource { }); } if (userExists) { + console.log('****************'); // Update user table if the institution_id is different if (userExists.affiliationId !== employer.id) { return await database(this.TABLE_NAME) From 2c583db0d6728ab7b2222b2fa6521546400a1f8a Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:08:09 +0200 Subject: [PATCH 067/176] console logging --- src/datasources/visa/postgres/ExperimentUserDataSource.ts | 4 +++- .../consumers/visa/consumerCallbacks/syncVisaProposal.ts | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts index 296d9be7..34c60aff 100644 --- a/src/datasources/visa/postgres/ExperimentUserDataSource.ts +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -24,7 +24,7 @@ export default class PostgresExperimentUserDataSource experiment_id: experimentId, user_id: userId, }); - + console.log({ experimentUserExists }); if (experimentUserExists.length > 0) { return experimentUserExists[0]; } @@ -36,6 +36,8 @@ export default class PostgresExperimentUserDataSource }) .returning(['*']) .then((experimentUser: ExperimentUserRecord[]) => { + console.log('%%%%%%%%%%%%%%%'); + return createExperimentUserObject(experimentUser[0]); }); } diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 2b9f3cf8..4f5a6bec 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -29,6 +29,9 @@ async function createUserAndAssignToExperiment( console.log({ createdUser }); const experiment = await experimentDataSource.getByProposalId(proposalPk); if (experiment && createdUser) { + console.log('========experiment && createdUser========='); + console.log(experiment.id); + console.log(createdUser.id); await experimentUserDataSource.create({ experimentId: experiment.id, userId: createdUser.id, From 118beb29f972a5bc9dd5dc5407be1a5e7fad93c6 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:17:46 +0200 Subject: [PATCH 068/176] console logging --- src/datasources/visa/postgres/ExperimentUserDataSource.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts index 34c60aff..fe3f7e8e 100644 --- a/src/datasources/visa/postgres/ExperimentUserDataSource.ts +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -39,6 +39,9 @@ export default class PostgresExperimentUserDataSource console.log('%%%%%%%%%%%%%%%'); return createExperimentUserObject(experimentUser[0]); + }) + .catch((e) => { + console.log({ e }); }); } From 215be306e08df4dd3c7ec6c1430afd4266d82459 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:18:46 +0200 Subject: [PATCH 069/176] console logging --- src/datasources/visa/postgres/ExperimentUserDataSource.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts index fe3f7e8e..a03fa362 100644 --- a/src/datasources/visa/postgres/ExperimentUserDataSource.ts +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -42,6 +42,8 @@ export default class PostgresExperimentUserDataSource }) .catch((e) => { console.log({ e }); + + return null as unknown as ExperimentUser; }); } From 7a283eb2e8d97e43ce23e61b3a40d232d1cae5e1 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:20:13 +0200 Subject: [PATCH 070/176] console logging --- src/datasources/visa/postgres/ExperimentUserDataSource.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts index a03fa362..9510ae5e 100644 --- a/src/datasources/visa/postgres/ExperimentUserDataSource.ts +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -36,6 +36,7 @@ export default class PostgresExperimentUserDataSource }) .returning(['*']) .then((experimentUser: ExperimentUserRecord[]) => { + console.log({ experimentId, userId }); console.log('%%%%%%%%%%%%%%%'); return createExperimentUserObject(experimentUser[0]); From bb511cf47aecb3bc89dfbc88c1eef03864f27a2f Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 19 Jun 2024 00:24:33 +0200 Subject: [PATCH 071/176] Removed console logging --- .../visa/postgres/ExperimentUserDataSource.ts | 9 --------- src/datasources/visa/postgres/UserDataSource.ts | 3 --- .../consumers/visa/consumerCallbacks/syncVisaProposal.ts | 6 ------ .../visa/consumers/syncProposalQueueConsumer.ts | 6 ------ 4 files changed, 24 deletions(-) diff --git a/src/datasources/visa/postgres/ExperimentUserDataSource.ts b/src/datasources/visa/postgres/ExperimentUserDataSource.ts index 9510ae5e..33299066 100644 --- a/src/datasources/visa/postgres/ExperimentUserDataSource.ts +++ b/src/datasources/visa/postgres/ExperimentUserDataSource.ts @@ -24,7 +24,6 @@ export default class PostgresExperimentUserDataSource experiment_id: experimentId, user_id: userId, }); - console.log({ experimentUserExists }); if (experimentUserExists.length > 0) { return experimentUserExists[0]; } @@ -36,15 +35,7 @@ export default class PostgresExperimentUserDataSource }) .returning(['*']) .then((experimentUser: ExperimentUserRecord[]) => { - console.log({ experimentId, userId }); - console.log('%%%%%%%%%%%%%%%'); - return createExperimentUserObject(experimentUser[0]); - }) - .catch((e) => { - console.log({ e }); - - return null as unknown as ExperimentUser; }); } diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index ce3015c7..e8ca8f38 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -25,7 +25,6 @@ export default class PostgresUserDataSource implements UserDataSource { .then((user: UserRecord) => { return user ? createUserObject(user) : null; }); - console.log({ userExists }); // Create an Employer, if it does not exist let employer: Employer; const employerExists = await database(this.EMPLOYER_TABLE_NAME) @@ -36,7 +35,6 @@ export default class PostgresUserDataSource implements UserDataSource { .then((employer: EmployerRecord) => { return employer ? createEmployerObject(employer) : null; }); - console.log({ employerExists }); if (employerExists) { employer = employerExists; } else { @@ -52,7 +50,6 @@ export default class PostgresUserDataSource implements UserDataSource { }); } if (userExists) { - console.log('****************'); // Update user table if the institution_id is different if (userExists.affiliationId !== employer.id) { return await database(this.TABLE_NAME) diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 4f5a6bec..1ef0ff84 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -26,12 +26,8 @@ async function createUserAndAssignToExperiment( ); const createdUser = await userDataSource.create(user); - console.log({ createdUser }); const experiment = await experimentDataSource.getByProposalId(proposalPk); if (experiment && createdUser) { - console.log('========experiment && createdUser========='); - console.log(experiment.id); - console.log(createdUser.id); await experimentUserDataSource.create({ experimentId: experiment.id, userId: createdUser.id, @@ -121,8 +117,6 @@ export async function syncVisaProposal( // Create new user for the co-proposer // const members = proposalWithNewStatus.members; for (const member of proposersAndCoproposers) { - console.log('-=======members==========='); - console.log({ member }); await createUserAndAssignToExperiment( member, proposalWithNewStatus.proposalPk diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index d48910b6..1ce90ec8 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -25,9 +25,6 @@ export class SyncProposalQueueConsumer extends QueueConsumer { return process.env.USER_OFFICE_CORE_EXCHANGE_NAME as string; } onMessage: ConsumerCallback = async (type, message) => { - console.log( - '===================Message received in SyncProposalQueueConsumer===================' - ); if (!hasTriggeringType(type, EVENTS_FOR_HANDLING)) { return; } @@ -45,8 +42,5 @@ export class SyncProposalQueueConsumer extends QueueConsumer { const proposalMessage = validateProposalMessage(message); syncVisaProposal(proposalMessage); - console.log( - '===================SyncProposalQueueConsumer DONE===================' - ); }; } From 2c36c4dd4cec3329ace9bb551a53147cd0d6a05a Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 20 Jun 2024 10:03:23 +0200 Subject: [PATCH 072/176] fix: throw axios error with correct message. (#350) * fix: improve error handling for Scichat room create flow * fix: Improve error handling for Scichat room create flow * fix: Improve error handling for inviting users in SynapseService --- src/config/utils.spec.ts | 58 +++++-- src/config/utils.ts | 35 +++-- src/services/synapse/SynapseService.spec.ts | 158 ++++++++++++++++++++ src/services/synapse/SynapseService.ts | 36 ++++- 4 files changed, 256 insertions(+), 31 deletions(-) create mode 100644 src/services/synapse/SynapseService.spec.ts diff --git a/src/config/utils.spec.ts b/src/config/utils.spec.ts index bc5cea5b..15880d38 100644 --- a/src/config/utils.spec.ts +++ b/src/config/utils.spec.ts @@ -1,12 +1,52 @@ import { str2Bool } from './utils'; +jest.mock('axios', () => ({ + __esModule: true, + default: jest.fn(() => + Promise.reject({ + response: { + data: { + error: 'Axios Fetch Error', + }, + }, + }) + ), + isAxiosError: jest.requireActual('axios').isAxiosError, + AxiosHeaders: jest.requireActual('axios').AxiosHeaders, +})); -test('Should able to create boolean config', () => { - expect(str2Bool('true')).toBe(true); - expect(str2Bool('True')).toBe(true); - expect(str2Bool('1')).toBe(true); - expect(str2Bool('false')).toBe(false); - expect(str2Bool('False')).toBe(false); - expect(str2Bool('0')).toBe(false); - expect(str2Bool('othervalue')).toBe(false); - expect(str2Bool('10')).toBe(false); +describe('utils', () => { + beforeEach(() => { + jest.resetModules(); + }); + it('Should able to create boolean config', () => { + expect(str2Bool('true')).toBe(true); + expect(str2Bool('True')).toBe(true); + expect(str2Bool('1')).toBe(true); + expect(str2Bool('false')).toBe(false); + expect(str2Bool('False')).toBe(false); + expect(str2Bool('0')).toBe(false); + expect(str2Bool('othervalue')).toBe(false); + expect(str2Bool('10')).toBe(false); + }); + + it('axiosFetch function should throw correct error message', async () => { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const axiosFetch = require('./utils').axiosFetch; + const url = 'http://example.com'; + const option = { + method: 'GET', + headers: {}, + body: '', + }; + + expect.assertions(1); + + await expect(axiosFetch(url, option)).rejects.toEqual({ + response: { + data: { + error: 'Axios Fetch Error', + }, + }, + }); + }); }); diff --git a/src/config/utils.ts b/src/config/utils.ts index 08a769cb..622e8803 100644 --- a/src/config/utils.ts +++ b/src/config/utils.ts @@ -1,4 +1,4 @@ -import axios, { AxiosHeaders, AxiosRequestConfig } from 'axios'; +import axios, { AxiosHeaders, AxiosRequestConfig, isAxiosError } from 'axios'; import { container, Lifecycle } from 'tsyringe'; export const mapClass = ( @@ -40,17 +40,24 @@ export const axiosFetch = async ( data: body, headers, } as AxiosRequestConfig; - const axiosResponse = await axios(axiosOptions); - - const { data, status, statusText, headers: axiosHeaders } = axiosResponse; - - const responseHeaders = new AxiosHeaders(axiosHeaders as AxiosHeaders); - - const response = new Response(JSON.stringify(data), { - status, - statusText, - headers: responseHeaders, - }); - - return response; + try { + const axiosResponse = await axios(axiosOptions); + + const { data, status, statusText, headers: axiosHeaders } = axiosResponse; + + const responseHeaders = new AxiosHeaders(axiosHeaders as AxiosHeaders); + + const response = new Response(JSON.stringify(data), { + status, + statusText, + headers: responseHeaders, + }); + + return response; + } catch (error: unknown) { + if (isAxiosError(error)) { + throw new Error(error.response?.data.error || error); + } + throw error; + } }; diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts new file mode 100644 index 00000000..58f5ff27 --- /dev/null +++ b/src/services/synapse/SynapseService.spec.ts @@ -0,0 +1,158 @@ +jest.mock('@user-office-software/duo-logger'); +jest.mock('matrix-js-sdk', () => ({ + ...jest.requireActual('matrix-js-sdk'), + createClient: jest.fn(), +})); +jest.mock('./produceSynapseUserId', () => ({ + produceSynapseUserId: jest.fn(), +})); + +import { logger } from '@user-office-software/duo-logger'; +import { AxiosError } from 'axios'; +import { createClient } from 'matrix-js-sdk'; + +import { produceSynapseUserId } from './produceSynapseUserId'; +import { SynapseService } from './SynapseService'; + +describe('SynapseService', () => { + let synapseService: SynapseService; + let mockLoggerLogError: jest.SpyInstance; + + const roomId = 'randomId'; + const member = { + id: 1111, + email: 'john.doe@example.com', + firstName: 'John', + lastName: 'Doe', + oidcSub: '1234', + oauthIssuer: 'oidc-ping', + }; + const mockCreateClient = { + loginWithPassword: jest.fn(), + http: { + authedRequest: jest.fn(), + }, + }; + + beforeEach(() => { + jest.clearAllMocks(); + (createClient as jest.Mock).mockReturnValue(mockCreateClient); + mockLoggerLogError = jest.spyOn(logger, 'logError'); + synapseService = new SynapseService(); + }); + + describe('invite', () => { + const validReason = `@${member.id}:ess already in the room`; + const InvalidReason = 'invalid reason'; + + it("should not log any errors when the reason message includes 'already in the room", async () => { + (produceSynapseUserId as jest.Mock).mockResolvedValue(member.id); + + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(validReason) + ); + const result = await synapseService.invite(roomId, [member]); + + expect(mockLoggerLogError).not.toHaveBeenCalledWith( + 'Failed to invite user', + { + message: validReason, + member: member, + } + ); + expect(result[0]).toEqual({ invited: false, userId: member.id }); + }); + it("should log errors when the reason message does not include 'already in the room'", async () => { + (produceSynapseUserId as jest.Mock).mockResolvedValue(member.id); + + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(InvalidReason) + ); + const result = await synapseService.invite(roomId, [member]); + + expect(mockLoggerLogError).toHaveBeenCalledWith('Failed to invite user', { + message: InvalidReason, + member: member, + }); + expect(result[0]).toEqual({ invited: false, userId: member.id }); + }); + }); + + describe('getUserByOidcSub', () => { + const validReason = 'User not found'; + const InvalidReason = 'invalid reason'; + + it("should not log any errors when the reason message includes 'User not found'", async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(validReason) + ); + + const result = await synapseService.getUserByOidcSub(member); + + expect(mockLoggerLogError).not.toHaveBeenCalledWith( + 'Not able to find user by oidc_sub', + { + message: validReason, + } + ); + + expect(result).toEqual(undefined); + }); + + it("should log errors when the reason message does not include 'User not found'", async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(InvalidReason) + ); + + const result = await synapseService.getUserByOidcSub(member); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Not able to find user by oidc_sub', + { + message: InvalidReason, + } + ); + + expect(result).toEqual(undefined); + }); + }); + + describe('getUserByEmail', () => { + const validReason = 'User not found'; + const InvalidReason = 'invalid reason'; + + it("should not log any errors when the reason message includes 'User not found'", async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(validReason) + ); + + const result = await synapseService.getUserByEmail(member.email); + + expect(mockLoggerLogError).not.toHaveBeenCalledWith( + 'Not able to find user by Email', + { + message: validReason, + } + ); + + expect(result).toEqual(undefined); + }); + + it("should log errors when the reason message does not include 'User not found'", async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(InvalidReason) + ); + + const result = await synapseService.getUserByEmail(member.email); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Not able to find user by Email', + { + message: InvalidReason, + } + ); + + expect(result).toEqual(undefined); + }); + }); +}); diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index 2fb2c399..8847348d 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -158,7 +158,12 @@ export class SynapseService { invitedUsers.push({ userId, invited: true }); }) .catch((reason) => { - logger.logError('Failed to invite user', { reason, member }); + if (!reason.message.includes('already in the room')) { + logger.logError('Failed to invite user', { + message: reason?.message, + member, + }); + } invitedUsers.push({ userId, invited: false }); // don't throw, we want to invite all members }); @@ -183,7 +188,7 @@ export class SynapseService { } async getUserByOidcSub(member: ProposalUser) { const result = await this.client.http - .authedRequest( + .authedRequest( Method.Get, `/auth_providers/${oauthIssuer}/users/${member.oidcSub}`, {}, @@ -193,15 +198,21 @@ export class SynapseService { } ) .catch((reason) => { - logger.logError('Not able to find user by oidc_sub', { reason }); + if (!reason.message.includes('User not found')) { + logger.logError('Not able to find user by oidc_sub', { + message: reason.message, + }); + } + + return undefined; }); - return result as UserId; + return result; } async getUserByEmail(email: string) { const result = await this.client.http - .authedRequest( + .authedRequest( Method.Get, `/threepid/${thirdPartyId}/users/${email}`, {}, @@ -211,10 +222,16 @@ export class SynapseService { } ) .catch((reason) => { - logger.logError('Not able to find user by Email', { reason }); + if (!reason.message.includes('User not found')) { + logger.logError('Not able to find user by Email', { + message: reason.message, + }); + } + + return undefined; }); - return result as UserId; + return result; } async getRoomIdByName(name: string) { @@ -308,7 +325,10 @@ export class SynapseService { { prefix: ADMIN_API_PREFIX_V2 } ) .catch((reason) => { - logger.logError('Failed to create user', { reason, member }); + logger.logError('Failed to create user', { + message: reason.message, + member, + }); throw reason; }); From 54953789ce7e3b8db3dbcec6c0a76303c265ce02 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 24 Jun 2024 11:03:54 +0200 Subject: [PATCH 073/176] Improvements: Addressing comments --- sample.env | 5 ++--- src/datasources/visa/postgres/database/local.ts | 1 - src/queue/consumers/utils/validateProposalMessage.ts | 8 ++++++++ .../visa/consumerCallbacks/syncVisaProposal.ts | 12 ++---------- .../visa/consumers/syncProposalQueueConsumer.ts | 2 +- 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/sample.env b/sample.env index ef399096..ba3de4e0 100644 --- a/sample.env +++ b/sample.env @@ -41,6 +41,7 @@ ENABLE_NICOS_TO_SCICHAT_MESSAGES=false ENABLE_PROPOSAL_FOLDERS_CREATION=false ENABLE_MOODLE_FOLDERS_CREATION=false ENABLE_ONE_IDENTITY_INTEGRATION=false +ENABLE_SYNC_VISA_PROPOSALS=false USER_OFFICE_CORE_EXCHANGE_NAME=user_office_backend.fanout PROPOSAL_CREATION_QUEUE_NAME=connector.proposal_creation.queue @@ -49,7 +50,6 @@ FOLDER_CREATION_QUEUE_NAME=connector.proposals_folder_creation.queue MOODLE_EXCHANGE_NAME=moodle.folder-creation.fanout MOODLE_FOLDER_CREATION_QUEUE_NAME=connector.moodle_folder_creation.queue ONE_IDENTITY_INTEGRATION_QUEUE_NAME=connector.one_identity_integration.queue -VISA_QUEUE_NAME= ONE_IDENTITY_PROPOSAL_IDENT_ESET_TYPE="Science proposal" ONE_IDENTITY_APP_SERVER_URL=https://iam-web01-dev.esss.lu.se/AppServerV9 @@ -59,5 +59,4 @@ ONE_IDENTITY_API_PASSWORD= VISA_QUEUE_NAME=dummy VISA_SYNCING_TRIGGERING_STATUSES="ALLOCATED" -VISA_DATABASE_URL=postgres://postgres:qwerty123@127.0.0.1:5434/visa -ENABLE_SYNC_VISA_PROPOSALS=false \ No newline at end of file +VISA_DATABASE_URL=postgres://postgres:qwerty123@127.0.0.1:5434/visa \ No newline at end of file diff --git a/src/datasources/visa/postgres/database/local.ts b/src/datasources/visa/postgres/database/local.ts index 1a42a802..03318a11 100644 --- a/src/datasources/visa/postgres/database/local.ts +++ b/src/datasources/visa/postgres/database/local.ts @@ -28,7 +28,6 @@ db.on('query-error', function (error: any, obj: any) { if (process.env.DATABASE_LOG_QUERIES === '1') { db.on('query', function ({ sql }: any) { - // TODO: add timestamp to logger (maybe only ConsoleLogger needs it) logger.logDebug(`${new Date().toISOString()} - QUERY`, sql); }); } diff --git a/src/queue/consumers/utils/validateProposalMessage.ts b/src/queue/consumers/utils/validateProposalMessage.ts index 7e55a5ee..5dee51b7 100644 --- a/src/queue/consumers/utils/validateProposalMessage.ts +++ b/src/queue/consumers/utils/validateProposalMessage.ts @@ -29,6 +29,14 @@ export function validateProposalMessage( throw new Error('Proposal abstract is missing'); } + if (!proposalMessage.callId) { + throw new Error('Proposal CallId is missing'); + } + + if (!proposalMessage.submitted) { + throw new Error('Proposal Submitted status is missing'); + } + if (!proposalMessage.shortCode) { throw new Error('Proposal short code is missing'); } diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 1ef0ff84..db1d8c99 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -106,16 +106,8 @@ export async function syncVisaProposal( ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, ]; - // // Create new user for the proposer - // if (proposalWithNewStatus.proposer) { - // await createUserAndAssignToExperiment( - // proposalWithNewStatus.proposer, - // proposalWithNewStatus.proposalPk - // ); - // } - - // Create new user for the co-proposer - // const members = proposalWithNewStatus.members; + + // Create new user for the Principal Investigator and Coproposers for (const member of proposersAndCoproposers) { await createUserAndAssignToExperiment( member, diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 1ce90ec8..815f0ac6 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -41,6 +41,6 @@ export class SyncProposalQueueConsumer extends QueueConsumer { } const proposalMessage = validateProposalMessage(message); - syncVisaProposal(proposalMessage); + await syncVisaProposal(proposalMessage); }; } From aac3c5f4cdf0ae4e31bd34ce4dc9075a69039d70 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Mon, 24 Jun 2024 14:31:02 +0200 Subject: [PATCH 074/176] fix: test case --- src/queue/consumers/utils/validateProposalMessage.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/queue/consumers/utils/validateProposalMessage.spec.ts b/src/queue/consumers/utils/validateProposalMessage.spec.ts index 0606ac9e..1f608865 100644 --- a/src/queue/consumers/utils/validateProposalMessage.spec.ts +++ b/src/queue/consumers/utils/validateProposalMessage.spec.ts @@ -17,6 +17,8 @@ describe('Validate messages', () => { shortCode: '123123', instruments: [{ id: 1, shortCode: 'TEST', allocatedTime: 1 }], newStatus: 'REVIEW', + callId: 123, + submitted: true, proposer: { id: 1, firstName: 'Test', From adb0b702ae8f6e587b56276829936017a7fc0981 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 08:44:32 +0200 Subject: [PATCH 075/176] build(deps-dev): bump prettier from 3.2.5 to 3.3.2 (#367) Bumps [prettier](https://github.com/prettier/prettier) from 3.2.5 to 3.3.2. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.2.5...3.3.2) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d37b3e9..0d82f9f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.7", - "prettier": "3.2.5", + "prettier": "3.3.2", "ts-jest": "^29.1.5", "typescript": "^5.4.5" }, @@ -6544,9 +6544,9 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -12863,9 +12863,9 @@ "dev": true }, "prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index 8a9eaca5..1d35a552 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.7", - "prettier": "3.2.5", + "prettier": "3.3.2", "ts-jest": "^29.1.5", "typescript": "^5.4.5" }, From fdc61e5c1c7b1710e15bc24e421ee72ee36554e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:02:39 +0200 Subject: [PATCH 076/176] build(deps-dev): bump typescript from 5.4.5 to 5.5.2 (#366) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.4.5 to 5.5.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.4.5...v5.5.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d82f9f4..f3e91697 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.2", "ts-jest": "^29.1.5", - "typescript": "^5.4.5" + "typescript": "^5.5.2" }, "engines": { "node": ">=18.0.0", @@ -7808,9 +7808,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13753,9 +13753,9 @@ } }, "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 1d35a552..3e62542d 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.2", "ts-jest": "^29.1.5", - "typescript": "^5.4.5" + "typescript": "^5.5.2" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From f5678fd2e4371d190662882023d73827f7bb9766 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:46:06 +0200 Subject: [PATCH 077/176] build(deps-dev): bump eslint-plugin-jest from 28.5.0 to 28.6.0 (#363) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.5.0 to 28.6.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.5.0...v28.6.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3e91697..f912ef2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", @@ -3421,9 +3421,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", - "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" @@ -10677,9 +10677,9 @@ } }, "eslint-plugin-jest": { - "version": "28.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", - "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "requires": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" diff --git a/package.json b/package.json index 3e62542d..6c42f333 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", From 06fa63fc1b0e028f089819aca23f1664d56b54a6 Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Tue, 2 Jul 2024 13:09:18 +0200 Subject: [PATCH 078/176] fix: Saving oidc sub in the ID column instead of Email to maintain uniqueness. --- src/datasources/visa/postgres/UserDataSource.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index e8ca8f38..6ed7124a 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -19,7 +19,7 @@ export default class PostgresUserDataSource implements UserDataSource { if (!user.email || !user.institution) return null; const userExists = await database(this.TABLE_NAME) .where({ - id: user.email, + email: user.email, }) .first() .then((user: UserRecord) => { @@ -70,7 +70,7 @@ export default class PostgresUserDataSource implements UserDataSource { // Insert into users table return await database(this.TABLE_NAME) .insert({ - id: user.email, + id: user.oidcSub, email: user.email, first_name: user.firstName ?? '', last_name: user.lastName ?? '', From 39c1ace2928194f500d3cf989747db5fe13f001f Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Fri, 5 Jul 2024 16:12:11 +0200 Subject: [PATCH 079/176] fix: Visa Updating email check to ID check --- src/datasources/visa/postgres/UserDataSource.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index 6ed7124a..e65456f4 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -16,10 +16,10 @@ export default class PostgresUserDataSource implements UserDataSource { private ROLE = 'role'; async create(user: ProposalUser): Promise { - if (!user.email || !user.institution) return null; + if (!user.email || !user.institution || !user.oidcSub) return null; const userExists = await database(this.TABLE_NAME) .where({ - email: user.email, + id: user.oidcSub, }) .first() .then((user: UserRecord) => { @@ -54,7 +54,7 @@ export default class PostgresUserDataSource implements UserDataSource { if (userExists.affiliationId !== employer.id) { return await database(this.TABLE_NAME) .where({ - email: user.email, + id: user.oidcSub, }) .update({ affiliation_id: employer.id, @@ -99,14 +99,14 @@ export default class PostgresUserDataSource implements UserDataSource { async update(user: UserUpdationEventPayload): Promise { const userExists = await database(this.TABLE_NAME).where({ - email: user.email, + id: user.oidcSub, }); // Update only if the User exists and submitted if (userExists) { return await database(this.TABLE_NAME) .where({ - email: user.email, + id: user.oidcSub, }) .update({ first_name: user.firstname ?? '', From 1319428ac34c5a449e31a99f824cd212c871218f Mon Sep 17 00:00:00 2001 From: Yoganandan Date: Wed, 10 Jul 2024 11:02:31 +0200 Subject: [PATCH 080/176] fix: WHile deleting the missing Proposal users, use oidcSub as the checking variable, not the email. --- src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index db1d8c99..d3ea94de 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -56,7 +56,7 @@ async function deleteMissingUsersFromExperiment( for (const experimentUser of experimentUsers) { if ( - !allProposalUsers.some((member) => member.email === experimentUser.email) + !allProposalUsers.some((member) => member.oidcSub === experimentUser.id) ) { await experimentUserDataSource.delete({ experimentId: experiment.id, From 2e05069233200de4363d7ce1aa21d7317eca7e99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:48:07 +0200 Subject: [PATCH 081/176] build(deps-dev): bump @typescript-eslint/parser from 7.13.1 to 7.16.1 (#381) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.13.1 to 7.16.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.16.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 112 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0685da6e..f70f8581 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,10 +27,10 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/pg": "^8.10.3", "@types/node": "^20.14.5", + "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/parser": "^7.16.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1681,15 +1681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", + "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" }, "engines": { @@ -1709,13 +1709,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1726,9 +1726,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1739,13 +1739,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1767,12 +1767,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1793,9 +1793,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9780,42 +9780,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", + "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" } }, "@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9825,12 +9825,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" } }, @@ -9844,9 +9844,9 @@ } }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" diff --git a/package.json b/package.json index 419610d3..02168b4a 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.14.5", "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/parser": "^7.16.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From ca584102c863b4e26206cf74f7073a7fe61ff8c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:37:09 +0200 Subject: [PATCH 082/176] build(deps-dev): bump @typescript-eslint/eslint-plugin (#382) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.13.0 to 7.16.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.16.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 307 +++++++++++----------------------------------- package.json | 2 +- 2 files changed, 74 insertions(+), 235 deletions(-) diff --git a/package-lock.json b/package-lock.json index f70f8581..840b8164 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/node": "^20.14.5", "@types/pg": "^8.10.3", - "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.16.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -1648,16 +1648,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1708,7 +1708,7 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "7.16.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", @@ -1725,113 +1725,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1852,9 +1753,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1865,13 +1766,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1902,9 +1803,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1917,15 +1818,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1939,12 +1840,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9763,16 +9664,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -9790,106 +9691,44 @@ "@typescript-eslint/typescript-estree": "7.16.1", "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" - } - }, - "@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "7.16.1", - "eslint-visitor-keys": "^3.4.3" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" } }, "@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9908,9 +9747,9 @@ } }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9919,24 +9758,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" } }, "@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 02168b4a..1085f6d3 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", "@types/node": "^20.14.5", - "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.16.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", From 9b474f1c226a8af0009e92c58d2039747d17a76e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:00:08 +0200 Subject: [PATCH 083/176] build(deps-dev): bump typescript from 5.5.2 to 5.5.3 (#373) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.5.2 to 5.5.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.5.2...v5.5.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 840b8164..b253bd87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.2", "ts-jest": "^29.1.5", - "typescript": "^5.5.2" + "typescript": "^5.5.3" }, "engines": { "node": ">=18.0.0", @@ -8058,9 +8058,9 @@ } }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14185,9 +14185,9 @@ } }, "typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==" + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 1085f6d3..7a3958d9 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.2", "ts-jest": "^29.1.5", - "typescript": "^5.5.2" + "typescript": "^5.5.3" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From bbe071bb2392262d8a883b21cf648e791901fb37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:36:29 +0200 Subject: [PATCH 084/176] build(deps-dev): bump @types/node from 20.14.5 to 20.14.9 (#368) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.14.5 to 20.14.9. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b253bd87..f41774a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/node": "^20.14.5", + "@types/node": "^20.14.9", "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.16.1", @@ -1571,9 +1571,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", - "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", "dependencies": { "undici-types": "~5.26.4" } @@ -9587,9 +9587,9 @@ "dev": true }, "@types/node": { - "version": "20.14.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", - "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", "requires": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 7a3958d9..ca9f86ec 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", - "@types/node": "^20.14.5", + "@types/node": "^20.14.9", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.16.1", "eslint": "^8.57.0", From 60d9ac9d8743bcbf3239448792e2b180d3e40edf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:51:09 +0200 Subject: [PATCH 085/176] build(deps-dev): bump prettier from 3.3.2 to 3.3.3 (#384) Bumps [prettier](https://github.com/prettier/prettier) from 3.3.2 to 3.3.3. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.3.2...3.3.3) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f41774a8..accdf175 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.7", - "prettier": "3.3.2", + "prettier": "3.3.3", "ts-jest": "^29.1.5", "typescript": "^5.5.3" }, @@ -6759,9 +6759,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -13272,9 +13272,9 @@ "dev": true }, "prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index ca9f86ec..a63d0bac 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "husky": "^9.0.11", "jest": "^29.7.0", "lint-staged": "^15.2.7", - "prettier": "3.3.2", + "prettier": "3.3.3", "ts-jest": "^29.1.5", "typescript": "^5.5.3" }, From 23a9168a60039e0232722e7639dcec5392eaf4a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:14:27 +0200 Subject: [PATCH 086/176] build(deps-dev): bump eslint-plugin-prettier from 5.1.3 to 5.2.1 (#385) Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.1.3 to 5.2.1. - [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases) - [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.1.3...v5.2.1) --- updated-dependencies: - dependency-name: eslint-plugin-prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index accdf175..c93d5e3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", @@ -1354,9 +1354,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -3371,13 +3371,13 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -7628,9 +7628,9 @@ } }, "node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", @@ -9377,9 +9377,9 @@ } }, "@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, "@sinclair/typebox": { @@ -10893,13 +10893,13 @@ } }, "eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" } }, "eslint-plugin-unused-imports": { @@ -13899,9 +13899,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "requires": { "@pkgr/core": "^0.1.0", diff --git a/package.json b/package.json index a63d0bac..dc6a20c4 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", From e8397c63fd4f5dcf745127f78e4350b05b4090c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:22:41 +0200 Subject: [PATCH 087/176] build(deps-dev): bump prettier from 3.3.2 to 3.3.3 (#384) Bumps [prettier](https://github.com/prettier/prettier) from 3.3.2 to 3.3.3. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.3.2...3.3.3) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin From aaa66edd28fbc624dee4f690b22df3c0785263e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 12:05:13 +0200 Subject: [PATCH 088/176] build(deps-dev): bump @typescript-eslint/parser from 7.16.1 to 7.17.0 (#386) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.16.1 to 7.17.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.17.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin --- package-lock.json | 191 ++++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 177 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index c93d5e3b..79efbe69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@types/node": "^20.14.9", "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/parser": "^7.17.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1681,15 +1681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", - "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4" }, "engines": { @@ -1708,6 +1708,105 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.16.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", @@ -9681,16 +9780,78 @@ } }, "@typescript-eslint/parser": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", - "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" + } + }, + "@typescript-eslint/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/scope-manager": { diff --git a/package.json b/package.json index dc6a20c4..78f03985 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@types/jest": "^29.5.12", "@types/node": "^20.14.9", "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/parser": "^7.17.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From a0750b1d97a0afb0df2f8119a30cf0389b7d9a59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 09:09:55 +0200 Subject: [PATCH 089/176] build(deps-dev): bump @types/node from 20.14.9 to 22.1.0 (#393) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.14.9 to 22.1.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79efbe69..658b1d9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/node": "^20.14.9", + "@types/node": "^22.1.0", "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.17.0", @@ -1571,11 +1571,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "node_modules/@types/pg": { @@ -8184,9 +8184,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" }, "node_modules/unhomoglyph": { "version": "1.0.6", @@ -9686,11 +9686,11 @@ "dev": true }, "@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "requires": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "@types/pg": { @@ -14363,9 +14363,9 @@ } }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" }, "unhomoglyph": { "version": "1.0.6", diff --git a/package.json b/package.json index 78f03985..ebd35c40 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", - "@types/node": "^20.14.9", + "@types/node": "^22.1.0", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.17.0", "eslint": "^8.57.0", From dd655f39d1b00a730ccc827436c5c5f92874e22b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 09:43:01 +0200 Subject: [PATCH 090/176] build(deps-dev): bump typescript from 5.5.3 to 5.5.4 (#389) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.5.3 to 5.5.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.5.3...v5.5.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 658b1d9e..939826ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.3", "ts-jest": "^29.1.5", - "typescript": "^5.5.3" + "typescript": "^5.5.4" }, "engines": { "node": ">=18.0.0", @@ -8157,9 +8157,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14346,9 +14346,9 @@ } }, "typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==" + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index ebd35c40..0707f03d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lint-staged": "^15.2.7", "prettier": "3.3.3", "ts-jest": "^29.1.5", - "typescript": "^5.5.3" + "typescript": "^5.5.4" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From 921d9bcb48d0d4c644feb3106b7a39fb493e69b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 11:11:33 +0200 Subject: [PATCH 091/176] build(deps-dev): bump @typescript-eslint/parser from 7.17.0 to 7.18.0 (#390) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 7.17.0 to 7.18.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v7.18.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index 939826ee..a74f2431 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@types/node": "^22.1.0", "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.17.0", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -1681,15 +1681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -1709,13 +1709,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1726,9 +1726,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1739,13 +1739,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1767,12 +1767,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -9780,42 +9780,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" } }, "@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9825,12 +9825,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, diff --git a/package.json b/package.json index 0707f03d..fc482d34 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@types/jest": "^29.5.12", "@types/node": "^22.1.0", "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.17.0", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", From cb82632eb26d06f99fb8864368804175134d8137 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 07:06:19 +0200 Subject: [PATCH 092/176] build(deps-dev): bump ts-jest from 29.1.5 to 29.2.4 (#392) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.1.5 to 29.2.4. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.1.5...v29.2.4) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 141 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 135 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a74f2431..3d78f6c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.7", "prettier": "3.3.3", - "ts-jest": "^29.1.5", + "ts-jest": "^29.2.4", "typescript": "^5.5.4" }, "engines": { @@ -2259,6 +2259,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3100,6 +3106,21 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -3867,6 +3888,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4841,6 +4892,24 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -7833,12 +7902,13 @@ } }, "node_modules/ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, "dependencies": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -10157,6 +10227,12 @@ "is-shared-array-buffer": "^1.0.2" } }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10752,6 +10828,15 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, "electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -11326,6 +11411,35 @@ "flat-cache": "^3.0.4" } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11995,6 +12109,18 @@ "istanbul-lib-report": "^3.0.0" } }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + } + }, "jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -14134,12 +14260,13 @@ "requires": {} }, "ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, "requires": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", diff --git a/package.json b/package.json index fc482d34..5b435a20 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.7", "prettier": "3.3.3", - "ts-jest": "^29.1.5", + "ts-jest": "^29.2.4", "typescript": "^5.5.4" }, "dependencies": { From e7903b6405549c425f5a327e5c06b472343e5143 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 08:38:06 +0200 Subject: [PATCH 093/176] build(deps-dev): bump lint-staged from 15.2.7 to 15.2.8 (#397) Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.7 to 15.2.8. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.7...v15.2.8) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 302 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 208 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d78f6c3..47e1fa75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.7", + "lint-staged": "^15.2.8", "prettier": "3.3.3", "ts-jest": "^29.2.4", "typescript": "^5.5.4" @@ -2671,15 +2671,15 @@ "dev": true }, "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2720,9 +2720,9 @@ "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -3164,6 +3164,18 @@ "node": ">=8.12" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5654,21 +5666,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", - "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "version": "15.2.8", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz", + "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==", "dev": true, "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -5692,6 +5704,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/lint-staged/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -5827,16 +5856,16 @@ } }, "node_modules/listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -5874,9 +5903,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -5955,14 +5984,14 @@ "dev": true }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -5974,12 +6003,15 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6047,9 +6079,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -6269,6 +6301,18 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7231,21 +7275,48 @@ } }, "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -7265,9 +7336,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { @@ -8486,9 +8557,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -10525,12 +10596,12 @@ "dev": true }, "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "requires": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" } }, "cli-truncate": { @@ -10556,9 +10627,9 @@ "dev": true }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -10868,6 +10939,12 @@ "tslib": "2.6.2" } }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -12670,21 +12747,21 @@ "dev": true }, "lint-staged": { - "version": "15.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", - "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "version": "15.2.8", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz", + "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==", "dev": true, "requires": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "dependencies": { "chalk": { @@ -12693,6 +12770,15 @@ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -12773,16 +12859,16 @@ } }, "listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -12805,9 +12891,9 @@ "dev": true }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -12864,23 +12950,26 @@ "dev": true }, "log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "requires": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", - "dev": true + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } }, "ansi-regex": { "version": "6.0.1", @@ -12920,9 +13009,9 @@ } }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -13083,6 +13172,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13768,13 +13863,30 @@ "dev": true }, "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "dependencies": { + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "retry": { @@ -13789,9 +13901,9 @@ "dev": true }, "rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "rimraf": { @@ -14659,9 +14771,9 @@ "dev": true }, "yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 5b435a20..ce5579b8 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.7", + "lint-staged": "^15.2.8", "prettier": "3.3.3", "ts-jest": "^29.2.4", "typescript": "^5.5.4" From 1ce1082afb15ac39cc75aa3b1040cf5421d8f729 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 08:48:51 +0200 Subject: [PATCH 094/176] build(deps-dev): bump husky from 9.0.11 to 9.1.4 (#394) Bumps [husky](https://github.com/typicode/husky) from 9.0.11 to 9.1.4. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v9.0.11...v9.1.4) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 47e1fa75..0c8371ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.0.11", + "husky": "^9.1.4", "jest": "^29.7.0", "lint-staged": "^15.2.8", "prettier": "3.3.3", @@ -4421,12 +4421,12 @@ } }, "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", "dev": true, "bin": { - "husky": "bin.mjs" + "husky": "bin.js" }, "engines": { "node": ">=18" @@ -11857,9 +11857,9 @@ "dev": true }, "husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", "dev": true }, "iconv-lite": { diff --git a/package.json b/package.json index ce5579b8..8d3687f4 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.0.11", + "husky": "^9.1.4", "jest": "^29.7.0", "lint-staged": "^15.2.8", "prettier": "3.3.3", From cd6b82a4543498247f78c67f3cd00a89d5fd0947 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:39:31 +0200 Subject: [PATCH 095/176] build(deps): bump axios from 1.7.2 to 1.7.3 (#396) Bumps [axios](https://github.com/axios/axios) from 1.7.2 to 1.7.3. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.2...v1.7.3) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c8371ad..ee299a2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.2", + "axios": "^1.7.3", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -2283,9 +2283,9 @@ } }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10316,9 +10316,9 @@ "dev": true }, "axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index 8d3687f4..d2ce24e8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.2", + "axios": "^1.7.3", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", From e5d884127027c62bbd1a62882e2f9e95300783a2 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 16 Aug 2024 15:54:10 +0200 Subject: [PATCH 096/176] fix: generalize user's oidcSub and make it lowercase (#398) * fix: generalize user's oidcSub and make it lowercase * refactor: simplify produceSynapseUserId function --- src/services/synapse/SynapseService.spec.ts | 4 +- src/services/synapse/SynapseService.ts | 6 +-- .../synapse/produceSynapseUserId.spec.ts | 41 ++++++++++++++----- src/services/synapse/produceSynapseUserId.ts | 34 +++++++-------- 4 files changed, 54 insertions(+), 31 deletions(-) diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts index 58f5ff27..abb3194e 100644 --- a/src/services/synapse/SynapseService.spec.ts +++ b/src/services/synapse/SynapseService.spec.ts @@ -87,7 +87,7 @@ describe('SynapseService', () => { new AxiosError(validReason) ); - const result = await synapseService.getUserByOidcSub(member); + const result = await synapseService.getUserByOidcSub(member.oidcSub); expect(mockLoggerLogError).not.toHaveBeenCalledWith( 'Not able to find user by oidc_sub', @@ -104,7 +104,7 @@ describe('SynapseService', () => { new AxiosError(InvalidReason) ); - const result = await synapseService.getUserByOidcSub(member); + const result = await synapseService.getUserByOidcSub(member.oidcSub); expect(mockLoggerLogError).toHaveBeenCalledWith( 'Not able to find user by oidc_sub', diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index 8847348d..e0470a90 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -186,11 +186,11 @@ export class SynapseService { return response.rooms; } - async getUserByOidcSub(member: ProposalUser) { + async getUserByOidcSub(oidcSub: string) { const result = await this.client.http .authedRequest( Method.Get, - `/auth_providers/${oauthIssuer}/users/${member.oidcSub}`, + `/auth_providers/${oauthIssuer}/users/${oidcSub}`, {}, undefined, { @@ -289,7 +289,7 @@ export class SynapseService { async userExists(member: ProposalUser) { const userExists = - !!(await this.getUserByOidcSub(member)) || + !!(await this.getUserByOidcSub(member.oidcSub)) || !!(await this.getUserByEmail(member.email)); if (!userExists) { diff --git a/src/services/synapse/produceSynapseUserId.spec.ts b/src/services/synapse/produceSynapseUserId.spec.ts index 982b4b5a..f24d2045 100644 --- a/src/services/synapse/produceSynapseUserId.spec.ts +++ b/src/services/synapse/produceSynapseUserId.spec.ts @@ -1,13 +1,34 @@ +const serverName = (process.env.SYNAPSE_SERVER_NAME = 'test-server'); + import { produceSynapseUserId } from './produceSynapseUserId'; -test('Should produce valid user id', async () => { - const member = { - id: 1, - email: 'john.doe@example.com', - firstName: 'John', - lastName: 'Doe', - oidcSub: '1234', - oauthIssuer: 'keycloack', + +const member = { + id: 1, + email: 'john.doe@example.com', + firstName: 'John', + lastName: 'Doe', + oidcSub: 'test-1234', + oauthIssuer: 'keycloack', +}; + +test('Should produce valid user id with prefix', async () => { + const result = await produceSynapseUserId(member, undefined, false); + expect(result).toBe(`@${member.oidcSub}:${serverName}`); +}); + +test('Should produce valid user id without prefix', async () => { + const result = await produceSynapseUserId(member, undefined, true); + expect(result).toBe(`${member.oidcSub}`); +}); + +test('Should produce valid user id with special characters', async () => { + const memberWithSpecialCharsInOidcSub = { + ...member, + oidcSub: 'SomeSpecialCharsà', }; - const result = await produceSynapseUserId(member); - expect(result).toBe('@1234:serverName'); + const expectedOidcSub = 'somespecialcharsa'; + + const result = await produceSynapseUserId(memberWithSpecialCharsInOidcSub); + + expect(result).toBe(`@${expectedOidcSub}:${serverName}`); }); diff --git a/src/services/synapse/produceSynapseUserId.ts b/src/services/synapse/produceSynapseUserId.ts index 6784c6e5..18b6341a 100644 --- a/src/services/synapse/produceSynapseUserId.ts +++ b/src/services/synapse/produceSynapseUserId.ts @@ -13,29 +13,31 @@ export async function produceSynapseUserId( synapseService?: SynapseService, skipPrePostfix: boolean = false ): Promise { + // NOTE: It normalize the oidcSub to replace special characters and make it lowercase + // This is done to enture that the oidcSub can be used as a valid synapse user id + const normalizedMember = { + ...member, + oidcSub: member.oidcSub + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase(), + }; + if (synapseService) { - const userIdByOidcSub = await synapseService.getUserByOidcSub(member); - const userIdByEmail = await synapseService.getUserByEmail(member.email); + const user = + (await synapseService.getUserByOidcSub(normalizedMember.oidcSub)) || + (await synapseService.getUserByEmail(normalizedMember.email)); - if (userIdByOidcSub) { - return skipPrePostfix - ? userIdByOidcSub.user_id.replace(/^@|:ess$/g, '') - : userIdByOidcSub.user_id; - } - if (userIdByEmail) { + if (user) { return skipPrePostfix - ? userIdByEmail.user_id.replace(/^@|:ess$/g, '') - : userIdByEmail.user_id; + ? user.user_id.replace(/^@|:ess$/g, '') + : user.user_id; } } - const normalizedId = member.oidcSub - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, ''); - if (skipPrePostfix) { - return normalizedId; + return normalizedMember.oidcSub; } - return `@${normalizedId}:${serverName}`; + return `@${normalizedMember.oidcSub}:${serverName}`; } From 24db5323d03f54948bf1a608ee404641d3a40da0 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Mon, 19 Aug 2024 12:36:47 +0200 Subject: [PATCH 097/176] Added Event handler for Proposal_updated event as well. This is when a user is added to the existing proposal. --- src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 815f0ac6..3dc139d5 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -12,6 +12,7 @@ const EVENTS_FOR_HANDLING = [ Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, + Event.PROPOSAL_UPDATED, ]; const triggeringStatuses = From 7770d138d45937478bee50ef97bd6037d5314314 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Mon, 19 Aug 2024 13:24:11 +0200 Subject: [PATCH 098/176] upserting instrument based on shortcode rather than id. --- src/datasources/visa/InstrumentDataSource.ts | 1 + src/datasources/visa/mock/InstrumentDataSource.ts | 5 +++++ src/datasources/visa/postgres/InstrumentDataSource.ts | 11 +++++++++++ .../visa/consumerCallbacks/syncVisaProposal.ts | 4 +++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/datasources/visa/InstrumentDataSource.ts b/src/datasources/visa/InstrumentDataSource.ts index 77fd6f38..298d6d3d 100644 --- a/src/datasources/visa/InstrumentDataSource.ts +++ b/src/datasources/visa/InstrumentDataSource.ts @@ -10,6 +10,7 @@ export type InstrumentDeletionEventPayload = InstrumentCreationEventPayload; export interface InstrumentDataSource { get(id: number): Promise; + getByShortCode(code: string): Promise; create(instrument: InstrumentCreationEventPayload): Promise; update(instrument: InstrumentUpdationEventPayload): Promise; delete(id: number): Promise; diff --git a/src/datasources/visa/mock/InstrumentDataSource.ts b/src/datasources/visa/mock/InstrumentDataSource.ts index 37f55527..719fa4c9 100644 --- a/src/datasources/visa/mock/InstrumentDataSource.ts +++ b/src/datasources/visa/mock/InstrumentDataSource.ts @@ -5,6 +5,11 @@ export default class MockInstrumentDataSource implements InstrumentDataSource { async get(id: number): Promise { return { id, name: 'test', shortCode: 'test' }; } + + async getByShortCode(code: string): Promise { + return { id: 1, name: code, shortCode: 'test' }; + } + async create(instrument: Instrument): Promise { return instrument; } diff --git a/src/datasources/visa/postgres/InstrumentDataSource.ts b/src/datasources/visa/postgres/InstrumentDataSource.ts index 67e897eb..b9abc9df 100644 --- a/src/datasources/visa/postgres/InstrumentDataSource.ts +++ b/src/datasources/visa/postgres/InstrumentDataSource.ts @@ -22,6 +22,17 @@ export default class PostgresInstrumentDataSource return instrument ? createInstrumentObject(instrument) : null; }); } + + async getByShortCode(code: string): Promise { + return await database(this.TABLE_NAME) + .where({ + name: code, + }) + .first() + .then((instrument: InstrumentRecord | null) => { + return instrument ? createInstrumentObject(instrument) : null; + }); + } async create( instrument: InstrumentCreationEventPayload ): Promise { diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index d3ea94de..824bb39a 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -87,7 +87,9 @@ export async function syncVisaProposal( } // Get Instrument for (const proposalInstrument of proposalWithNewStatus.instruments) { - let instrument = await instrumentDataSource.get(proposalInstrument.id); + let instrument = await instrumentDataSource.getByShortCode( + proposalInstrument.shortCode + ); if (!instrument) { instrument = await instrumentDataSource.create({ From 5011b14818fe9d9a2a5a9665cfaed88946691904 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:19:56 +0200 Subject: [PATCH 099/176] build(deps-dev): bump lint-staged from 15.2.8 to 15.2.9 (#402) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee299a2d..84823f26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.8", + "lint-staged": "^15.2.9", "prettier": "3.3.3", "ts-jest": "^29.2.4", "typescript": "^5.5.4" @@ -5666,9 +5666,9 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.8", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz", - "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==", + "version": "15.2.9", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", + "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", "dev": true, "dependencies": { "chalk": "~5.3.0", @@ -12747,9 +12747,9 @@ "dev": true }, "lint-staged": { - "version": "15.2.8", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz", - "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==", + "version": "15.2.9", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", + "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", "dev": true, "requires": { "chalk": "~5.3.0", diff --git a/package.json b/package.json index d2ce24e8..86f08e7b 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.8", + "lint-staged": "^15.2.9", "prettier": "3.3.3", "ts-jest": "^29.2.4", "typescript": "^5.5.4" From 7006ffa74493844226700800cdc485497f9aa628 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:27:09 +0200 Subject: [PATCH 100/176] build(deps): bump axios from 1.7.3 to 1.7.4 (#406) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: janosbabik <143906591+janosbabik@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84823f26..c943c14e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.3", + "axios": "^1.7.4", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -2283,9 +2283,9 @@ } }, "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10316,9 +10316,9 @@ "dev": true }, "axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index 86f08e7b..532ca72b 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.3", + "axios": "^1.7.4", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", From bba96858515d3aff6c578c141b9ca65b7f43fd67 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 23 Aug 2024 12:26:53 +0200 Subject: [PATCH 101/176] =?UTF-8?q?feat:=20Add=20checkUserInfo=20function?= =?UTF-8?q?=20to=20validate=20user=20status=20before=20inv=E2=80=A6=20(#40?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumerCallbacks/createChatroom.ts | 49 ++++++++++++++++--- .../consumers/scicat/scicatProposal/dto.ts | 32 ++++++++++++ src/services/synapse/SynapseService.spec.ts | 48 ++++++++++++++++++ src/services/synapse/SynapseService.ts | 35 ++++++++++--- 4 files changed, 150 insertions(+), 14 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts index 7c92e207..db6e5824 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts @@ -12,7 +12,28 @@ function isValidUser(user: ProposalUser) { return user?.oidcSub && user?.firstName && user?.lastName && user?.email; } -function validateUsers(users: ProposalUser[]) { +async function checkUserInfo( + synapseService: SynapseService, + user: ProposalUser +) { + const userId = await synapseService.getUserId(user); + const userInfo = userId + ? await synapseService.getUserInfo(userId.user_id) + : null; + + if (!userInfo?.deactivated) { + return { isDeactivated: false, userExists: !!userId }; + } + + logger.logInfo('Deactivated user will not be invited to the chatroom ', { + user: user, + information: userInfo, + }); + + return { isDeactivated: true }; +} + +function validateUsersProfile(users: ProposalUser[]) { const validUsers = []; const invalidUsers = []; for (const user of users) { @@ -31,7 +52,12 @@ const createChatroom = async (message: ValidProposalMessageData) => { ); const allUsersOnProposal = [...message.members, message.proposer]; - const { validUsers, invalidUsers } = validateUsers(allUsersOnProposal); + const { validUsers, invalidUsers } = validateUsersProfile(allUsersOnProposal); + + // NOTE: activeUsers are users that are valid and not deactivated, + // deactivated users should not be invited to the chatroom. + const activeUsers = []; + if (invalidUsers.length > 0) { logger.logError( 'Some users will not be invited to the chatroom due to them being invalid', @@ -41,12 +67,18 @@ const createChatroom = async (message: ValidProposalMessageData) => { for (const user of validUsers) { try { - const userExists = await synapseService.userExists(user); + const { isDeactivated, userExists } = await checkUserInfo( + synapseService, + user + ); + if (!isDeactivated) { + activeUsers.push(user); - if (!userExists) { - await synapseService.createUser(user, defaultPassword); + if (!userExists) { + await synapseService.createUser(user, defaultPassword); + } + await synapseService.updateUser(user); } - await synapseService.updateUser(user); } catch (err: unknown) { logger.logError('Error while upserting chatroom user: ', { user, err }); } @@ -66,10 +98,11 @@ const createChatroom = async (message: ValidProposalMessageData) => { logger.logInfo('Room does not exist. Creating new room', { roomName: message.shortCode, }); + const result = await synapseService.createRoom( message.shortCode, message.title, - validUsers + activeUsers ); const room = await synapseService.getRoomByName(message.shortCode); @@ -78,7 +111,7 @@ const createChatroom = async (message: ValidProposalMessageData) => { room, }); } else { - const users = await synapseService.invite(rooms[0].room_id, validUsers); + const users = await synapseService.invite(rooms[0].room_id, activeUsers); const room = await synapseService.getRoomByName(message.shortCode); logger.logInfo('Users invited to existing room', { room, users }); } diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index dd0c6ac8..04e90535 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -77,3 +77,35 @@ export type ChatRoom = { export type UserId = { user_id: string; }; + +export interface Threepid { + medium: string; + address: string; + added_at: number; + validated_at: number; +} + +export interface ExternalId { + auth_provider: string; + external_id: string; +} + +export interface SynapseUser { + name: string; // Fully-qualified user ID (e.g., @user:example.com) + displayname: string | null; // User's display name, can be null if not set + threepids: Threepid[]; // List of third-party IDs (e.g., emails) + avatar_url: string | null; // User's avatar URL, can be null if not set + is_guest: boolean; // Whether the user is a guest + admin: boolean; // Whether the user is a server administrator + deactivated: boolean; // Whether the user is deactivated + erased: boolean; // Whether the user is marked as erased (GDPR) + shadow_banned: boolean; // Whether the user is shadow banned + creation_ts: number; // User's creation timestamp (in ms since Unix epoch) + appservice_id: string | null; // ID of the appservice that registered the user, or null + consent_server_notice_sent: string | null; // Consent notice version, or null + consent_version: string | null; // Consent version, or null + consent_ts: number | null; // Consent timestamp, or null + external_ids: ExternalId[]; // List of external IDs associated with the user + user_type: string | null; // Type of user (e.g., bot, support), or null + locked: boolean; +} diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts index abb3194e..b8d01c87 100644 --- a/src/services/synapse/SynapseService.spec.ts +++ b/src/services/synapse/SynapseService.spec.ts @@ -27,6 +27,25 @@ describe('SynapseService', () => { oidcSub: '1234', oauthIssuer: 'oidc-ping', }; + const synapseUser = { + name: '@user:example.com', + displayname: 'User', + threepids: [], + avatar_url: null, + is_guest: 0, + admin: 0, + deactivated: true, + erased: false, + shadow_banned: 0, + creation_ts: 1560432506, + appservice_id: null, + consent_server_notice_sent: null, + consent_version: null, + consent_ts: null, + external_ids: [], + user_type: null, + locked: false, + }; const mockCreateClient = { loginWithPassword: jest.fn(), http: { @@ -155,4 +174,33 @@ describe('SynapseService', () => { expect(result).toEqual(undefined); }); }); + + describe('getUserInfo', () => { + const unknownError = 'unknown Error'; + + it('should get detailed user information', async () => { + mockCreateClient.http.authedRequest.mockResolvedValueOnce(synapseUser); + + const result = await synapseService.getUserInfo(synapseUser.name); + + expect(result).toEqual(synapseUser); + }); + + it('should log errors if the user information is not reterivable', async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(unknownError) + ); + + const result = await synapseService.getUserInfo(synapseUser.name); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Not able to get user information', + { + message: unknownError, + } + ); + + expect(result).toEqual(undefined); + }); + }); }); diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index e0470a90..0196d60f 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -15,6 +15,7 @@ import { ProposalUser, ChatRoom, UserId, + SynapseUser, } from '../../queue/consumers/scicat/scicatProposal/dto'; interface MemberObject { @@ -234,6 +235,28 @@ export class SynapseService { return result; } + async getUserInfo(userId: string) { + const result = await this.client.http + .authedRequest( + Method.Get, + `/users/${userId}`, + {}, + undefined, + { + prefix: ADMIN_API_PREFIX_V2, + } + ) + .catch((reason) => { + logger.logError('Not able to get user information', { + message: reason.message, + }); + + return undefined; + }); + + return result; + } + async getRoomIdByName(name: string) { // TODO: if more than one identical name rooms exist, // we need to include a filter to find the room we want, @@ -287,16 +310,16 @@ export class SynapseService { return result as User; } - async userExists(member: ProposalUser) { - const userExists = - !!(await this.getUserByOidcSub(member.oidcSub)) || - !!(await this.getUserByEmail(member.email)); + async getUserId(member: ProposalUser) { + const user = + (await this.getUserByOidcSub(member.oidcSub)) || + (await this.getUserByEmail(member.email)); - if (!userExists) { + if (!user) { logger.logInfo('User not exists: ', { member }); } - return userExists; + return user; } async createUser(member: ProposalUser, password: string) { From 91b3b4aa50eca259fd552fe1e061fc86dc83e7de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 23:36:19 +0000 Subject: [PATCH 102/176] build(deps-dev): bump ts-jest from 29.2.4 to 29.2.5 Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.2.4 to 29.2.5. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.4...v29.2.5) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 93 +++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 27 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index c943c14e..3e8e2bf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.9", "prettier": "3.3.3", - "ts-jest": "^29.2.4", + "ts-jest": "^29.2.5", "typescript": "^5.5.4" }, "engines": { @@ -7439,13 +7439,10 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7453,24 +7450,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -7973,20 +7952,20 @@ } }, "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "dependencies": { - "bs-logger": "0.x", + "bs-logger": "^0.2.6", "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -13971,30 +13950,10 @@ "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==" }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true }, "send": { "version": "0.18.0", @@ -14372,20 +14331,20 @@ "requires": {} }, "ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "requires": { - "bs-logger": "0.x", + "bs-logger": "^0.2.6", "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" } }, "ts-node": { diff --git a/package.json b/package.json index 532ca72b..4d744ab2 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "jest": "^29.7.0", "lint-staged": "^15.2.9", "prettier": "3.3.3", - "ts-jest": "^29.2.4", + "ts-jest": "^29.2.5", "typescript": "^5.5.4" }, "dependencies": { From 5e8572aad6a1800f8bcba30a25e048298af28a8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:23:57 +0200 Subject: [PATCH 103/176] build(deps): bump axios from 1.7.4 to 1.7.5 (#410) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c943c14e..e16367e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.4", + "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -2283,9 +2283,9 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10316,9 +10316,9 @@ "dev": true }, "axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index 532ca72b..06c1cfa2 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.4", + "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", From b1e757c9e3ef1b2efdfa0dd300dd161165b32d07 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:25:10 +0000 Subject: [PATCH 104/176] build(deps-dev): bump @types/node from 22.1.0 to 22.5.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.1.0 to 22.5.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index e16367e5..dfe90ab8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/node": "^22.1.0", + "@types/node": "^22.5.0", "@types/pg": "^8.10.3", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1571,11 +1571,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "22.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", + "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", "dependencies": { - "undici-types": "~6.13.0" + "undici-types": "~6.19.2" } }, "node_modules/@types/pg": { @@ -8325,9 +8325,9 @@ } }, "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unhomoglyph": { "version": "1.0.6", @@ -9827,11 +9827,11 @@ "dev": true }, "@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "22.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", + "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", "requires": { - "undici-types": "~6.13.0" + "undici-types": "~6.19.2" } }, "@types/pg": { @@ -14602,9 +14602,9 @@ } }, "undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "unhomoglyph": { "version": "1.0.6", diff --git a/package.json b/package.json index 06c1cfa2..908483ef 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", - "@types/node": "^22.1.0", + "@types/node": "^22.5.0", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", From 80977940c783f581dd5fed83f1ee51d1bef15994 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan <132274772+yoganandaness@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:48:00 +0200 Subject: [PATCH 105/176] Staging release 2024 08 27 (#412) Signed-off-by: dependabot[bot] Co-authored-by: janosbabik <143906591+janosbabik@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Martin Co-authored-by: Jay Co-authored-by: Yoganandan Pandiyan --- package-lock.json | 837 +++++++++++------- package.json | 20 +- src/datasources/visa/InstrumentDataSource.ts | 1 + .../visa/mock/InstrumentDataSource.ts | 5 + .../visa/postgres/InstrumentDataSource.ts | 11 + .../visa/postgres/UserDataSource.ts | 12 +- .../consumerCallbacks/createChatroom.ts | 49 +- .../consumers/scicat/scicatProposal/dto.ts | 32 + .../consumerCallbacks/syncVisaProposal.ts | 6 +- .../consumers/syncProposalQueueConsumer.ts | 1 + src/services/synapse/SynapseService.spec.ts | 52 +- src/services/synapse/SynapseService.ts | 39 +- .../synapse/produceSynapseUserId.spec.ts | 41 +- src/services/synapse/produceSynapseUserId.ts | 34 +- 14 files changed, 779 insertions(+), 361 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0685da6e..e16367e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.2", + "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -27,22 +27,22 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", + "@types/node": "^22.1.0", "@types/pg": "^8.10.3", - "@types/node": "^20.14.5", - "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.0.11", + "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.7", - "prettier": "3.3.2", - "ts-jest": "^29.1.5", - "typescript": "^5.5.2" + "lint-staged": "^15.2.9", + "prettier": "3.3.3", + "ts-jest": "^29.2.4", + "typescript": "^5.5.4" }, "engines": { "node": ">=18.0.0", @@ -1354,9 +1354,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1571,11 +1571,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", - "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "node_modules/@types/pg": { @@ -1648,16 +1648,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1681,15 +1681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -1709,13 +1709,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1726,9 +1726,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1739,13 +1739,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1767,12 +1767,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1793,9 +1793,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1808,13 +1808,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1825,13 +1825,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1852,9 +1852,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1865,13 +1865,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1902,9 +1902,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1917,15 +1917,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1939,12 +1939,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2259,6 +2259,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2277,9 +2283,9 @@ } }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2665,15 +2671,15 @@ "dev": true }, "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2714,9 +2720,9 @@ "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -3100,6 +3106,21 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -3143,6 +3164,18 @@ "node": ">=8.12" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3470,13 +3503,13 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3867,6 +3900,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4358,12 +4421,12 @@ } }, "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", "dev": true, "bin": { - "husky": "bin.mjs" + "husky": "bin.js" }, "engines": { "node": ">=18" @@ -4841,6 +4904,24 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -5585,21 +5666,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", - "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "version": "15.2.9", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", + "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", "dev": true, "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -5623,6 +5704,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/lint-staged/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -5758,16 +5856,16 @@ } }, "node_modules/listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -5805,9 +5903,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -5886,14 +5984,14 @@ "dev": true }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -5905,12 +6003,15 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5978,9 +6079,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -6200,6 +6301,18 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6858,9 +6971,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -7162,21 +7275,48 @@ } }, "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -7196,9 +7336,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { @@ -7727,9 +7867,9 @@ } }, "node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", @@ -7833,12 +7973,13 @@ } }, "node_modules/ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, "dependencies": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -8157,9 +8298,9 @@ } }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8184,9 +8325,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" }, "node_modules/unhomoglyph": { "version": "1.0.6", @@ -8416,9 +8557,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -9476,9 +9617,9 @@ } }, "@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, "@sinclair/typebox": { @@ -9686,11 +9827,11 @@ "dev": true }, "@types/node": { - "version": "20.14.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", - "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "requires": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "@types/pg": { @@ -9763,16 +9904,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -9780,42 +9921,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" } }, "@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9825,12 +9966,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -9844,9 +9985,9 @@ } }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9855,41 +9996,41 @@ } }, "@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" } }, "@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9908,9 +10049,9 @@ } }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9919,24 +10060,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" } }, "@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" } }, @@ -10157,6 +10298,12 @@ "is-shared-array-buffer": "^1.0.2" } }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10169,9 +10316,9 @@ "dev": true }, "axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10449,12 +10596,12 @@ "dev": true }, "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "requires": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" } }, "cli-truncate": { @@ -10480,9 +10627,9 @@ "dev": true }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -10752,6 +10899,15 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, "electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -10783,6 +10939,12 @@ "tslib": "2.6.2" } }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11054,13 +11216,13 @@ } }, "eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" } }, "eslint-plugin-unused-imports": { @@ -11326,6 +11488,35 @@ "flat-cache": "^3.0.4" } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11666,9 +11857,9 @@ "dev": true }, "husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", "dev": true }, "iconv-lite": { @@ -11995,6 +12186,18 @@ "istanbul-lib-report": "^3.0.0" } }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + } + }, "jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -12544,21 +12747,21 @@ "dev": true }, "lint-staged": { - "version": "15.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", - "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "version": "15.2.9", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", + "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", "dev": true, "requires": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "dependencies": { "chalk": { @@ -12567,6 +12770,15 @@ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -12647,16 +12859,16 @@ } }, "listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -12679,9 +12891,9 @@ "dev": true }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -12738,23 +12950,26 @@ "dev": true }, "log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "requires": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", - "dev": true + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } }, "ansi-regex": { "version": "6.0.1", @@ -12794,9 +13009,9 @@ } }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -12957,6 +13172,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13433,9 +13654,9 @@ "dev": true }, "prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true }, "prettier-linter-helpers": { @@ -13642,13 +13863,30 @@ "dev": true }, "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "dependencies": { + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "retry": { @@ -13663,9 +13901,9 @@ "dev": true }, "rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "rimraf": { @@ -14060,9 +14298,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "requires": { "@pkgr/core": "^0.1.0", @@ -14134,12 +14372,13 @@ "requires": {} }, "ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, "requires": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -14346,9 +14585,9 @@ } }, "typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==" + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==" }, "unbox-primitive": { "version": "1.0.2", @@ -14363,9 +14602,9 @@ } }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" }, "unhomoglyph": { "version": "1.0.6", @@ -14532,9 +14771,9 @@ "dev": true }, "yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 419610d3..06c1cfa2 100644 --- a/package.json +++ b/package.json @@ -29,26 +29,26 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", - "@types/node": "^20.14.5", - "@typescript-eslint/eslint-plugin": "^7.13.0", - "@typescript-eslint/parser": "^7.13.1", + "@types/node": "^22.1.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.0.11", + "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.7", - "prettier": "3.3.2", - "ts-jest": "^29.1.5", - "typescript": "^5.5.2" + "lint-staged": "^15.2.9", + "prettier": "3.3.3", + "ts-jest": "^29.2.4", + "typescript": "^5.5.4" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.2", + "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", diff --git a/src/datasources/visa/InstrumentDataSource.ts b/src/datasources/visa/InstrumentDataSource.ts index 77fd6f38..298d6d3d 100644 --- a/src/datasources/visa/InstrumentDataSource.ts +++ b/src/datasources/visa/InstrumentDataSource.ts @@ -10,6 +10,7 @@ export type InstrumentDeletionEventPayload = InstrumentCreationEventPayload; export interface InstrumentDataSource { get(id: number): Promise; + getByShortCode(code: string): Promise; create(instrument: InstrumentCreationEventPayload): Promise; update(instrument: InstrumentUpdationEventPayload): Promise; delete(id: number): Promise; diff --git a/src/datasources/visa/mock/InstrumentDataSource.ts b/src/datasources/visa/mock/InstrumentDataSource.ts index 37f55527..719fa4c9 100644 --- a/src/datasources/visa/mock/InstrumentDataSource.ts +++ b/src/datasources/visa/mock/InstrumentDataSource.ts @@ -5,6 +5,11 @@ export default class MockInstrumentDataSource implements InstrumentDataSource { async get(id: number): Promise { return { id, name: 'test', shortCode: 'test' }; } + + async getByShortCode(code: string): Promise { + return { id: 1, name: code, shortCode: 'test' }; + } + async create(instrument: Instrument): Promise { return instrument; } diff --git a/src/datasources/visa/postgres/InstrumentDataSource.ts b/src/datasources/visa/postgres/InstrumentDataSource.ts index 67e897eb..b9abc9df 100644 --- a/src/datasources/visa/postgres/InstrumentDataSource.ts +++ b/src/datasources/visa/postgres/InstrumentDataSource.ts @@ -22,6 +22,17 @@ export default class PostgresInstrumentDataSource return instrument ? createInstrumentObject(instrument) : null; }); } + + async getByShortCode(code: string): Promise { + return await database(this.TABLE_NAME) + .where({ + name: code, + }) + .first() + .then((instrument: InstrumentRecord | null) => { + return instrument ? createInstrumentObject(instrument) : null; + }); + } async create( instrument: InstrumentCreationEventPayload ): Promise { diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index e8ca8f38..e65456f4 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -16,10 +16,10 @@ export default class PostgresUserDataSource implements UserDataSource { private ROLE = 'role'; async create(user: ProposalUser): Promise { - if (!user.email || !user.institution) return null; + if (!user.email || !user.institution || !user.oidcSub) return null; const userExists = await database(this.TABLE_NAME) .where({ - id: user.email, + id: user.oidcSub, }) .first() .then((user: UserRecord) => { @@ -54,7 +54,7 @@ export default class PostgresUserDataSource implements UserDataSource { if (userExists.affiliationId !== employer.id) { return await database(this.TABLE_NAME) .where({ - email: user.email, + id: user.oidcSub, }) .update({ affiliation_id: employer.id, @@ -70,7 +70,7 @@ export default class PostgresUserDataSource implements UserDataSource { // Insert into users table return await database(this.TABLE_NAME) .insert({ - id: user.email, + id: user.oidcSub, email: user.email, first_name: user.firstName ?? '', last_name: user.lastName ?? '', @@ -99,14 +99,14 @@ export default class PostgresUserDataSource implements UserDataSource { async update(user: UserUpdationEventPayload): Promise { const userExists = await database(this.TABLE_NAME).where({ - email: user.email, + id: user.oidcSub, }); // Update only if the User exists and submitted if (userExists) { return await database(this.TABLE_NAME) .where({ - email: user.email, + id: user.oidcSub, }) .update({ first_name: user.firstname ?? '', diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts index 7c92e207..db6e5824 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts @@ -12,7 +12,28 @@ function isValidUser(user: ProposalUser) { return user?.oidcSub && user?.firstName && user?.lastName && user?.email; } -function validateUsers(users: ProposalUser[]) { +async function checkUserInfo( + synapseService: SynapseService, + user: ProposalUser +) { + const userId = await synapseService.getUserId(user); + const userInfo = userId + ? await synapseService.getUserInfo(userId.user_id) + : null; + + if (!userInfo?.deactivated) { + return { isDeactivated: false, userExists: !!userId }; + } + + logger.logInfo('Deactivated user will not be invited to the chatroom ', { + user: user, + information: userInfo, + }); + + return { isDeactivated: true }; +} + +function validateUsersProfile(users: ProposalUser[]) { const validUsers = []; const invalidUsers = []; for (const user of users) { @@ -31,7 +52,12 @@ const createChatroom = async (message: ValidProposalMessageData) => { ); const allUsersOnProposal = [...message.members, message.proposer]; - const { validUsers, invalidUsers } = validateUsers(allUsersOnProposal); + const { validUsers, invalidUsers } = validateUsersProfile(allUsersOnProposal); + + // NOTE: activeUsers are users that are valid and not deactivated, + // deactivated users should not be invited to the chatroom. + const activeUsers = []; + if (invalidUsers.length > 0) { logger.logError( 'Some users will not be invited to the chatroom due to them being invalid', @@ -41,12 +67,18 @@ const createChatroom = async (message: ValidProposalMessageData) => { for (const user of validUsers) { try { - const userExists = await synapseService.userExists(user); + const { isDeactivated, userExists } = await checkUserInfo( + synapseService, + user + ); + if (!isDeactivated) { + activeUsers.push(user); - if (!userExists) { - await synapseService.createUser(user, defaultPassword); + if (!userExists) { + await synapseService.createUser(user, defaultPassword); + } + await synapseService.updateUser(user); } - await synapseService.updateUser(user); } catch (err: unknown) { logger.logError('Error while upserting chatroom user: ', { user, err }); } @@ -66,10 +98,11 @@ const createChatroom = async (message: ValidProposalMessageData) => { logger.logInfo('Room does not exist. Creating new room', { roomName: message.shortCode, }); + const result = await synapseService.createRoom( message.shortCode, message.title, - validUsers + activeUsers ); const room = await synapseService.getRoomByName(message.shortCode); @@ -78,7 +111,7 @@ const createChatroom = async (message: ValidProposalMessageData) => { room, }); } else { - const users = await synapseService.invite(rooms[0].room_id, validUsers); + const users = await synapseService.invite(rooms[0].room_id, activeUsers); const room = await synapseService.getRoomByName(message.shortCode); logger.logInfo('Users invited to existing room', { room, users }); } diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index dd0c6ac8..04e90535 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -77,3 +77,35 @@ export type ChatRoom = { export type UserId = { user_id: string; }; + +export interface Threepid { + medium: string; + address: string; + added_at: number; + validated_at: number; +} + +export interface ExternalId { + auth_provider: string; + external_id: string; +} + +export interface SynapseUser { + name: string; // Fully-qualified user ID (e.g., @user:example.com) + displayname: string | null; // User's display name, can be null if not set + threepids: Threepid[]; // List of third-party IDs (e.g., emails) + avatar_url: string | null; // User's avatar URL, can be null if not set + is_guest: boolean; // Whether the user is a guest + admin: boolean; // Whether the user is a server administrator + deactivated: boolean; // Whether the user is deactivated + erased: boolean; // Whether the user is marked as erased (GDPR) + shadow_banned: boolean; // Whether the user is shadow banned + creation_ts: number; // User's creation timestamp (in ms since Unix epoch) + appservice_id: string | null; // ID of the appservice that registered the user, or null + consent_server_notice_sent: string | null; // Consent notice version, or null + consent_version: string | null; // Consent version, or null + consent_ts: number | null; // Consent timestamp, or null + external_ids: ExternalId[]; // List of external IDs associated with the user + user_type: string | null; // Type of user (e.g., bot, support), or null + locked: boolean; +} diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index db1d8c99..824bb39a 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -56,7 +56,7 @@ async function deleteMissingUsersFromExperiment( for (const experimentUser of experimentUsers) { if ( - !allProposalUsers.some((member) => member.email === experimentUser.email) + !allProposalUsers.some((member) => member.oidcSub === experimentUser.id) ) { await experimentUserDataSource.delete({ experimentId: experiment.id, @@ -87,7 +87,9 @@ export async function syncVisaProposal( } // Get Instrument for (const proposalInstrument of proposalWithNewStatus.instruments) { - let instrument = await instrumentDataSource.get(proposalInstrument.id); + let instrument = await instrumentDataSource.getByShortCode( + proposalInstrument.shortCode + ); if (!instrument) { instrument = await instrumentDataSource.create({ diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 815f0ac6..3dc139d5 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -12,6 +12,7 @@ const EVENTS_FOR_HANDLING = [ Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, + Event.PROPOSAL_UPDATED, ]; const triggeringStatuses = diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts index 58f5ff27..b8d01c87 100644 --- a/src/services/synapse/SynapseService.spec.ts +++ b/src/services/synapse/SynapseService.spec.ts @@ -27,6 +27,25 @@ describe('SynapseService', () => { oidcSub: '1234', oauthIssuer: 'oidc-ping', }; + const synapseUser = { + name: '@user:example.com', + displayname: 'User', + threepids: [], + avatar_url: null, + is_guest: 0, + admin: 0, + deactivated: true, + erased: false, + shadow_banned: 0, + creation_ts: 1560432506, + appservice_id: null, + consent_server_notice_sent: null, + consent_version: null, + consent_ts: null, + external_ids: [], + user_type: null, + locked: false, + }; const mockCreateClient = { loginWithPassword: jest.fn(), http: { @@ -87,7 +106,7 @@ describe('SynapseService', () => { new AxiosError(validReason) ); - const result = await synapseService.getUserByOidcSub(member); + const result = await synapseService.getUserByOidcSub(member.oidcSub); expect(mockLoggerLogError).not.toHaveBeenCalledWith( 'Not able to find user by oidc_sub', @@ -104,7 +123,7 @@ describe('SynapseService', () => { new AxiosError(InvalidReason) ); - const result = await synapseService.getUserByOidcSub(member); + const result = await synapseService.getUserByOidcSub(member.oidcSub); expect(mockLoggerLogError).toHaveBeenCalledWith( 'Not able to find user by oidc_sub', @@ -155,4 +174,33 @@ describe('SynapseService', () => { expect(result).toEqual(undefined); }); }); + + describe('getUserInfo', () => { + const unknownError = 'unknown Error'; + + it('should get detailed user information', async () => { + mockCreateClient.http.authedRequest.mockResolvedValueOnce(synapseUser); + + const result = await synapseService.getUserInfo(synapseUser.name); + + expect(result).toEqual(synapseUser); + }); + + it('should log errors if the user information is not reterivable', async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(unknownError) + ); + + const result = await synapseService.getUserInfo(synapseUser.name); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Not able to get user information', + { + message: unknownError, + } + ); + + expect(result).toEqual(undefined); + }); + }); }); diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index 8847348d..0196d60f 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -15,6 +15,7 @@ import { ProposalUser, ChatRoom, UserId, + SynapseUser, } from '../../queue/consumers/scicat/scicatProposal/dto'; interface MemberObject { @@ -186,11 +187,11 @@ export class SynapseService { return response.rooms; } - async getUserByOidcSub(member: ProposalUser) { + async getUserByOidcSub(oidcSub: string) { const result = await this.client.http .authedRequest( Method.Get, - `/auth_providers/${oauthIssuer}/users/${member.oidcSub}`, + `/auth_providers/${oauthIssuer}/users/${oidcSub}`, {}, undefined, { @@ -234,6 +235,28 @@ export class SynapseService { return result; } + async getUserInfo(userId: string) { + const result = await this.client.http + .authedRequest( + Method.Get, + `/users/${userId}`, + {}, + undefined, + { + prefix: ADMIN_API_PREFIX_V2, + } + ) + .catch((reason) => { + logger.logError('Not able to get user information', { + message: reason.message, + }); + + return undefined; + }); + + return result; + } + async getRoomIdByName(name: string) { // TODO: if more than one identical name rooms exist, // we need to include a filter to find the room we want, @@ -287,16 +310,16 @@ export class SynapseService { return result as User; } - async userExists(member: ProposalUser) { - const userExists = - !!(await this.getUserByOidcSub(member)) || - !!(await this.getUserByEmail(member.email)); + async getUserId(member: ProposalUser) { + const user = + (await this.getUserByOidcSub(member.oidcSub)) || + (await this.getUserByEmail(member.email)); - if (!userExists) { + if (!user) { logger.logInfo('User not exists: ', { member }); } - return userExists; + return user; } async createUser(member: ProposalUser, password: string) { diff --git a/src/services/synapse/produceSynapseUserId.spec.ts b/src/services/synapse/produceSynapseUserId.spec.ts index 982b4b5a..f24d2045 100644 --- a/src/services/synapse/produceSynapseUserId.spec.ts +++ b/src/services/synapse/produceSynapseUserId.spec.ts @@ -1,13 +1,34 @@ +const serverName = (process.env.SYNAPSE_SERVER_NAME = 'test-server'); + import { produceSynapseUserId } from './produceSynapseUserId'; -test('Should produce valid user id', async () => { - const member = { - id: 1, - email: 'john.doe@example.com', - firstName: 'John', - lastName: 'Doe', - oidcSub: '1234', - oauthIssuer: 'keycloack', + +const member = { + id: 1, + email: 'john.doe@example.com', + firstName: 'John', + lastName: 'Doe', + oidcSub: 'test-1234', + oauthIssuer: 'keycloack', +}; + +test('Should produce valid user id with prefix', async () => { + const result = await produceSynapseUserId(member, undefined, false); + expect(result).toBe(`@${member.oidcSub}:${serverName}`); +}); + +test('Should produce valid user id without prefix', async () => { + const result = await produceSynapseUserId(member, undefined, true); + expect(result).toBe(`${member.oidcSub}`); +}); + +test('Should produce valid user id with special characters', async () => { + const memberWithSpecialCharsInOidcSub = { + ...member, + oidcSub: 'SomeSpecialCharsà', }; - const result = await produceSynapseUserId(member); - expect(result).toBe('@1234:serverName'); + const expectedOidcSub = 'somespecialcharsa'; + + const result = await produceSynapseUserId(memberWithSpecialCharsInOidcSub); + + expect(result).toBe(`@${expectedOidcSub}:${serverName}`); }); diff --git a/src/services/synapse/produceSynapseUserId.ts b/src/services/synapse/produceSynapseUserId.ts index 6784c6e5..18b6341a 100644 --- a/src/services/synapse/produceSynapseUserId.ts +++ b/src/services/synapse/produceSynapseUserId.ts @@ -13,29 +13,31 @@ export async function produceSynapseUserId( synapseService?: SynapseService, skipPrePostfix: boolean = false ): Promise { + // NOTE: It normalize the oidcSub to replace special characters and make it lowercase + // This is done to enture that the oidcSub can be used as a valid synapse user id + const normalizedMember = { + ...member, + oidcSub: member.oidcSub + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase(), + }; + if (synapseService) { - const userIdByOidcSub = await synapseService.getUserByOidcSub(member); - const userIdByEmail = await synapseService.getUserByEmail(member.email); + const user = + (await synapseService.getUserByOidcSub(normalizedMember.oidcSub)) || + (await synapseService.getUserByEmail(normalizedMember.email)); - if (userIdByOidcSub) { - return skipPrePostfix - ? userIdByOidcSub.user_id.replace(/^@|:ess$/g, '') - : userIdByOidcSub.user_id; - } - if (userIdByEmail) { + if (user) { return skipPrePostfix - ? userIdByEmail.user_id.replace(/^@|:ess$/g, '') - : userIdByEmail.user_id; + ? user.user_id.replace(/^@|:ess$/g, '') + : user.user_id; } } - const normalizedId = member.oidcSub - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, ''); - if (skipPrePostfix) { - return normalizedId; + return normalizedMember.oidcSub; } - return `@${normalizedId}:${serverName}`; + return `@${normalizedMember.oidcSub}:${serverName}`; } From 2eb30be4d9a63a7be0738827ce4764d99ded587b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:07:48 +0200 Subject: [PATCH 106/176] build(deps-dev): bump lint-staged from 15.2.9 to 15.2.10 (#415) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a0970c0..f8fbb445 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.9", + "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", "typescript": "^5.5.4" @@ -5666,9 +5666,9 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.9", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", - "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "dependencies": { "chalk": "~5.3.0", @@ -5677,7 +5677,7 @@ "execa": "~8.0.1", "lilconfig": "~3.1.2", "listr2": "~8.2.4", - "micromatch": "~4.0.7", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", "yaml": "~2.5.0" @@ -6250,9 +6250,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -12726,9 +12726,9 @@ "dev": true }, "lint-staged": { - "version": "15.2.9", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", - "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "requires": { "chalk": "~5.3.0", @@ -12737,7 +12737,7 @@ "execa": "~8.0.1", "lilconfig": "~3.1.2", "listr2": "~8.2.4", - "micromatch": "~4.0.7", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", "yaml": "~2.5.0" @@ -13118,9 +13118,9 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { "braces": "^3.0.3", diff --git a/package.json b/package.json index 09384495..570968fa 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.4", "jest": "^29.7.0", - "lint-staged": "^15.2.9", + "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", "typescript": "^5.5.4" From 6676f7b5427ca0302c5dda73f143904814d984d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:01:38 +0200 Subject: [PATCH 107/176] build(deps-dev): bump @types/pg from 8.11.6 to 8.11.9 (#422) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8fbb445..70b4262d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", "@types/node": "^22.5.0", - "@types/pg": "^8.10.3", + "@types/pg": "^8.11.9", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", @@ -1579,9 +1579,9 @@ } }, "node_modules/@types/pg": { - "version": "8.11.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", - "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "version": "8.11.9", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", + "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", "dev": true, "dependencies": { "@types/node": "*", @@ -9814,9 +9814,9 @@ } }, "@types/pg": { - "version": "8.11.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", - "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "version": "8.11.9", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", + "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", "dev": true, "requires": { "@types/node": "*", diff --git a/package.json b/package.json index 570968fa..d743e5e1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/knex": "^0.16.1", - "@types/pg": "^8.10.3", + "@types/pg": "^8.11.9", "@types/jest": "^29.5.12", "@types/node": "^22.5.0", "@typescript-eslint/eslint-plugin": "^7.16.1", From 6eac4f7250fc945d1c690f78e8496846c682258d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:46:02 +0200 Subject: [PATCH 108/176] build(deps): bump serve-static and express (#421) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: janosbabik <143906591+janosbabik@users.noreply.github.com> --- package-lock.json | 352 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 212 insertions(+), 142 deletions(-) diff --git a/package-lock.json b/package-lock.json index 70b4262d..9edaee03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.19.2", + "express": "^4.21.0", "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", @@ -2402,9 +2402,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -2414,7 +2414,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -2537,13 +2537,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2978,16 +2983,19 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -3146,9 +3154,9 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } @@ -3238,6 +3246,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -3741,36 +3768,36 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3942,12 +3969,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -4155,15 +4182,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4332,11 +4363,11 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6222,9 +6253,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -6653,9 +6687,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/path-type": { "version": "4.0.0", @@ -7079,11 +7113,11 @@ ] }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -7451,9 +7485,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7486,35 +7520,44 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7561,13 +7604,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10390,9 +10437,9 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -10402,7 +10449,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -10494,13 +10541,15 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -10790,13 +10839,13 @@ "dev": true }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, "define-properties": { @@ -10906,9 +10955,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "envalid": { "version": "8.0.0", @@ -10980,6 +11029,19 @@ "which-typed-array": "^1.1.13" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -11330,36 +11392,36 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -11505,12 +11567,12 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -11654,10 +11716,11 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", @@ -11777,11 +11840,11 @@ "dev": true }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "requires": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" } }, "has-proto": { @@ -13096,9 +13159,9 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -13401,9 +13464,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -13703,11 +13766,11 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "querystringify": { @@ -13956,9 +14019,9 @@ "dev": true }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -13990,6 +14053,11 @@ } } }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -13998,26 +14066,27 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "requires": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" } }, "set-function-name": { @@ -14052,13 +14121,14 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { diff --git a/package.json b/package.json index d743e5e1..e094a1c4 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "axios": "^1.7.5", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.19.2", + "express": "^4.21.0", "kafkajs": "^2.2.3", "knex": "^3.1.0", "pg": "^8.11.3", From ae004430ef8a086957f5fe7d7a9d808096143aa9 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:20:08 +0200 Subject: [PATCH 109/176] chore: trigger the deployment pipeline only for staging branch (#429) --- .github/workflows/build-push.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 8258b3cc..b96bab63 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -52,6 +52,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} - name: Trigger pipeline + if: ${{ steps.extract_branch.outputs.branch == 'staging' }} # Only trigger on staging branch uses: swapActions/trigger-swap-deployment@v1 with: repository: ${{ github.event.repository.name }} From 42b164d89c110969fcea515df362af706bd30e94 Mon Sep 17 00:00:00 2001 From: junjiequan Date: Tue, 24 Sep 2024 14:08:04 +0200 Subject: [PATCH 110/176] feat: remove users not in updated proposal from room --- src/services/synapse/SynapseService.spec.ts | 155 +++++++++++++++++++- src/services/synapse/SynapseService.ts | 64 ++++++++ 2 files changed, 211 insertions(+), 8 deletions(-) diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts index b8d01c87..a4701d58 100644 --- a/src/services/synapse/SynapseService.spec.ts +++ b/src/services/synapse/SynapseService.spec.ts @@ -17,16 +17,25 @@ import { SynapseService } from './SynapseService'; describe('SynapseService', () => { let synapseService: SynapseService; let mockLoggerLogError: jest.SpyInstance; + let mockLoggerLogInfo: jest.SpyInstance; - const roomId = 'randomId'; + const serviceAccountSynapseId = `@${process.env.SYNAPSE_SERVICE_USER}:${process.env.SYNAPSE_SERVER_NAME}`; + const roomId = '!randomRoom:ess'; const member = { id: 1111, email: 'john.doe@example.com', firstName: 'John', lastName: 'Doe', - oidcSub: '1234', + oidcSub: 'john.doe', oauthIssuer: 'oidc-ping', }; + const joinedRoomMembers = { + joined: { + ['user1']: { display_name: 'User1' }, + ['john.doe']: { display_name: 'John Doe' }, + [serviceAccountSynapseId]: { display_name: 'ServiceAccount' }, + }, + }; const synapseUser = { name: '@user:example.com', displayname: 'User', @@ -54,22 +63,39 @@ describe('SynapseService', () => { }; beforeEach(() => { - jest.clearAllMocks(); + jest.resetAllMocks(); (createClient as jest.Mock).mockReturnValue(mockCreateClient); mockLoggerLogError = jest.spyOn(logger, 'logError'); + mockLoggerLogInfo = jest.spyOn(logger, 'logInfo'); + process.env.SYNAPSE_SERVICE_USER = 'serviceUser'; + process.env.SYNAPSE_SERVER_NAME = 'matrix.org'; synapseService = new SynapseService(); }); describe('invite', () => { - const validReason = `@${member.id}:ess already in the room`; + const validReason = `@${member.oidcSub}:ess already in the room`; const InvalidReason = 'invalid reason'; + const memberToBeRemoved = { + id: 1112, + email: 'user1@example.com', + firstName: 'user1', + lastName: 'test', + oidcSub: 'user1', + oauthIssuer: 'oidc-ping', + }; it("should not log any errors when the reason message includes 'already in the room", async () => { - (produceSynapseUserId as jest.Mock).mockResolvedValue(member.id); + const joinedRoomMembersSet = new Set(''); + jest + .spyOn(synapseService, 'getRoomMembers') + .mockResolvedValueOnce(joinedRoomMembersSet); + + (produceSynapseUserId as jest.Mock).mockResolvedValueOnce(member.oidcSub); mockCreateClient.http.authedRequest.mockRejectedValueOnce( new AxiosError(validReason) ); + const result = await synapseService.invite(roomId, [member]); expect(mockLoggerLogError).not.toHaveBeenCalledWith( @@ -79,21 +105,62 @@ describe('SynapseService', () => { member: member, } ); - expect(result[0]).toEqual({ invited: false, userId: member.id }); + expect(result[0]).toEqual({ invited: false, userId: member.oidcSub }); }); it("should log errors when the reason message does not include 'already in the room'", async () => { - (produceSynapseUserId as jest.Mock).mockResolvedValue(member.id); + const joinedRoomMembersSet = new Set(''); + jest + .spyOn(synapseService, 'getRoomMembers') + .mockResolvedValueOnce(joinedRoomMembersSet); + + (produceSynapseUserId as jest.Mock).mockResolvedValueOnce(member.oidcSub); mockCreateClient.http.authedRequest.mockRejectedValueOnce( new AxiosError(InvalidReason) ); + const result = await synapseService.invite(roomId, [member]); expect(mockLoggerLogError).toHaveBeenCalledWith('Failed to invite user', { message: InvalidReason, member: member, }); - expect(result[0]).toEqual({ invited: false, userId: member.id }); + expect(result[0]).toEqual({ invited: false, userId: member.oidcSub }); + }); + + it('should remove the user from the chatroom if the updated proposal does not include the previous member in the room', async () => { + const joinedRoomMembersSet = new Set( + Object.keys(joinedRoomMembers.joined) + ); + + jest + .spyOn(synapseService, 'getRoomMembers') + .mockResolvedValueOnce(joinedRoomMembersSet); + + const removeUserFromRoomSpy = jest + .spyOn(synapseService, 'removeUserFromRoom') + .mockResolvedValueOnce(); + + (produceSynapseUserId as jest.Mock) + .mockResolvedValueOnce(member.oidcSub) + .mockResolvedValueOnce(memberToBeRemoved.oidcSub); + + mockCreateClient.http.authedRequest + .mockResolvedValueOnce('/rooms/${roomId}/joined_members Call') + .mockResolvedValueOnce('/join/${roomId} Call') + .mockResolvedValueOnce('/rooms/${roomId}/kick Call'); + + const result = await synapseService.invite(roomId, [member]); + + expect(removeUserFromRoomSpy).toHaveBeenCalledWith( + roomId, + memberToBeRemoved.oidcSub + ); + expect(result).toEqual([{ userId: member.oidcSub, invited: true }]); + expect(result).not.toContainEqual({ + userId: memberToBeRemoved.oidcSub, + invited: true, + }); }); }); @@ -203,4 +270,76 @@ describe('SynapseService', () => { expect(result).toEqual(undefined); }); }); + + describe('getRoomMembers', () => { + const unknownError = 'unknown Error'; + + it('should get all the members from the room except the service account', async () => { + mockCreateClient.http.authedRequest.mockResolvedValueOnce( + joinedRoomMembers + ); + const result = await synapseService.getRoomMembers(roomId); + + const noServiceAccount = new Set(Object.keys(joinedRoomMembers.joined)); + noServiceAccount.delete(serviceAccountSynapseId); + + expect(result).toEqual(noServiceAccount); + }); + + it('should log errors if the room members are not retrievable', async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(unknownError) + ); + + await expect(synapseService.getRoomMembers(roomId)).rejects.toThrow( + unknownError + ); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Failed to get joined room members', + { + reason: new AxiosError(unknownError), + roomId, + } + ); + }); + }); + + describe('removeUserFromRoom', () => { + const unknownError = 'unknown Error'; + const userId = 'user1'; + + it('should remove a user from the room', async () => { + mockCreateClient.http.authedRequest.mockResolvedValueOnce({ + roomId, + userId, + }); + + await synapseService.removeUserFromRoom(roomId, userId); + + expect(mockLoggerLogInfo).toHaveBeenCalledWith('Removed user from room', { + roomId, + userId, + }); + }); + + it('should log errors if the user cannot be removed from the room', async () => { + mockCreateClient.http.authedRequest.mockRejectedValueOnce( + new AxiosError(unknownError) + ); + + await expect( + synapseService.removeUserFromRoom(roomId, userId) + ).rejects.toThrow(unknownError); + + expect(mockLoggerLogError).toHaveBeenCalledWith( + 'Failed to remove user from room', + { + message: unknownError, + roomId, + userId, + } + ); + }); + }); }); diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index 0196d60f..facf14ba 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -7,6 +7,7 @@ import { createClient, EventType, MsgType, + RoomMember, } from 'matrix-js-sdk'; import { produceSynapseUserId } from './produceSynapseUserId'; @@ -144,6 +145,8 @@ export class SynapseService { async invite(roomId: string, members: ProposalUser[]) { const invitedUsers: { userId: string; invited: boolean }[] = []; + const usersToBeRemoved = await this.getRoomMembers(roomId); + for (const member of members) { const userId = await produceSynapseUserId(member, this); await this.client.http @@ -168,6 +171,13 @@ export class SynapseService { invitedUsers.push({ userId, invited: false }); // don't throw, we want to invite all members }); + usersToBeRemoved.delete(userId); + } + + if (usersToBeRemoved.size > 0) { + for (const userId of usersToBeRemoved) { + await this.removeUserFromRoom(roomId, userId); + } } return invitedUsers; @@ -235,6 +245,60 @@ export class SynapseService { return result; } + async getRoomMembers(roomId: string): Promise> { + // Get all joined room members except service account + const serviceAccountSynapseId = `@${serviceAccount.userId}:${serverName}`; + + const joinedRoomMembers = await this.client.http + .authedRequest<{ joined: Record }>( + Method.Get, + `/rooms/${roomId}/joined_members`, + {}, + undefined, + { prefix: CLIENT_API_PREFIX_V1 } + ) + .then((response) => { + return new Set( + Object.keys(response.joined).filter( + (userId) => userId !== serviceAccountSynapseId + ) + ); + }) + .catch((reason) => { + logger.logError('Failed to get joined room members', { + reason, + roomId, + }); + throw reason; + }); + + return joinedRoomMembers; + } + + async removeUserFromRoom(roomId: string, userId: string) { + return this.client.http + .authedRequest( + Method.Post, + `/rooms/${roomId}/kick`, + {}, + { user_id: userId }, + { + prefix: CLIENT_API_PREFIX_V1, + } + ) + .then(() => { + logger.logInfo('Removed user from room', { roomId, userId }); + }) + .catch((reason) => { + logger.logError('Failed to remove user from room', { + message: reason.message, + roomId, + userId, + }); + throw reason; + }); + } + async getUserInfo(userId: string) { const result = await this.client.http .authedRequest( From f637c1c12ce990d0450dbfab09822e9e50ddb0ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 07:13:10 +0000 Subject: [PATCH 111/176] build(deps-dev): bump @types/node from 22.5.0 to 22.6.1 (#432) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: janosbabik <143906591+janosbabik@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9edaee03..3c5f0a8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/node": "^22.5.0", + "@types/node": "^22.6.1", "@types/pg": "^8.11.9", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1571,9 +1571,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", - "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", + "version": "22.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", + "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", "dependencies": { "undici-types": "~6.19.2" } @@ -9853,9 +9853,9 @@ "dev": true }, "@types/node": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", - "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", + "version": "22.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", + "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", "requires": { "undici-types": "~6.19.2" } diff --git a/package.json b/package.json index e094a1c4..f51b5b3c 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.11.9", "@types/jest": "^29.5.12", - "@types/node": "^22.5.0", + "@types/node": "^22.6.1", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.0", From 5a4c643bf30cd79ed6a55e336cc82ae2085f1b11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 07:14:26 +0000 Subject: [PATCH 112/176] build(deps-dev): bump husky from 9.1.4 to 9.1.6 Bumps [husky](https://github.com/typicode/husky) from 9.1.4 to 9.1.6. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v9.1.4...v9.1.6) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c5f0a8b..ba8d9b36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.1.4", + "husky": "^9.1.6", "jest": "^29.7.0", "lint-staged": "^15.2.10", "prettier": "3.3.3", @@ -4452,9 +4452,9 @@ } }, "node_modules/husky": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", - "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true, "bin": { "husky": "bin.js" @@ -11899,9 +11899,9 @@ "dev": true }, "husky": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", - "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true }, "iconv-lite": { diff --git a/package.json b/package.json index f51b5b3c..3bb499fb 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint-plugin-jest": "^28.6.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.1.4", + "husky": "^9.1.6", "jest": "^29.7.0", "lint-staged": "^15.2.10", "prettier": "3.3.3", From b18f519724546486f19812a56ead48342ecf4cef Mon Sep 17 00:00:00 2001 From: junjiequan Date: Mon, 30 Sep 2024 10:11:32 +0200 Subject: [PATCH 113/176] fix: get user email with lower case --- src/services/synapse/SynapseService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index facf14ba..d0445b58 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -222,10 +222,11 @@ export class SynapseService { } async getUserByEmail(email: string) { + const lowerCaseEmail = email.toLowerCase(); const result = await this.client.http .authedRequest( Method.Get, - `/threepid/${thirdPartyId}/users/${email}`, + `/threepid/${thirdPartyId}/users/${lowerCaseEmail}`, {}, undefined, { From d09d346868703d04e2c2098dc76b36c08c3a1359 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:38:35 +0200 Subject: [PATCH 114/176] Revert "Staging release 2024 08 27 (#412)" This reverts commit 80977940c783f581dd5fed83f1ee51d1bef15994. --- package-lock.json | 837 +++++++----------- package.json | 20 +- src/datasources/visa/InstrumentDataSource.ts | 1 - .../visa/mock/InstrumentDataSource.ts | 5 - .../visa/postgres/InstrumentDataSource.ts | 11 - .../visa/postgres/UserDataSource.ts | 12 +- .../consumerCallbacks/createChatroom.ts | 49 +- .../consumers/scicat/scicatProposal/dto.ts | 32 - .../consumerCallbacks/syncVisaProposal.ts | 6 +- .../consumers/syncProposalQueueConsumer.ts | 1 - src/services/synapse/SynapseService.spec.ts | 52 +- src/services/synapse/SynapseService.ts | 39 +- .../synapse/produceSynapseUserId.spec.ts | 41 +- src/services/synapse/produceSynapseUserId.ts | 34 +- 14 files changed, 361 insertions(+), 779 deletions(-) diff --git a/package-lock.json b/package-lock.json index e16367e5..0685da6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.5", + "axios": "^1.7.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", @@ -27,22 +27,22 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/knex": "^0.16.1", - "@types/node": "^22.1.0", "@types/pg": "^8.10.3", - "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.18.0", + "@types/node": "^20.14.5", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.1.4", + "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.9", - "prettier": "3.3.3", - "ts-jest": "^29.2.4", - "typescript": "^5.5.4" + "lint-staged": "^15.2.7", + "prettier": "3.3.2", + "ts-jest": "^29.1.5", + "typescript": "^5.5.2" }, "engines": { "node": ">=18.0.0", @@ -1354,9 +1354,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1571,11 +1571,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "20.14.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", + "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", "dependencies": { - "undici-types": "~6.13.0" + "undici-types": "~5.26.4" } }, "node_modules/@types/pg": { @@ -1648,16 +1648,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1681,15 +1681,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", + "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4" }, "engines": { @@ -1709,13 +1709,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1726,9 +1726,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1739,13 +1739,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1767,12 +1767,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "7.13.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1793,9 +1793,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1808,13 +1808,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1825,13 +1825,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1852,9 +1852,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1865,13 +1865,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1902,9 +1902,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1917,15 +1917,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1939,12 +1939,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2259,12 +2259,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2283,9 +2277,9 @@ } }, "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2671,15 +2665,15 @@ "dev": true }, "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "dependencies": { - "restore-cursor": "^5.0.0" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2720,9 +2714,9 @@ "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -3106,21 +3100,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -3164,18 +3143,6 @@ "node": ">=8.12" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3503,13 +3470,13 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.8.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3900,36 +3867,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4421,12 +4358,12 @@ } }, "node_modules/husky": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", - "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", "dev": true, "bin": { - "husky": "bin.js" + "husky": "bin.mjs" }, "engines": { "node": ">=18" @@ -4904,24 +4841,6 @@ "node": ">=8" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -5666,21 +5585,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.9", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", - "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.6", + "debug": "~4.3.4", "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.5.0" + "yaml": "~2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -5704,23 +5623,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/lint-staged/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -5856,16 +5758,16 @@ } }, "node_modules/listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -5903,9 +5805,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -5984,14 +5886,14 @@ "dev": true }, "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -6003,15 +5905,12 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "environment": "^1.0.0" - }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6079,9 +5978,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -6301,18 +6200,6 @@ "node": ">=6" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6971,9 +6858,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -7275,48 +7162,21 @@ } }, "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "dependencies": { - "mimic-function": "^5.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -7336,9 +7196,9 @@ } }, "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -7867,9 +7727,9 @@ } }, "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", @@ -7973,13 +7833,12 @@ } }, "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", "dev": true, "dependencies": { "bs-logger": "0.x", - "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -8298,9 +8157,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8325,9 +8184,9 @@ } }, "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "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/unhomoglyph": { "version": "1.0.6", @@ -8557,9 +8416,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -9617,9 +9476,9 @@ } }, "@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", "dev": true }, "@sinclair/typebox": { @@ -9827,11 +9686,11 @@ "dev": true }, "@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "20.14.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", + "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", "requires": { - "undici-types": "~6.13.0" + "undici-types": "~5.26.4" } }, "@types/pg": { @@ -9904,16 +9763,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -9921,42 +9780,42 @@ } }, "@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", + "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "7.13.1", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/typescript-estree": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", + "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1" } }, "@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", + "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", + "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/visitor-keys": "7.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9966,12 +9825,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", + "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "7.13.1", "eslint-visitor-keys": "^3.4.3" } }, @@ -9985,9 +9844,9 @@ } }, "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9996,41 +9855,41 @@ } }, "@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "requires": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" } }, "@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -10049,9 +9908,9 @@ } }, "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -10060,24 +9919,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -10298,12 +10157,6 @@ "is-shared-array-buffer": "^1.0.2" } }, - "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10316,9 +10169,9 @@ "dev": true }, "axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10596,12 +10449,12 @@ "dev": true }, "cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "requires": { - "restore-cursor": "^5.0.0" + "restore-cursor": "^4.0.0" } }, "cli-truncate": { @@ -10627,9 +10480,9 @@ "dev": true }, "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -10899,15 +10752,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, "electron-to-chromium": { "version": "1.4.470", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", @@ -10939,12 +10783,6 @@ "tslib": "2.6.2" } }, - "environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11216,13 +11054,13 @@ } }, "eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.8.6" } }, "eslint-plugin-unused-imports": { @@ -11488,35 +11326,6 @@ "flat-cache": "^3.0.4" } }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11857,9 +11666,9 @@ "dev": true }, "husky": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", - "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", "dev": true }, "iconv-lite": { @@ -12186,18 +11995,6 @@ "istanbul-lib-report": "^3.0.0" } }, - "jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - } - }, "jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -12747,21 +12544,21 @@ "dev": true }, "lint-staged": { - "version": "15.2.9", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", - "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "requires": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.6", + "debug": "~4.3.4", "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", "micromatch": "~4.0.7", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.5.0" + "yaml": "~2.4.2" }, "dependencies": { "chalk": { @@ -12770,15 +12567,6 @@ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, - "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -12859,16 +12647,16 @@ } }, "listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -12891,9 +12679,9 @@ "dev": true }, "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -12950,26 +12738,23 @@ "dev": true }, "log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, "requires": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "requires": { - "environment": "^1.0.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true }, "ansi-regex": { "version": "6.0.1", @@ -13009,9 +12794,9 @@ } }, "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -13172,12 +12957,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13654,9 +13433,9 @@ "dev": true }, "prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true }, "prettier-linter-helpers": { @@ -13863,30 +13642,13 @@ "dev": true }, "restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "requires": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "dependencies": { - "onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "requires": { - "mimic-function": "^5.0.0" - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, "retry": { @@ -13901,9 +13663,9 @@ "dev": true }, "rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "rimraf": { @@ -14298,9 +14060,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "requires": { "@pkgr/core": "^0.1.0", @@ -14372,13 +14134,12 @@ "requires": {} }, "ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", "dev": true, "requires": { "bs-logger": "0.x", - "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -14585,9 +14346,9 @@ } }, "typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==" + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==" }, "unbox-primitive": { "version": "1.0.2", @@ -14602,9 +14363,9 @@ } }, "undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "unhomoglyph": { "version": "1.0.6", @@ -14771,9 +14532,9 @@ "dev": true }, "yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 06c1cfa2..419610d3 100644 --- a/package.json +++ b/package.json @@ -29,26 +29,26 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.10.3", "@types/jest": "^29.5.12", - "@types/node": "^22.1.0", - "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.18.0", + "@types/node": "^20.14.5", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unused-imports": "^3.2.0", - "husky": "^9.1.4", + "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.9", - "prettier": "3.3.3", - "ts-jest": "^29.2.4", - "typescript": "^5.5.4" + "lint-staged": "^15.2.7", + "prettier": "3.3.2", + "ts-jest": "^29.1.5", + "typescript": "^5.5.2" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.5", + "axios": "^1.7.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.19.2", diff --git a/src/datasources/visa/InstrumentDataSource.ts b/src/datasources/visa/InstrumentDataSource.ts index 298d6d3d..77fd6f38 100644 --- a/src/datasources/visa/InstrumentDataSource.ts +++ b/src/datasources/visa/InstrumentDataSource.ts @@ -10,7 +10,6 @@ export type InstrumentDeletionEventPayload = InstrumentCreationEventPayload; export interface InstrumentDataSource { get(id: number): Promise; - getByShortCode(code: string): Promise; create(instrument: InstrumentCreationEventPayload): Promise; update(instrument: InstrumentUpdationEventPayload): Promise; delete(id: number): Promise; diff --git a/src/datasources/visa/mock/InstrumentDataSource.ts b/src/datasources/visa/mock/InstrumentDataSource.ts index 719fa4c9..37f55527 100644 --- a/src/datasources/visa/mock/InstrumentDataSource.ts +++ b/src/datasources/visa/mock/InstrumentDataSource.ts @@ -5,11 +5,6 @@ export default class MockInstrumentDataSource implements InstrumentDataSource { async get(id: number): Promise { return { id, name: 'test', shortCode: 'test' }; } - - async getByShortCode(code: string): Promise { - return { id: 1, name: code, shortCode: 'test' }; - } - async create(instrument: Instrument): Promise { return instrument; } diff --git a/src/datasources/visa/postgres/InstrumentDataSource.ts b/src/datasources/visa/postgres/InstrumentDataSource.ts index b9abc9df..67e897eb 100644 --- a/src/datasources/visa/postgres/InstrumentDataSource.ts +++ b/src/datasources/visa/postgres/InstrumentDataSource.ts @@ -22,17 +22,6 @@ export default class PostgresInstrumentDataSource return instrument ? createInstrumentObject(instrument) : null; }); } - - async getByShortCode(code: string): Promise { - return await database(this.TABLE_NAME) - .where({ - name: code, - }) - .first() - .then((instrument: InstrumentRecord | null) => { - return instrument ? createInstrumentObject(instrument) : null; - }); - } async create( instrument: InstrumentCreationEventPayload ): Promise { diff --git a/src/datasources/visa/postgres/UserDataSource.ts b/src/datasources/visa/postgres/UserDataSource.ts index e65456f4..e8ca8f38 100644 --- a/src/datasources/visa/postgres/UserDataSource.ts +++ b/src/datasources/visa/postgres/UserDataSource.ts @@ -16,10 +16,10 @@ export default class PostgresUserDataSource implements UserDataSource { private ROLE = 'role'; async create(user: ProposalUser): Promise { - if (!user.email || !user.institution || !user.oidcSub) return null; + if (!user.email || !user.institution) return null; const userExists = await database(this.TABLE_NAME) .where({ - id: user.oidcSub, + id: user.email, }) .first() .then((user: UserRecord) => { @@ -54,7 +54,7 @@ export default class PostgresUserDataSource implements UserDataSource { if (userExists.affiliationId !== employer.id) { return await database(this.TABLE_NAME) .where({ - id: user.oidcSub, + email: user.email, }) .update({ affiliation_id: employer.id, @@ -70,7 +70,7 @@ export default class PostgresUserDataSource implements UserDataSource { // Insert into users table return await database(this.TABLE_NAME) .insert({ - id: user.oidcSub, + id: user.email, email: user.email, first_name: user.firstName ?? '', last_name: user.lastName ?? '', @@ -99,14 +99,14 @@ export default class PostgresUserDataSource implements UserDataSource { async update(user: UserUpdationEventPayload): Promise { const userExists = await database(this.TABLE_NAME).where({ - id: user.oidcSub, + email: user.email, }); // Update only if the User exists and submitted if (userExists) { return await database(this.TABLE_NAME) .where({ - id: user.oidcSub, + email: user.email, }) .update({ first_name: user.firstname ?? '', diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts index db6e5824..7c92e207 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts @@ -12,28 +12,7 @@ function isValidUser(user: ProposalUser) { return user?.oidcSub && user?.firstName && user?.lastName && user?.email; } -async function checkUserInfo( - synapseService: SynapseService, - user: ProposalUser -) { - const userId = await synapseService.getUserId(user); - const userInfo = userId - ? await synapseService.getUserInfo(userId.user_id) - : null; - - if (!userInfo?.deactivated) { - return { isDeactivated: false, userExists: !!userId }; - } - - logger.logInfo('Deactivated user will not be invited to the chatroom ', { - user: user, - information: userInfo, - }); - - return { isDeactivated: true }; -} - -function validateUsersProfile(users: ProposalUser[]) { +function validateUsers(users: ProposalUser[]) { const validUsers = []; const invalidUsers = []; for (const user of users) { @@ -52,12 +31,7 @@ const createChatroom = async (message: ValidProposalMessageData) => { ); const allUsersOnProposal = [...message.members, message.proposer]; - const { validUsers, invalidUsers } = validateUsersProfile(allUsersOnProposal); - - // NOTE: activeUsers are users that are valid and not deactivated, - // deactivated users should not be invited to the chatroom. - const activeUsers = []; - + const { validUsers, invalidUsers } = validateUsers(allUsersOnProposal); if (invalidUsers.length > 0) { logger.logError( 'Some users will not be invited to the chatroom due to them being invalid', @@ -67,18 +41,12 @@ const createChatroom = async (message: ValidProposalMessageData) => { for (const user of validUsers) { try { - const { isDeactivated, userExists } = await checkUserInfo( - synapseService, - user - ); - if (!isDeactivated) { - activeUsers.push(user); + const userExists = await synapseService.userExists(user); - if (!userExists) { - await synapseService.createUser(user, defaultPassword); - } - await synapseService.updateUser(user); + if (!userExists) { + await synapseService.createUser(user, defaultPassword); } + await synapseService.updateUser(user); } catch (err: unknown) { logger.logError('Error while upserting chatroom user: ', { user, err }); } @@ -98,11 +66,10 @@ const createChatroom = async (message: ValidProposalMessageData) => { logger.logInfo('Room does not exist. Creating new room', { roomName: message.shortCode, }); - const result = await synapseService.createRoom( message.shortCode, message.title, - activeUsers + validUsers ); const room = await synapseService.getRoomByName(message.shortCode); @@ -111,7 +78,7 @@ const createChatroom = async (message: ValidProposalMessageData) => { room, }); } else { - const users = await synapseService.invite(rooms[0].room_id, activeUsers); + const users = await synapseService.invite(rooms[0].room_id, validUsers); const room = await synapseService.getRoomByName(message.shortCode); logger.logInfo('Users invited to existing room', { room, users }); } diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index 04e90535..dd0c6ac8 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -77,35 +77,3 @@ export type ChatRoom = { export type UserId = { user_id: string; }; - -export interface Threepid { - medium: string; - address: string; - added_at: number; - validated_at: number; -} - -export interface ExternalId { - auth_provider: string; - external_id: string; -} - -export interface SynapseUser { - name: string; // Fully-qualified user ID (e.g., @user:example.com) - displayname: string | null; // User's display name, can be null if not set - threepids: Threepid[]; // List of third-party IDs (e.g., emails) - avatar_url: string | null; // User's avatar URL, can be null if not set - is_guest: boolean; // Whether the user is a guest - admin: boolean; // Whether the user is a server administrator - deactivated: boolean; // Whether the user is deactivated - erased: boolean; // Whether the user is marked as erased (GDPR) - shadow_banned: boolean; // Whether the user is shadow banned - creation_ts: number; // User's creation timestamp (in ms since Unix epoch) - appservice_id: string | null; // ID of the appservice that registered the user, or null - consent_server_notice_sent: string | null; // Consent notice version, or null - consent_version: string | null; // Consent version, or null - consent_ts: number | null; // Consent timestamp, or null - external_ids: ExternalId[]; // List of external IDs associated with the user - user_type: string | null; // Type of user (e.g., bot, support), or null - locked: boolean; -} diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 824bb39a..db1d8c99 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -56,7 +56,7 @@ async function deleteMissingUsersFromExperiment( for (const experimentUser of experimentUsers) { if ( - !allProposalUsers.some((member) => member.oidcSub === experimentUser.id) + !allProposalUsers.some((member) => member.email === experimentUser.email) ) { await experimentUserDataSource.delete({ experimentId: experiment.id, @@ -87,9 +87,7 @@ export async function syncVisaProposal( } // Get Instrument for (const proposalInstrument of proposalWithNewStatus.instruments) { - let instrument = await instrumentDataSource.getByShortCode( - proposalInstrument.shortCode - ); + let instrument = await instrumentDataSource.get(proposalInstrument.id); if (!instrument) { instrument = await instrumentDataSource.create({ diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 3dc139d5..815f0ac6 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -12,7 +12,6 @@ const EVENTS_FOR_HANDLING = [ Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, - Event.PROPOSAL_UPDATED, ]; const triggeringStatuses = diff --git a/src/services/synapse/SynapseService.spec.ts b/src/services/synapse/SynapseService.spec.ts index b8d01c87..58f5ff27 100644 --- a/src/services/synapse/SynapseService.spec.ts +++ b/src/services/synapse/SynapseService.spec.ts @@ -27,25 +27,6 @@ describe('SynapseService', () => { oidcSub: '1234', oauthIssuer: 'oidc-ping', }; - const synapseUser = { - name: '@user:example.com', - displayname: 'User', - threepids: [], - avatar_url: null, - is_guest: 0, - admin: 0, - deactivated: true, - erased: false, - shadow_banned: 0, - creation_ts: 1560432506, - appservice_id: null, - consent_server_notice_sent: null, - consent_version: null, - consent_ts: null, - external_ids: [], - user_type: null, - locked: false, - }; const mockCreateClient = { loginWithPassword: jest.fn(), http: { @@ -106,7 +87,7 @@ describe('SynapseService', () => { new AxiosError(validReason) ); - const result = await synapseService.getUserByOidcSub(member.oidcSub); + const result = await synapseService.getUserByOidcSub(member); expect(mockLoggerLogError).not.toHaveBeenCalledWith( 'Not able to find user by oidc_sub', @@ -123,7 +104,7 @@ describe('SynapseService', () => { new AxiosError(InvalidReason) ); - const result = await synapseService.getUserByOidcSub(member.oidcSub); + const result = await synapseService.getUserByOidcSub(member); expect(mockLoggerLogError).toHaveBeenCalledWith( 'Not able to find user by oidc_sub', @@ -174,33 +155,4 @@ describe('SynapseService', () => { expect(result).toEqual(undefined); }); }); - - describe('getUserInfo', () => { - const unknownError = 'unknown Error'; - - it('should get detailed user information', async () => { - mockCreateClient.http.authedRequest.mockResolvedValueOnce(synapseUser); - - const result = await synapseService.getUserInfo(synapseUser.name); - - expect(result).toEqual(synapseUser); - }); - - it('should log errors if the user information is not reterivable', async () => { - mockCreateClient.http.authedRequest.mockRejectedValueOnce( - new AxiosError(unknownError) - ); - - const result = await synapseService.getUserInfo(synapseUser.name); - - expect(mockLoggerLogError).toHaveBeenCalledWith( - 'Not able to get user information', - { - message: unknownError, - } - ); - - expect(result).toEqual(undefined); - }); - }); }); diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index 0196d60f..8847348d 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -15,7 +15,6 @@ import { ProposalUser, ChatRoom, UserId, - SynapseUser, } from '../../queue/consumers/scicat/scicatProposal/dto'; interface MemberObject { @@ -187,11 +186,11 @@ export class SynapseService { return response.rooms; } - async getUserByOidcSub(oidcSub: string) { + async getUserByOidcSub(member: ProposalUser) { const result = await this.client.http .authedRequest( Method.Get, - `/auth_providers/${oauthIssuer}/users/${oidcSub}`, + `/auth_providers/${oauthIssuer}/users/${member.oidcSub}`, {}, undefined, { @@ -235,28 +234,6 @@ export class SynapseService { return result; } - async getUserInfo(userId: string) { - const result = await this.client.http - .authedRequest( - Method.Get, - `/users/${userId}`, - {}, - undefined, - { - prefix: ADMIN_API_PREFIX_V2, - } - ) - .catch((reason) => { - logger.logError('Not able to get user information', { - message: reason.message, - }); - - return undefined; - }); - - return result; - } - async getRoomIdByName(name: string) { // TODO: if more than one identical name rooms exist, // we need to include a filter to find the room we want, @@ -310,16 +287,16 @@ export class SynapseService { return result as User; } - async getUserId(member: ProposalUser) { - const user = - (await this.getUserByOidcSub(member.oidcSub)) || - (await this.getUserByEmail(member.email)); + async userExists(member: ProposalUser) { + const userExists = + !!(await this.getUserByOidcSub(member)) || + !!(await this.getUserByEmail(member.email)); - if (!user) { + if (!userExists) { logger.logInfo('User not exists: ', { member }); } - return user; + return userExists; } async createUser(member: ProposalUser, password: string) { diff --git a/src/services/synapse/produceSynapseUserId.spec.ts b/src/services/synapse/produceSynapseUserId.spec.ts index f24d2045..982b4b5a 100644 --- a/src/services/synapse/produceSynapseUserId.spec.ts +++ b/src/services/synapse/produceSynapseUserId.spec.ts @@ -1,34 +1,13 @@ -const serverName = (process.env.SYNAPSE_SERVER_NAME = 'test-server'); - import { produceSynapseUserId } from './produceSynapseUserId'; - -const member = { - id: 1, - email: 'john.doe@example.com', - firstName: 'John', - lastName: 'Doe', - oidcSub: 'test-1234', - oauthIssuer: 'keycloack', -}; - -test('Should produce valid user id with prefix', async () => { - const result = await produceSynapseUserId(member, undefined, false); - expect(result).toBe(`@${member.oidcSub}:${serverName}`); -}); - -test('Should produce valid user id without prefix', async () => { - const result = await produceSynapseUserId(member, undefined, true); - expect(result).toBe(`${member.oidcSub}`); -}); - -test('Should produce valid user id with special characters', async () => { - const memberWithSpecialCharsInOidcSub = { - ...member, - oidcSub: 'SomeSpecialCharsà', +test('Should produce valid user id', async () => { + const member = { + id: 1, + email: 'john.doe@example.com', + firstName: 'John', + lastName: 'Doe', + oidcSub: '1234', + oauthIssuer: 'keycloack', }; - const expectedOidcSub = 'somespecialcharsa'; - - const result = await produceSynapseUserId(memberWithSpecialCharsInOidcSub); - - expect(result).toBe(`@${expectedOidcSub}:${serverName}`); + const result = await produceSynapseUserId(member); + expect(result).toBe('@1234:serverName'); }); diff --git a/src/services/synapse/produceSynapseUserId.ts b/src/services/synapse/produceSynapseUserId.ts index 18b6341a..6784c6e5 100644 --- a/src/services/synapse/produceSynapseUserId.ts +++ b/src/services/synapse/produceSynapseUserId.ts @@ -13,31 +13,29 @@ export async function produceSynapseUserId( synapseService?: SynapseService, skipPrePostfix: boolean = false ): Promise { - // NOTE: It normalize the oidcSub to replace special characters and make it lowercase - // This is done to enture that the oidcSub can be used as a valid synapse user id - const normalizedMember = { - ...member, - oidcSub: member.oidcSub - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase(), - }; - if (synapseService) { - const user = - (await synapseService.getUserByOidcSub(normalizedMember.oidcSub)) || - (await synapseService.getUserByEmail(normalizedMember.email)); + const userIdByOidcSub = await synapseService.getUserByOidcSub(member); + const userIdByEmail = await synapseService.getUserByEmail(member.email); - if (user) { + if (userIdByOidcSub) { + return skipPrePostfix + ? userIdByOidcSub.user_id.replace(/^@|:ess$/g, '') + : userIdByOidcSub.user_id; + } + if (userIdByEmail) { return skipPrePostfix - ? user.user_id.replace(/^@|:ess$/g, '') - : user.user_id; + ? userIdByEmail.user_id.replace(/^@|:ess$/g, '') + : userIdByEmail.user_id; } } + const normalizedId = member.oidcSub + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, ''); + if (skipPrePostfix) { - return normalizedMember.oidcSub; + return normalizedId; } - return `@${normalizedMember.oidcSub}:${serverName}`; + return `@${normalizedId}:${serverName}`; } From 310403c646516fdeeede27b1b328da495061d5aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:12:07 +0000 Subject: [PATCH 115/176] build(deps): bump axios from 1.7.5 to 1.7.7 Bumps [axios](https://github.com/axios/axios) from 1.7.5 to 1.7.7. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.5...v1.7.7) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c5f0a8b..65b9b325 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.5", + "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.0", @@ -2283,9 +2283,9 @@ } }, "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10342,9 +10342,9 @@ "dev": true }, "axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index f51b5b3c..41924190 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.6.0", - "axios": "^1.7.5", + "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.0", From 392a17af04cec883db7e8f9ebc9fe3f46e6b5a82 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:36:33 +0200 Subject: [PATCH 116/176] chore: add auto-merge workflow for Dependabot PRs (#441) --- .github/workflows/auto-merge-dependabot.yml | 35 +++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/auto-merge-dependabot.yml diff --git a/.github/workflows/auto-merge-dependabot.yml b/.github/workflows/auto-merge-dependabot.yml new file mode 100644 index 00000000..cc5eeb8f --- /dev/null +++ b/.github/workflows/auto-merge-dependabot.yml @@ -0,0 +1,35 @@ +name: Dependabot auto approve and merge + +on: pull_request + +permissions: + pull-requests: write + contents: write + packages: read + +jobs: + auto-approve-and-merge: + runs-on: ubuntu-latest + if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }} + steps: + # Extract information about the dependencies being updated by a Dependabot-generated PR + - name: Dependabot metadata + id: dependabot-metadata + uses: dependabot/fetch-metadata@v1.6.0 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + # NOTE: This step is only required if the repository has been configured to Require approval + # Checks if update-type is patch or minor, then approve if the PR status is not approved yet. + - name: Auto approve patch and minor updates + uses: hmarr/auto-approve-action@v4 + if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch' || steps.dependabot-metadata.outputs.update-type == 'version-update:semver-minor'}} + + # NOTE: Requirements for merge has to be configured in the Branch protection rule page. + # To do so, go to repository > Settings > Branches > Edit + - name: Enable auto-merge for Dependabot PRs + if: ${{ contains(github.event.pull_request.title, 'bump')}} + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{github.event.pull_request.html_url}} + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} From 52ff346b463504f30f06f5d7651c6ba46f9ab693 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 08:42:42 +0000 Subject: [PATCH 117/176] build(deps-dev): bump eslint from 8.57.0 to 8.57.1 Bumps [eslint](https://github.com/eslint/eslint) from 8.57.0 to 8.57.1. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.57.0...v8.57.1) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 64 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 65b9b325..38bc0289 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@types/pg": "^8.11.9", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", @@ -821,21 +821,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -857,9 +858,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -3331,16 +3333,16 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -9228,18 +9230,18 @@ } }, "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } @@ -9251,9 +9253,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -11090,16 +11092,16 @@ "dev": true }, "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", diff --git a/package.json b/package.json index 41924190..5636345f 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@types/node": "^22.6.1", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.6.0", From d8562eb8c9a4e1fe9c8ab5ec170f5429b669fcea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 23:56:46 +0000 Subject: [PATCH 118/176] build(deps-dev): bump @types/jest from 29.5.12 to 29.5.13 Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.12 to 29.5.13. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2ed20be..8d33c8fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ }, "devDependencies": { "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", + "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", "@types/node": "^22.6.1", "@types/pg": "^8.11.9", @@ -1541,9 +1541,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "version": "29.5.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", + "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -9824,9 +9824,9 @@ } }, "@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "version": "29.5.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", + "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, "requires": { "expect": "^29.0.0", diff --git a/package.json b/package.json index fdaf80fc..cf9ad21b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/knex": "^0.16.1", "@types/pg": "^8.11.9", - "@types/jest": "^29.5.12", + "@types/jest": "^29.5.13", "@types/node": "^22.6.1", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", From 3c723355802bbc7d832631f1b4b737f248691aba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 00:02:03 +0000 Subject: [PATCH 119/176] build(deps): bump pg and @types/pg Bumps [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) and [@types/pg](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pg). These dependencies needed to be updated together. Updates `pg` from 8.12.0 to 8.13.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.13.0/packages/pg) Updates `@types/pg` from 8.11.9 to 8.11.10 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/pg) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: "@types/pg" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 76 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d33c8fb..ccb2ed28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.11.3", + "pg": "^8.13.0", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" @@ -28,7 +28,7 @@ "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", "@types/node": "^22.6.1", - "@types/pg": "^8.11.9", + "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", @@ -1581,9 +1581,9 @@ } }, "node_modules/@types/pg": { - "version": "8.11.9", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", - "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", + "version": "8.11.10", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.10.tgz", + "integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==", "dev": true, "dependencies": { "@types/node": "*", @@ -6703,13 +6703,13 @@ } }, "node_modules/pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.0.tgz", + "integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==", "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -6757,17 +6757,17 @@ } }, "node_modules/pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" }, "node_modules/pg-types": { "version": "4.0.2", @@ -6788,9 +6788,9 @@ } }, "node_modules/pg/node_modules/pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" }, "node_modules/pg/node_modules/pg-types": { "version": "2.2.0", @@ -9863,9 +9863,9 @@ } }, "@types/pg": { - "version": "8.11.9", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", - "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", + "version": "8.11.10", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.10.tgz", + "integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==", "dev": true, "requires": { "@types/node": "*", @@ -13477,22 +13477,22 @@ "dev": true }, "pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.0.tgz", + "integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==", "requires": { "pg-cloudflare": "^1.1.1", - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, "dependencies": { "pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" }, "pg-types": { "version": "2.2.0", @@ -13554,15 +13554,15 @@ "dev": true }, "pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", "requires": {} }, "pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" }, "pg-types": { "version": "4.0.2", diff --git a/package.json b/package.json index cf9ad21b..9729dea6 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/knex": "^0.16.1", - "@types/pg": "^8.11.9", + "@types/pg": "^8.11.10", "@types/jest": "^29.5.13", "@types/node": "^22.6.1", "@typescript-eslint/eslint-plugin": "^7.16.1", @@ -54,7 +54,7 @@ "express": "^4.21.0", "kafkajs": "^2.2.3", "knex": "^3.1.0", - "pg": "^8.11.3", + "pg": "^8.13.0", "matrix-js-sdk": "24.1.0", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", From be39616204435bf866ce932f57dcd4a815aa37b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 00:07:24 +0000 Subject: [PATCH 120/176] build(deps-dev): bump eslint-plugin-jest from 28.6.0 to 28.8.3 Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.6.0 to 28.8.3. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.6.0...v28.8.3) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 20 ++++++++++---------- package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index ccb2ed28..bfa10136 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", + "eslint-plugin-jest": "^28.8.3", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", @@ -3507,18 +3507,18 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", - "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", + "version": "28.8.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", + "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, @@ -11250,12 +11250,12 @@ } }, "eslint-plugin-jest": { - "version": "28.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", - "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", + "version": "28.8.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", + "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "eslint-plugin-prettier": { diff --git a/package.json b/package.json index 9729dea6..89401235 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", + "eslint-plugin-jest": "^28.8.3", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", From c39035f7c8414a621d817cd106b8b7167f4b96d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 23:59:38 +0000 Subject: [PATCH 121/176] build(deps-dev): bump eslint-plugin-import from 2.29.1 to 2.31.0 Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.1 to 2.31.0. - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.31.0) --- updated-dependencies: - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 1065 +++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 645 insertions(+), 422 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfa10136..f0c7bfaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.8.3", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", @@ -1367,6 +1367,12 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2140,13 +2146,16 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2158,15 +2167,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -2186,16 +2196,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2241,17 +2252,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -2273,10 +2285,13 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2939,6 +2954,57 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3196,50 +3262,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -3267,15 +3340,27 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -3420,9 +3505,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -3446,34 +3531,36 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -4222,13 +4309,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -4376,9 +4464,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -4398,12 +4486,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4413,9 +4501,9 @@ } }, "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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -4547,12 +4635,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -4577,14 +4665,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4648,11 +4738,29 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4711,9 +4819,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -4771,12 +4879,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4825,12 +4936,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6466,14 +6577,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6483,26 +6595,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6952,6 +7066,15 @@ "node": ">=8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postgres-array": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", @@ -7225,14 +7348,15 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7416,13 +7540,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -7445,13 +7569,13 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -7566,14 +7690,15 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7785,14 +7910,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7802,28 +7928,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8261,29 +8390,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8293,16 +8423,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8312,14 +8443,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8508,16 +8645,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9650,6 +9787,12 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -10241,13 +10384,13 @@ "dev": true }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" } }, "array-flatten": { @@ -10256,15 +10399,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, @@ -10275,16 +10419,17 @@ "dev": true }, "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flat": { @@ -10312,17 +10457,18 @@ } }, "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, @@ -10338,10 +10484,13 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "axios": { "version": "1.7.7", @@ -10813,6 +10962,39 @@ "which": "^2.0.1" } }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -10985,50 +11167,57 @@ } }, "es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" } }, "es-define-property": { @@ -11044,15 +11233,24 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, "es-shim-unscopables": { @@ -11179,9 +11377,9 @@ } }, "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { "debug": "^3.2.7" @@ -11199,27 +11397,29 @@ } }, "eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "dependencies": { @@ -11741,13 +11941,14 @@ "dev": true }, "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, "getopts": { @@ -11850,9 +12051,9 @@ } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" }, "has-symbols": { "version": "1.0.3", @@ -11860,18 +12061,18 @@ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } @@ -11961,12 +12162,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } @@ -11982,14 +12183,13 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" } }, "is-arrayish": { @@ -12032,11 +12232,20 @@ "dev": true }, "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" } }, "is-date-object": { @@ -12074,9 +12283,9 @@ } }, "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, "is-number": { @@ -12110,12 +12319,12 @@ } }, "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-stream": { @@ -12143,12 +12352,12 @@ } }, "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" } }, "is-weakref": { @@ -13306,37 +13515,37 @@ } }, "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "obuf": { @@ -13658,6 +13867,12 @@ } } }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, "postgres-array": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", @@ -13846,14 +14061,15 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" } }, "require-directory": { @@ -13969,13 +14185,13 @@ } }, "safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "requires": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -13994,13 +14210,13 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "requires": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, @@ -14092,14 +14308,15 @@ } }, "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" } }, "setprototypeof": { @@ -14255,36 +14472,37 @@ } }, "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "strip-ansi": { @@ -14569,50 +14787,55 @@ } }, "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" } }, "typescript": { @@ -14746,16 +14969,16 @@ } }, "which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" } }, "wrap-ansi": { diff --git a/package.json b/package.json index 89401235..06525b2c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.8.3", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", From 9078eded608726157841a1f4777f099708985095 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:05:20 +0000 Subject: [PATCH 122/176] build(deps): bump express from 4.21.0 to 4.21.1 Bumps [express](https://github.com/expressjs/express) from 4.21.0 to 4.21.1. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1) --- updated-dependencies: - dependency-name: express dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index f0c7bfaf..b0d0f7d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.21.0", + "express": "^4.21.1", "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", @@ -2897,9 +2897,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -3857,16 +3857,16 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10917,9 +10917,9 @@ "dev": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -11594,16 +11594,16 @@ } }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", diff --git a/package.json b/package.json index 06525b2c..4eb095df 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.21.0", + "express": "^4.21.1", "kafkajs": "^2.2.3", "knex": "^3.1.0", "pg": "^8.13.0", From 021fecfe7fae4ea344ed40e83248e82659123a62 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:21:33 +0200 Subject: [PATCH 123/176] ci: update GitHub Actions workflow to include raw branch tag in Docker image (#453) --- .github/workflows/build-push.yml | 4 +++- src/queue/consumers/nicos/NicosTopicConsumer.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index b96bab63..34e526f5 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -40,7 +40,9 @@ jobs: with: images: ghcr.io/userofficeproject/connector flavor: latest=true # adds :latest tag to outputs.tags - tags: type=sha,format=long,prefix= # adds : tag to outputs.tags. + tags: | # adds : tag to outputs.tags + type=sha,format=long,prefix= + type=raw,value=${{ steps.extract_branch.outputs.branch }} - name: Build and push id: docker_build diff --git a/src/queue/consumers/nicos/NicosTopicConsumer.ts b/src/queue/consumers/nicos/NicosTopicConsumer.ts index 9ba75664..41b284f9 100644 --- a/src/queue/consumers/nicos/NicosTopicConsumer.ts +++ b/src/queue/consumers/nicos/NicosTopicConsumer.ts @@ -1,8 +1,8 @@ import { logger } from '@user-office-software/duo-logger'; +import ConsumerService from '../KafkaConsumer'; import { postNicosMessage } from './consumerCallbacks/postNicosMessage'; import { validateNicosMessage } from './utils/validateNicosMessage'; -import ConsumerService from '../KafkaConsumer'; export class TopicSciChatConsumer { constructor(private _consumer: ConsumerService) {} From 0abffdecac6eaa521b493e5fc3fee50796a6db21 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:25:03 +0200 Subject: [PATCH 124/176] feat: add error logging for missing users in One Identity integration (#454) --- .../oneIdentityIntegrationHandler.spec.ts | 51 +++++++++++++++---- .../oneIdentityIntegrationHandler.ts | 8 +++ 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts index b83d35c3..da3cd746 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts @@ -12,6 +12,7 @@ import { ESSOneIdentity, PersonHasESETValues, UID_ESet, + UserPersonConnection, } from '../utils/ESSOneIdentity'; const mockOneIdentity: jest.Mocked> = { @@ -29,22 +30,25 @@ const mockOneIdentity: jest.Mocked> = { const setupMocks = (data: { getProposal: UID_ESet | undefined; getProposalPersonConnections?: PersonHasESETValues[]; + getPersons?: UserPersonConnection[]; }) => { mockOneIdentity.createProposal.mockResolvedValueOnce('proposal-UID_ESet'); mockOneIdentity.getProposal.mockResolvedValueOnce(data.getProposal); mockOneIdentity.getProposalPersonConnections.mockResolvedValueOnce( data.getProposalPersonConnections ?? [] ); - mockOneIdentity.getPersons.mockResolvedValueOnce([ - { - email: 'proposer@email', - uidPerson: 'proposer-uid', - }, - { - email: 'member@email', - uidPerson: 'member-uid', - }, - ]); + mockOneIdentity.getPersons.mockResolvedValueOnce( + data.getPersons ?? [ + { + email: 'proposer@email', + uidPerson: 'proposer-uid', + }, + { + email: 'member@email', + uidPerson: 'member-uid', + }, + ] + ); }; const proposalMessage = { @@ -86,6 +90,7 @@ describe('oneIdentityIntegrationHandler', () => { 'proposal-UID_ESet', 'member-uid' ); + expect(logger.logError).not.toHaveBeenCalled(); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', uidPersons: ['proposer-uid', 'member-uid'], @@ -93,6 +98,32 @@ describe('oneIdentityIntegrationHandler', () => { expect(mockOneIdentity.logout).toHaveBeenCalled(); }); + it('should log error if some of the users are not found in One Identity', async () => { + setupMocks({ + getProposal: undefined, + getProposalPersonConnections: [], + getPersons: [ + { + email: 'proposer@email', + uidPerson: 'proposer-uid', + }, + ], + }); + + await oneIdentityIntegrationHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ); + + expect(logger.logError).toHaveBeenCalledWith( + 'Not all users found in One Identity (investigate)', + { + users: [{ email: 'member@email' }, { email: 'proposer@email' }], + uidPersons: ['proposer-uid'], + } + ); + }); + describe('when proposal already exists in One Identity (Retry logic)', () => { it('should not create proposal but handle connections if proposal exists', async () => { setupMocks({ diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts index 74b8466e..67f3aebb 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts @@ -81,6 +81,14 @@ async function handleConnectionsBetweenProposalAndPersons( const userPersonConnections = await oneIdentity.getPersons(users); const uidPersons = getUidPersons(userPersonConnections); + // Log an error if not all users are found in One Identity to be able to investigate + if (uidPersons.length !== users.length) { + logger.logError('Not all users found in One Identity (investigate)', { + users, + uidPersons, + }); + } + logger.logInfo('Found persons in One Identity', { uidPersons }); // Get all connections between UID_ESet and UID_Person From 4bd49bb1addd5e85789a319b7c77b6144b64fd01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 23:40:31 +0000 Subject: [PATCH 125/176] build(deps-dev): bump typescript from 5.5.4 to 5.6.3 Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.5.4 to 5.6.3. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.5.4...v5.6.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0d0f7d3..d312b1f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", - "typescript": "^5.5.4" + "typescript": "^5.6.3" }, "engines": { "node": ">=18.0.0", @@ -8463,9 +8463,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14839,9 +14839,9 @@ } }, "typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==" + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 4eb095df..d34845b7 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", - "typescript": "^5.5.4" + "typescript": "^5.6.3" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From d401095bddbd33ae39a4ecc0840b2f099bebc1f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 23:46:05 +0000 Subject: [PATCH 126/176] build(deps-dev): bump @types/node from 22.6.1 to 22.7.7 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.6.1 to 22.7.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d312b1f6..ef318b91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", - "@types/node": "^22.6.1", + "@types/node": "^22.7.7", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1579,9 +1579,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", - "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", "dependencies": { "undici-types": "~6.19.2" } @@ -9998,9 +9998,9 @@ "dev": true }, "@types/node": { - "version": "22.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", - "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", "requires": { "undici-types": "~6.19.2" } diff --git a/package.json b/package.json index d34845b7..73b2d6fd 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/knex": "^0.16.1", "@types/pg": "^8.11.10", "@types/jest": "^29.5.13", - "@types/node": "^22.6.1", + "@types/node": "^22.7.7", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", From 489eaa397a70e2587b77efffb49827e6cde5d371 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:33:59 +0200 Subject: [PATCH 127/176] refactor: remove unused Kafka producer and mock producer files (#455) --- package.json | 5 +- .../kafkaMessageProducer.ts | 104 ------------------ src/kafkaProducerTesting/kafkaMockProducer.ts | 41 ------- 3 files changed, 2 insertions(+), 148 deletions(-) delete mode 100644 src/kafkaProducerTesting/kafkaMessageProducer.ts delete mode 100644 src/kafkaProducerTesting/kafkaMockProducer.ts diff --git a/package.json b/package.json index 73b2d6fd..bf809705 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "main": "src/index.ts", "scripts": { "start": "npm run fix-olm-dependency && tsc && node ./build/src/index.js", - "start:kafka": "tsc && node ./build/src/kafkaProducerTesting/kafkaMockProducer.js", "test": "env NODE_ENV=test jest --config ./jest.unit.config.js --colors", "debug": "ts-node-dev --inspect --respawn --exit-child --watch src --transpile-only src/index.ts", "fix-olm-dependency": "cp -r ./src/@matrix-org ./node_modules/", @@ -22,7 +21,7 @@ "npm": ">=9.0.0", "node": ">=18.0.0" }, - "author": "SWAP", + "author": "SIMS", "license": "MIT", "devDependencies": { "@types/express": "^4.17.21", @@ -60,4 +59,4 @@ "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" } -} \ No newline at end of file +} diff --git a/src/kafkaProducerTesting/kafkaMessageProducer.ts b/src/kafkaProducerTesting/kafkaMessageProducer.ts deleted file mode 100644 index 63693c1c..00000000 --- a/src/kafkaProducerTesting/kafkaMessageProducer.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { logger } from '@user-office-software/duo-logger'; -import { Kafka, Producer, ProducerRecord } from 'kafkajs'; - -import { - ProduceType, - SetupConfig, - NicosMessageData, -} from '../models/KafkaTypes'; - -export default class ProducerService { - private kafka: Kafka; - private producer: Producer; - - async setup({ clientId, brokers, retry }: SetupConfig) { - this.kafka = new Kafka({ - clientId, - brokers, - retry, - }); - this.producer = this.kafka.producer(); - } - - async connect() { - try { - logger.logInfo('producer connecting ....', {}); - await this.producer.connect(); - logger.logInfo('producer connected ....', {}); - } catch (reason) { - logger.logError('connect fail', { reason }); - } - } - - async disconnect() { - await this.producer.disconnect(); - } - - async produce(record: ProducerRecord) { - await this.producer.send(record); - } -} - -export class ProduceMessage { - constructor(private readonly _kafka: ProducerService) {} - - async create({ topic, topicMessage }: ProduceType) { - try { - await this._kafka.produce({ - topic: topic, - messages: [ - { - value: Buffer.from( - JSON.stringify({ - proposal: topicMessage.proposal, - instrument: topicMessage.instrument, - source: topicMessage.source, - message: `${ - topicMessage.message - } - ${new Date().toLocaleString()}`, - }) - ), - }, - ], - }); - } catch (error) { - logger.logError('create topic error: ', { error }); - } - } -} - -export const producerConnect = async ({ - topic = '', - messages, - msgSendingInterval = 5000, -}: { - topic?: string; - messages: NicosMessageData; - msgSendingInterval: number; -}) => { - const producer = new ProducerService(); - const produce = new ProduceMessage(producer); - - await producer.setup({ - clientId: process.env.KAFKA_CLIENTID || '', - brokers: [`${process.env.KAFKA_BROKERS}`], - }); - await producer - .connect() - .catch((reason) => - logger.logError('Producer connection error: ', { reason }) - ); - setInterval(() => { - produce - .create({ - topic: process.env.KAFKA_TOPIC || topic, - topicMessage: messages, - }) - .then(() => - logger.logInfo(`Message sent ${new Date().toLocaleString()}`, { - messages, - }) - ) - .catch((reason) => logger.logError('Producer error: ', { reason })); - }, msgSendingInterval); -}; diff --git a/src/kafkaProducerTesting/kafkaMockProducer.ts b/src/kafkaProducerTesting/kafkaMockProducer.ts deleted file mode 100644 index 4e078c92..00000000 --- a/src/kafkaProducerTesting/kafkaMockProducer.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { logger } from '@user-office-software/duo-logger'; -import express from 'express'; - -import '../config'; -import { producerConnect } from './kafkaMessageProducer'; -import validateEnv from '../config/validateEnv'; -import healthCheck from '../middlewares/healthCheck'; -import readinessCheck from '../middlewares/readinessCheck'; - -validateEnv(); - -const topic = process.env.KAFKA_TOPIC; -const messagesForTesting = { - proposal: 'test123456', - instrument: 'scicat instrument', - source: 'NICOS', - message: 'Some messages sent via kafka', -}; - -async function bootstrap() { - const PORT = process.env.PORT || 4011; - const app = express(); - - app.use(healthCheck()).use(readinessCheck()); - - app.listen(PORT); - - process.on('uncaughtException', (error) => { - logger.logException('Unhandled NODE exception', error); - }); - - logger.logInfo(`Running kafka producer service at localhost:${PORT}`, {}); - - await producerConnect({ - topic: topic, - messages: messagesForTesting, - msgSendingInterval: 5000, - }); -} - -bootstrap(); From 1f0ed62c9c52e4562aa8ba3c3b640884d89429b9 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Wed, 23 Oct 2024 15:40:42 +0200 Subject: [PATCH 128/176] feat: add Prometheus client with default metrics and custom metrics for RabbitMQ message processing (#460) --- package-lock.json | 61 ++++++++++++++++++++++++ package.json | 7 +-- src/index.spec.ts | 1 + src/index.ts | 3 +- src/middlewares/healthCheck.ts | 4 +- src/middlewares/metrics/customMetrics.ts | 18 +++++++ src/middlewares/metrics/metrics.ts | 13 +++++ src/middlewares/readinessCheck.ts | 4 +- src/queue/consumers/QueueConsumer.ts | 20 ++++++++ 9 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 src/middlewares/metrics/customMetrics.ts create mode 100644 src/middlewares/metrics/metrics.ts diff --git a/package-lock.json b/package-lock.json index ef318b91..87d31254 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", "pg": "^8.13.0", + "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" @@ -1355,6 +1356,14 @@ "node": ">= 8" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -2418,6 +2427,11 @@ "node": ">=8" } }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -7182,6 +7196,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prom-client": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", + "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", + "dependencies": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -8047,6 +8073,14 @@ "node": ">=8.0.0" } }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "dependencies": { + "bintrees": "1.0.2" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -9781,6 +9815,11 @@ "fastq": "^1.6.0" } }, + "@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" + }, "@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -10587,6 +10626,11 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, "body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -13946,6 +13990,15 @@ } } }, + "prom-client": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", + "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", + "requires": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -14561,6 +14614,14 @@ "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" }, + "tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "requires": { + "bintrees": "1.0.2" + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", diff --git a/package.json b/package.json index bf809705..99a924c2 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,10 @@ "license": "MIT", "devDependencies": { "@types/express": "^4.17.21", - "@types/knex": "^0.16.1", - "@types/pg": "^8.11.10", "@types/jest": "^29.5.13", + "@types/knex": "^0.16.1", "@types/node": "^22.7.7", + "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", @@ -53,8 +53,9 @@ "express": "^4.21.1", "kafkajs": "^2.2.3", "knex": "^3.1.0", - "pg": "^8.13.0", "matrix-js-sdk": "24.1.0", + "pg": "^8.13.0", + "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", "tsyringe": "^4.8.0" diff --git a/src/index.spec.ts b/src/index.spec.ts index 6d984ed3..99a55385 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -8,6 +8,7 @@ jest.mock('express', () => { }); jest.mock('@user-office-software/duo-logger'); +jest.mock('./middlewares/metrics/metrics', () => jest.fn()); jest.mock('./middlewares/healthCheck', () => jest.fn()); jest.mock('./middlewares/readinessCheck', () => jest.fn()); jest.mock('tsyringe'); diff --git a/src/index.ts b/src/index.ts index f86bd995..f3f5635d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ import { Tokens } from './config/Tokens'; import { str2Bool } from './config/utils'; import validateEnv from './config/validateEnv'; import healthCheck from './middlewares/healthCheck'; +import metrics from './middlewares/metrics/metrics'; import readinessCheck from './middlewares/readinessCheck'; import startKafkaTopicHandling from './queue/kafkaTopicHandling'; import startRabbitMQHandling from './queue/queueHandling'; @@ -63,7 +64,7 @@ async function bootstrap() { Sync_Visa_Proposals: enableSyncVisaProposals, }); - app.use(healthCheck()).use(readinessCheck()); + app.use(metrics).use(healthCheck).use(readinessCheck); app.listen(PORT); diff --git a/src/middlewares/healthCheck.ts b/src/middlewares/healthCheck.ts index 05b98d5e..401df521 100644 --- a/src/middlewares/healthCheck.ts +++ b/src/middlewares/healthCheck.ts @@ -9,6 +9,4 @@ router.get('/health', (req: Request, res: Response) => { res.status(200).send(JSON.stringify(body)); }); -export default function () { - return router; -} +export default router; diff --git a/src/middlewares/metrics/customMetrics.ts b/src/middlewares/metrics/customMetrics.ts new file mode 100644 index 00000000..e14002b5 --- /dev/null +++ b/src/middlewares/metrics/customMetrics.ts @@ -0,0 +1,18 @@ +import { Counter, Histogram } from 'prom-client'; + +// Metrics for rabbitmq message processing + +// This counter tracks the total number of processed messages, with labels for the queue and status (success or failure) +export const processedMessagesCounter = new Counter({ + name: 'rabbitmq_processed_messages_total', + help: 'Total number of processed messages from RabbitMQ', + labelNames: ['queue', 'status'], +}); + +// This histogram tracks the duration of message processing. It helps monitor how long it takes to process each message. +export const processingDurationHistogram = new Histogram({ + name: 'rabbitmq_message_processing_duration_seconds', + help: 'Duration of message processing in seconds', + labelNames: ['queue'], + buckets: [0.1, 0.5, 1, 5, 10, 30, 60], +}); diff --git a/src/middlewares/metrics/metrics.ts b/src/middlewares/metrics/metrics.ts new file mode 100644 index 00000000..47802e1c --- /dev/null +++ b/src/middlewares/metrics/metrics.ts @@ -0,0 +1,13 @@ +import express, { Request, Response } from 'express'; +import { collectDefaultMetrics, register } from 'prom-client'; + +collectDefaultMetrics(); + +const router = express.Router(); + +router.get('/metrics', async (req: Request, res: Response) => { + res.set('Content-Type', register.contentType); + res.end(await register.metrics()); +}); + +export default router; diff --git a/src/middlewares/readinessCheck.ts b/src/middlewares/readinessCheck.ts index eec32799..5b3a21c1 100644 --- a/src/middlewares/readinessCheck.ts +++ b/src/middlewares/readinessCheck.ts @@ -9,6 +9,4 @@ router.get('/readiness', (req: Request, res: Response) => { res.status(200).send(JSON.stringify(body)); }); -export default function () { - return router; -} +export default router; diff --git a/src/queue/consumers/QueueConsumer.ts b/src/queue/consumers/QueueConsumer.ts index e12c5b4e..c98c0796 100644 --- a/src/queue/consumers/QueueConsumer.ts +++ b/src/queue/consumers/QueueConsumer.ts @@ -5,6 +5,11 @@ import { Queue, } from '@user-office-software/duo-message-broker'; +import { + processedMessagesCounter, + processingDurationHistogram, +} from '../../middlewares/metrics/customMetrics'; + export abstract class QueueConsumer { private messageBroker: MessageBroker; @@ -45,8 +50,17 @@ export abstract class QueueConsumer { this.messageBroker.listenOn(queueName as Queue, async (...args) => { logger.logInfo('Received message on queue', { queueName }); + + // Start tracking processing time + const endTimer = processingDurationHistogram.startTimer({ + queue: queueName, + }); + try { await this.onMessage(...args); + + // Increment the success counter + processedMessagesCounter.inc({ queue: queueName, status: 'success' }); } catch (error) { logger.logException('Error while handling QueueConsumer callback: ', { error: (error as Error).message, @@ -55,8 +69,14 @@ export abstract class QueueConsumer { args, }); + // Increment the failure counter + processedMessagesCounter.inc({ queue: queueName, status: 'failure' }); + // Re-throw the error to make sure the message is not acknowledged throw error; + } finally { + // Stop the timer + endTimer(); } }); logger.logInfo('Listening on queue', { queueName }); From 37fc6a0f8472dc8b097d8032b7866086c2cedcd3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 23:49:22 +0000 Subject: [PATCH 129/176] build(deps): bump pg from 8.13.0 to 8.13.1 Bumps [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) from 8.13.0 to 8.13.1. - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.13.1/packages/pg) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 87d31254..d4fd1fb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.0", + "pg": "^8.13.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", @@ -6831,9 +6831,9 @@ } }, "node_modules/pg": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.0.tgz", - "integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==", + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", "dependencies": { "pg-connection-string": "^2.7.0", "pg-pool": "^3.7.0", @@ -13730,9 +13730,9 @@ "dev": true }, "pg": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.0.tgz", - "integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==", + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", "requires": { "pg-cloudflare": "^1.1.1", "pg-connection-string": "^2.7.0", diff --git a/package.json b/package.json index 99a924c2..20f2ac71 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.0", + "pg": "^8.13.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", From 951846a203f468bac226edb5094436a69b8b18a2 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Thu, 31 Oct 2024 12:57:30 +0100 Subject: [PATCH 130/176] orcid lowercasing done --- .../consumers/syncProposalQueueConsumer.ts | 7 ++++++- .../visa/utils/sanitizeProposalMessage.ts | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/queue/consumers/visa/utils/sanitizeProposalMessage.ts diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index 3dc139d5..e7f25cbf 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -2,11 +2,13 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { Event } from '../../../../models/Event'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { QueueConsumer } from '../../QueueConsumer'; import { hasTriggeringStatus } from '../../utils/hasTriggeringStatus'; import { hasTriggeringType } from '../../utils/hasTriggeringType'; import { validateProposalMessage } from '../../utils/validateProposalMessage'; import { syncVisaProposal } from '../consumerCallbacks/syncVisaProposal'; +import { sanitizeProposalMessage } from '../utils/sanitizeProposalMessage'; const EVENTS_FOR_HANDLING = [ Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, @@ -40,7 +42,10 @@ export class SyncProposalQueueConsumer extends QueueConsumer { if (!hasStatus) { return; } - const proposalMessage = validateProposalMessage(message); + + const proposalMessage = validateProposalMessage( + sanitizeProposalMessage(message as ProposalMessageData) + ); await syncVisaProposal(proposalMessage); }; diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts new file mode 100644 index 00000000..053354ce --- /dev/null +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -0,0 +1,21 @@ +import { ProposalMessageData } from '../../../../models/ProposalMessage'; + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { + return { + ...proposalMessage, + members: proposalMessage.members.map((member) => ({ + ...member, + oidcSub: member.oidcSub.toLowerCase(), + email: member.email.toLowerCase(), + })), + proposer: proposalMessage.proposer + ? { + ...proposalMessage.proposer, + oidcSub: proposalMessage.proposer.oidcSub.toLowerCase(), + email: proposalMessage.proposer.email.toLowerCase(), + } + : undefined, + }; +} From 4268e2eb62ec71029bbb4832a380c5c3ac049c44 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:02:03 +0100 Subject: [PATCH 131/176] chore: update duo-message-broker dependency to version 1.7.0 (#467) --- package-lock.json | 14 +++++++------- package.json | 2 +- src/queue/messageBroker/getMockMessageBroker.ts | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4fd1fb0..b8ba190b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@user-office-software/duo-logger": "^2.2.1", - "@user-office-software/duo-message-broker": "^1.6.0", + "@user-office-software/duo-message-broker": "^1.7.0", "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", @@ -1992,9 +1992,9 @@ } }, "node_modules/@user-office-software/duo-message-broker": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@user-office-software/duo-message-broker/-/duo-message-broker-1.6.0.tgz", - "integrity": "sha512-sdU9qi23WoPOP8W+H3eF9qM5fdqQBtT3/nN+y0jFUykrA1vG25ZfEW1bC9sVWwBoofhGpnewi58IUngghdsg4A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@user-office-software/duo-message-broker/-/duo-message-broker-1.7.0.tgz", + "integrity": "sha512-OK8PhXxvNlR/PFugrVr1SYPkGZvgPmDMcSSxeC6cGVsSmLSvXYzz0YKoa8zblxPwXPcWC77yy4gPGb7jIzq1cg==", "dependencies": { "@types/amqplib": "^0.10.1", "@user-office-software/duo-logger": "^2.1.1", @@ -10307,9 +10307,9 @@ } }, "@user-office-software/duo-message-broker": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@user-office-software/duo-message-broker/-/duo-message-broker-1.6.0.tgz", - "integrity": "sha512-sdU9qi23WoPOP8W+H3eF9qM5fdqQBtT3/nN+y0jFUykrA1vG25ZfEW1bC9sVWwBoofhGpnewi58IUngghdsg4A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@user-office-software/duo-message-broker/-/duo-message-broker-1.7.0.tgz", + "integrity": "sha512-OK8PhXxvNlR/PFugrVr1SYPkGZvgPmDMcSSxeC6cGVsSmLSvXYzz0YKoa8zblxPwXPcWC77yy4gPGb7jIzq1cg==", "requires": { "@types/amqplib": "^0.10.1", "@user-office-software/duo-logger": "^2.1.1", diff --git a/package.json b/package.json index 20f2ac71..22f72334 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", - "@user-office-software/duo-message-broker": "^1.6.0", + "@user-office-software/duo-message-broker": "^1.7.0", "axios": "^1.7.7", "dotenv": "^16.4.5", "envalid": "^8.0.0", diff --git a/src/queue/messageBroker/getMockMessageBroker.ts b/src/queue/messageBroker/getMockMessageBroker.ts index 036d2942..3a0603c1 100644 --- a/src/queue/messageBroker/getMockMessageBroker.ts +++ b/src/queue/messageBroker/getMockMessageBroker.ts @@ -37,7 +37,7 @@ class MockMessageBroker implements MessageBroker { sendBroadcast(queue: Queue, type: string, message: string): Promise { throw new Error('Method not implemented.'); } - listenOn(queue: Queue, cb: ConsumerCallback): void { + listenOn(queue: Queue, cb: ConsumerCallback): Promise { throw new Error('Method not implemented.'); } listenOnBroadcast(cb: ConsumerCallback): void { From 1db26de3bb2737ceb674343da87f9304d2053e60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 23:46:41 +0000 Subject: [PATCH 132/176] build(deps-dev): bump @types/node from 22.7.7 to 22.8.7 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.7 to 22.8.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8ba190b..1891a32c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", - "@types/node": "^22.7.7", + "@types/node": "^22.8.7", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1588,11 +1588,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", - "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, "node_modules/@types/pg": { @@ -10037,11 +10037,11 @@ "dev": true }, "@types/node": { - "version": "22.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", - "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "requires": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, "@types/pg": { diff --git a/package.json b/package.json index 22f72334..7613b983 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", - "@types/node": "^22.7.7", + "@types/node": "^22.8.7", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", From bf584b15f7513dd725af61a76e3c09ebef0207c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 23:43:11 +0000 Subject: [PATCH 133/176] build(deps-dev): bump @types/node from 22.8.7 to 22.9.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.8.7 to 22.9.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1891a32c..0ac0c2d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", - "@types/node": "^22.8.7", + "@types/node": "^22.9.0", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1588,9 +1588,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dependencies": { "undici-types": "~6.19.8" } @@ -10037,9 +10037,9 @@ "dev": true }, "@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "requires": { "undici-types": "~6.19.8" } diff --git a/package.json b/package.json index 7613b983..f75a0a24 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.13", "@types/knex": "^0.16.1", - "@types/node": "^22.8.7", + "@types/node": "^22.9.0", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", From aeffb0b2a12b2d41722667563f4c7b9b8972837e Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Nov 2024 12:58:08 +0100 Subject: [PATCH 134/176] =?UTF-8?q?feat:=20add=20EVENT=5FTYPES=20for=20pro?= =?UTF-8?q?posal=20updates=20in=20ChatroomCreationQueueCo=E2=80=A6=20(#476?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scicatProposal/consumers/ChatroomCreationQueueConsumer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts index 1a2a58ad..748d700b 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts @@ -11,6 +11,7 @@ const EVENT_TYPES = [ Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, + Event.PROPOSAL_UPDATED, ]; const triggeringStatuses = process.env.SCICAT_PROPOSAL_TRIGGERING_STATUSES?.split(', '); From 87c1142a114e1414737faf179436fb66ee4e0d79 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 27 Nov 2024 13:17:10 +0100 Subject: [PATCH 135/176] fix: handle 404 error in checkProposalExists for upsertProposalInScicat (#478) --- .../upsertProposalInScicat.ts | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 52bbc12c..9aa0b47f 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -10,22 +10,17 @@ const sciCatPassword = process.env.SCICAT_PASSWORD; async function request( url: string, - config: RequestInit, - fetchAsPlainText = false + config: RequestInit ): Promise { // NOTE: Node v18 comes with fetch API by default const response = await fetch(url, config); if (!response.ok) { - return response.text().then((text) => { - throw new Error(`An error occurred while sending the request: ${text}`); + return response.text().then((errorDetail) => { + throw new Error(errorDetail); }); } - if (fetchAsPlainText) { - return (await response.text()) as TResponse; - } - return (await response.json()) as TResponse; } @@ -149,20 +144,21 @@ const checkProposalExists = async ( proposalId: string, sciCatAccessToken: string ) => { - // NOTE: Get proposal by id in scicat-backend-next returns 200 always even if proposal does not exist. This is why we check if there is something in the body. const url = `${sciCatBaseUrl}/Proposals/${proposalId}`; - const fetchedProposalDataAsText = await request( - url, - { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${sciCatAccessToken}`, - }, + const response = await request(url, { + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${sciCatAccessToken}`, }, - true - ); + }).catch((error) => { + const parsedError = JSON.parse(error.message || {}); + if (parsedError.statusCode === 404) { + return false; + } + throw error; + }); - if (fetchedProposalDataAsText) { + if (response) { return true; } else { return false; From 282df96d368147b7055021f1a3d34e9ce358b45d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 27 Nov 2024 14:32:47 +0100 Subject: [PATCH 136/176] fix: change fallback value of JSON.parse to string (#482) --- .../scicatProposal/consumerCallbacks/upsertProposalInScicat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 9aa0b47f..d76c9de6 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -151,7 +151,7 @@ const checkProposalExists = async ( Authorization: `Bearer ${sciCatAccessToken}`, }, }).catch((error) => { - const parsedError = JSON.parse(error.message || {}); + const parsedError = JSON.parse(error.message || '{}'); if (parsedError.statusCode === 404) { return false; } From 3090130d9e7ef56e82db73342aa4e6278665dc45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:10:52 +0000 Subject: [PATCH 137/176] build(deps): bump axios from 1.7.7 to 1.7.9 Bumps [axios](https://github.com/axios/axios) from 1.7.7 to 1.7.9. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.7...v1.7.9) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ac0c2d7..e600c277 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.7.7", + "axios": "^1.7.9", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.1", @@ -2309,9 +2309,9 @@ } }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10532,9 +10532,9 @@ } }, "axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index f75a0a24..ef2dfc4f 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.7.7", + "axios": "^1.7.9", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.1", From d89bb74be200056fbd9b17519125335b88c0071e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:16:36 +0000 Subject: [PATCH 138/176] build(deps): bump path-to-regexp and express Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) to 0.1.12 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `path-to-regexp` from 0.1.10 to 0.1.12 - [Release notes](https://github.com/pillarjs/path-to-regexp/releases) - [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md) - [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.10...v0.1.12) Updates `express` from 4.21.1 to 4.21.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.2/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.1...4.21.2) --- updated-dependencies: - dependency-name: path-to-regexp dependency-type: indirect - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 34 +++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index e600c277..cb8305d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.7.9", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.21.1", + "express": "^4.21.2", "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", @@ -3871,9 +3871,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3894,7 +3894,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -3909,6 +3909,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -6817,9 +6821,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -11638,9 +11642,9 @@ } }, "express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -11661,7 +11665,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -13719,9 +13723,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "path-type": { "version": "4.0.0", diff --git a/package.json b/package.json index ef2dfc4f..686f9ba7 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "axios": "^1.7.9", "dotenv": "^16.4.5", "envalid": "^8.0.0", - "express": "^4.21.1", + "express": "^4.21.2", "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", From e4d13f15f1d9b2dd3a1ebc9fb0341e699f1110bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 23:20:36 +0000 Subject: [PATCH 139/176] build(deps-dev): bump @types/jest from 29.5.13 to 29.5.14 Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.13 to 29.5.14. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb8305d7..58175882 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ }, "devDependencies": { "@types/express": "^4.17.21", - "@types/jest": "^29.5.13", + "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", "@types/node": "^22.9.0", "@types/pg": "^8.11.10", @@ -1556,9 +1556,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", - "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -10010,9 +10010,9 @@ } }, "@types/jest": { - "version": "29.5.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", - "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "requires": { "expect": "^29.0.0", diff --git a/package.json b/package.json index 686f9ba7..369c344c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "license": "MIT", "devDependencies": { "@types/express": "^4.17.21", - "@types/jest": "^29.5.13", + "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", "@types/node": "^22.9.0", "@types/pg": "^8.11.10", From a109597654633d36514f4c8a6ec7768b7cae2e8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:00:17 +0000 Subject: [PATCH 140/176] build(deps-dev): bump typescript from 5.6.3 to 5.7.2 Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.3 to 5.7.2. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.3...v5.7.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58175882..ecac3c1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "engines": { "node": ">=18.0.0", @@ -8501,9 +8501,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14904,9 +14904,9 @@ } }, "typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==" }, "unbox-primitive": { "version": "1.0.2", diff --git a/package.json b/package.json index 369c344c..ba0df1ed 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "lint-staged": "^15.2.10", "prettier": "3.3.3", "ts-jest": "^29.2.5", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "dependencies": { "@user-office-software/duo-logger": "^2.2.1", From e48cbca038c0c1ef71614f1c36a916609b7a4e32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 23:50:44 +0000 Subject: [PATCH 141/176] build(deps-dev): bump eslint-plugin-jest from 28.8.3 to 28.11.0 Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.8.3 to 28.11.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.8.3...v28.11.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ecac3c1d..01d55ba4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.8.3", + "eslint-plugin-jest": "^28.11.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", @@ -3608,10 +3608,11 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.8.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", - "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", + "version": "28.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz", + "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, @@ -11498,9 +11499,9 @@ } }, "eslint-plugin-jest": { - "version": "28.8.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", - "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", + "version": "28.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz", + "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==", "dev": true, "requires": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" diff --git a/package.json b/package.json index ba0df1ed..b236487b 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.8.3", + "eslint-plugin-jest": "^28.11.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", From 52ab7c6b16a84ddc8d5b96fbee0b25bd786c9f51 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Feb 2025 16:04:11 +0100 Subject: [PATCH 142/176] fix: improve error handling in checkProposalExists function (#505) --- .../proposalFoldersCreation.spec.ts | 2 +- .../consumerCallbacks/upsertProposalInScicat.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts index 24a1936f..28ade264 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts @@ -85,7 +85,7 @@ describe('proposalFoldersCreation', () => { expect(exec).toHaveBeenCalledTimes(1); expect(exec).toHaveBeenCalledWith( - 'command shortcode 2024 shortCode group_prefix_shortCode test.proposer@email.com test.member@email.com', + 'command shortcode 2025 shortCode group_prefix_shortCode test.proposer@email.com test.member@email.com', expect.any(Function) ); }); diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index d76c9de6..2c81043a 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -151,9 +151,16 @@ const checkProposalExists = async ( Authorization: `Bearer ${sciCatAccessToken}`, }, }).catch((error) => { - const parsedError = JSON.parse(error.message || '{}'); - if (parsedError.statusCode === 404) { - return false; + try { + const parsedError = JSON.parse(error.message); + if (parsedError.statusCode === 404) { + return false; + } + } catch (reason) { + logger.logError('Error parsing error message', { + error, + reason, + }); } throw error; }); From 176a4611020360079f6fa04490334c5db804bce3 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Fri, 28 Feb 2025 11:46:31 +0100 Subject: [PATCH 143/176] chore: upgrade Node.js version to 22 in Dockerfiles and update engine requirements (#506) Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- Dockerfile | 4 ++-- Dockerfile.connector.dev | 11 +++++++++++ README.md | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 Dockerfile.connector.dev diff --git a/Dockerfile b/Dockerfile index bd3ec80e..e8064497 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18-alpine AS build-stage +FROM node:22-alpine AS build-stage USER node @@ -14,7 +14,7 @@ COPY --chown=node:node . . RUN npm run build -FROM node:18-alpine +FROM node:22-alpine USER node diff --git a/Dockerfile.connector.dev b/Dockerfile.connector.dev new file mode 100644 index 00000000..0abffcf5 --- /dev/null +++ b/Dockerfile.connector.dev @@ -0,0 +1,11 @@ +FROM node:22-alpine + +USER node + +RUN mkdir -p /home/node/app + +WORKDIR /home/node/app + +COPY --chown=node:node package*.json ./ + +RUN npm ci --loglevel error --no-fund diff --git a/README.md b/README.md index cf549ace..3c673db8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The connector connects other services through the message queue. # Requirements -This service requires node =>18.0.0 +This service requires node >=22.0.0 ## Getting started diff --git a/package-lock.json b/package-lock.json index ecac3c1d..e39a445c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,8 +46,8 @@ "typescript": "^5.7.2" }, "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" + "node": ">=22.0.0", + "npm": ">=10.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/package.json b/package.json index ba0df1ed..291e0f52 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "service" ], "engines": { - "npm": ">=9.0.0", - "node": ">=18.0.0" + "npm": ">=10.0.0", + "node": ">=22.0.0" }, "author": "SIMS", "license": "MIT", From 6c7f2ba54bd598682908bfa2f6ad414d23e8e30c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 23:42:39 +0000 Subject: [PATCH 144/176] build(deps-dev): bump lint-staged from 15.2.10 to 15.4.3 Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.10 to 15.4.3. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.10...v15.4.3) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 284 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 170 insertions(+), 116 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e3b127e..0232274c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", "jest": "^29.7.0", - "lint-staged": "^15.2.10", + "lint-staged": "^15.4.3", "prettier": "3.3.3", "ts-jest": "^29.2.5", "typescript": "^5.7.2" @@ -2711,6 +2711,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" }, @@ -2726,6 +2727,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -2738,10 +2740,11 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2750,16 +2753,18 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -2777,6 +2782,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2839,7 +2845,8 @@ "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2853,10 +2860,11 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -3259,6 +3267,7 @@ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -3813,7 +3822,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", @@ -4278,10 +4288,11 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -5811,10 +5822,11 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5829,21 +5841,22 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.10", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", - "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", - "dev": true, - "dependencies": { - "chalk": "~5.3.0", - "commander": "~12.1.0", - "debug": "~4.3.6", - "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", - "micromatch": "~4.0.8", - "pidtree": "~0.6.0", - "string-argv": "~0.3.2", - "yaml": "~2.5.0" + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz", + "integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -5856,10 +5869,11 @@ } }, "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5868,12 +5882,13 @@ } }, "node_modules/lint-staged/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5952,6 +5967,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -6019,10 +6041,11 @@ } }, "node_modules/listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -6036,10 +6059,11 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6052,6 +6076,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6060,16 +6085,18 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -6087,6 +6114,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6102,6 +6130,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -6151,6 +6180,7 @@ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", @@ -6170,6 +6200,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "license": "MIT", "dependencies": { "environment": "^1.0.0" }, @@ -6181,10 +6212,11 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6197,6 +6229,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6205,16 +6238,18 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -6230,6 +6265,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -6246,6 +6282,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -6263,6 +6300,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6278,6 +6316,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -6472,6 +6511,7 @@ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -7470,6 +7510,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" @@ -7486,6 +7527,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" }, @@ -7501,6 +7543,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -7530,7 +7573,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", @@ -7804,6 +7848,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -7820,6 +7865,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7832,6 +7878,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8761,10 +8808,11 @@ "dev": true }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -10843,15 +10891,15 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "string-width": { @@ -10929,9 +10977,9 @@ } }, "commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true }, "concat-map": { @@ -11961,9 +12009,9 @@ "dev": true }, "get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true }, "get-intrinsic": { @@ -13037,9 +13085,9 @@ } }, "lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true }, "lines-and-columns": { @@ -13049,36 +13097,36 @@ "dev": true }, "lint-staged": { - "version": "15.2.10", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", - "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz", + "integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==", "dev": true, "requires": { - "chalk": "~5.3.0", - "commander": "~12.1.0", - "debug": "~4.3.6", - "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", - "micromatch": "~4.0.8", - "pidtree": "~0.6.0", - "string-argv": "~0.3.2", - "yaml": "~2.5.0" + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" }, "dependencies": { "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true }, "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "execa": { @@ -13122,6 +13170,12 @@ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -13161,9 +13215,9 @@ } }, "listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, "requires": { "cli-truncate": "^4.0.0", @@ -13175,9 +13229,9 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "ansi-styles": { @@ -13187,9 +13241,9 @@ "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "string-width": { @@ -13274,9 +13328,9 @@ } }, "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "ansi-styles": { @@ -13286,9 +13340,9 @@ "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "is-fullwidth-code-point": { @@ -15091,9 +15145,9 @@ "dev": true }, "yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 084475f1..09fd38fa 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", "jest": "^29.7.0", - "lint-staged": "^15.2.10", + "lint-staged": "^15.4.3", "prettier": "3.3.3", "ts-jest": "^29.2.5", "typescript": "^5.7.2" From 1dd5899c40d3a80959dbc021c26cbd04121436c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 23:48:09 +0000 Subject: [PATCH 145/176] build(deps-dev): bump @types/node from 22.9.0 to 22.13.9 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.9.0 to 22.13.9. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 32 +++++++++++++++++--------------- package.json | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0232274c..904a0082 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", - "@types/node": "^22.9.0", + "@types/node": "^22.13.9", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", @@ -1588,11 +1588,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "version": "22.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/pg": { @@ -8576,9 +8577,10 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" }, "node_modules/unhomoglyph": { "version": "1.0.6", @@ -10090,11 +10092,11 @@ "dev": true }, "@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "version": "22.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "requires": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "@types/pg": { @@ -14976,9 +14978,9 @@ } }, "undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "unhomoglyph": { "version": "1.0.6", diff --git a/package.json b/package.json index 09fd38fa..20f9e762 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/express": "^4.17.21", "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", - "@types/node": "^22.9.0", + "@types/node": "^22.13.9", "@types/pg": "^8.11.10", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", From 621ae8ca00dee9682482a130c7ab4b2229caa5f8 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:09:19 +0100 Subject: [PATCH 146/176] refactor: replace email with oidcSub in One Identity integration (#510) --- .../oneIdentityIntegrationHandler.spec.ts | 15 ++++++++------ .../oneIdentityIntegrationHandler.ts | 2 +- .../oneidentity/utils/ESSOneIdentity.spec.ts | 20 +++++++++---------- .../oneidentity/utils/ESSOneIdentity.ts | 10 ++++------ 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts index da3cd746..395b07a1 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts @@ -40,11 +40,11 @@ const setupMocks = (data: { mockOneIdentity.getPersons.mockResolvedValueOnce( data.getPersons ?? [ { - email: 'proposer@email', + oidcSub: 'proposer-oidc-sub', uidPerson: 'proposer-uid', }, { - email: 'member@email', + oidcSub: 'member-oidc-sub', uidPerson: 'member-uid', }, ] @@ -53,8 +53,8 @@ const setupMocks = (data: { const proposalMessage = { shortCode: 'shortCode', - proposer: { email: 'proposer@email' }, - members: [{ email: 'member@email' }], + proposer: { oidcSub: 'proposer-oidc-sub' }, + members: [{ oidcSub: 'member-oidc-sub' }], } as ProposalMessageData; describe('oneIdentityIntegrationHandler', () => { @@ -104,7 +104,7 @@ describe('oneIdentityIntegrationHandler', () => { getProposalPersonConnections: [], getPersons: [ { - email: 'proposer@email', + oidcSub: 'proposer-oidc-sub', uidPerson: 'proposer-uid', }, ], @@ -118,7 +118,10 @@ describe('oneIdentityIntegrationHandler', () => { expect(logger.logError).toHaveBeenCalledWith( 'Not all users found in One Identity (investigate)', { - users: [{ email: 'member@email' }, { email: 'proposer@email' }], + users: [ + { oidcSub: 'member-oidc-sub' }, + { oidcSub: 'proposer-oidc-sub' }, + ], uidPersons: ['proposer-uid'], } ); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts index 67f3aebb..d0008167 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts @@ -106,7 +106,7 @@ function getUidPersons( ): UID_Person[] { return userPersonConnections .filter( - (connection): connection is { email: string; uidPerson: UID_Person } => + (connection): connection is { oidcSub: string; uidPerson: UID_Person } => connection.uidPerson !== undefined ) .map(({ uidPerson }) => uidPerson); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts index bf73d3f1..c699bbf6 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts @@ -113,18 +113,17 @@ describe('ESSOneIdentity', () => { ]); const result = await essOneIdentity.getPerson({ - email: 'foo@email', + oidcSub: '0000-0000-0000-0000', }); expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( 'Person', - "ContactEmail='foo@email' OR DefaultEmailAddress='foo@email'" + "CentralAccount='0000-0000-0000-0000'" ); expect(result).toEqual({ UID_Person: 'person-uid' }); }); - // Currently, the ContactEmail field is not unique in the 1IM.Person table. - // This means that it is possible to have multiple persons with the same email. + // The CentralAccount is unique, but the response is an array of entities it('should return the first person if multiple persons are found', async () => { mockOneIdentityApi.getEntities.mockResolvedValueOnce([ { @@ -140,7 +139,7 @@ describe('ESSOneIdentity', () => { ]); const result = await essOneIdentity.getPerson({ - email: 'foo@email', + oidcSub: '0000-0000-0000-0000', }); expect(result).toEqual({ UID_Person: 'person-1-uid' }); @@ -152,8 +151,7 @@ describe('ESSOneIdentity', () => { mockOneIdentityApi.getEntities.mockImplementation((table, filter) => { if ( table === 'Person' && - filter === - "ContactEmail='unknown-email' OR DefaultEmailAddress='unknown-email'" + filter === "CentralAccount='unknown-oidc-sub'" ) return Promise.resolve([]); else @@ -168,20 +166,20 @@ describe('ESSOneIdentity', () => { const result = await essOneIdentity.getPersons([ { - email: 'unknown-email', + oidcSub: 'unknown-oidc-sub', } as ProposalUser, { - email: 'known-email', + oidcSub: 'known-oidc-sub', } as ProposalUser, ]); expect(result).toEqual([ { - email: 'unknown-email', + oidcSub: 'unknown-oidc-sub', uidPerson: undefined, }, { - email: 'known-email', + oidcSub: 'known-oidc-sub', uidPerson: 'known-person-uid', }, ]); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts index d9afda4d..c5952b39 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts @@ -29,7 +29,7 @@ export interface PersonHasESETValues { } export interface UserPersonConnection { - email: string; + oidcSub: string; uidPerson: UID_Person | undefined; } @@ -95,15 +95,13 @@ export class ESSOneIdentity { } public async getPerson( - user: Pick + user: Pick ): Promise { const entities = await this.oneIdentityApi.getEntities( 'Person', - `ContactEmail='${user.email}' OR DefaultEmailAddress='${user.email}'` // ContactEmail is for scienceusers, DefaultEmailAddress is for ESS employees + `CentralAccount='${user.oidcSub}'` ); - // In theory there should be only one person with the same email, but the 1IM.Person table has no unique constraint on ContactEmail. - // We can't control this, so we just take the first one. return entities[0]?.values; } @@ -116,7 +114,7 @@ export class ESSOneIdentity { .map(async (user) => { const uidPerson = (await this.getPerson(user))?.UID_Person; - return { email: user.email, uidPerson }; + return { oidcSub: user.oidcSub, uidPerson }; }) ); } From 8878ec226b4fa7e5ad3332a8d99124ed3f090a4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 00:10:40 +0000 Subject: [PATCH 147/176] build(deps-dev): bump eslint-plugin-prettier from 5.2.1 to 5.2.3 Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.1 to 5.2.3. - [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases) - [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.1...v5.2.3) --- updated-dependencies: - dependency-name: eslint-plugin-prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 904a0082..a586d83f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.2.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", "jest": "^29.7.0", @@ -3644,10 +3644,11 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", + "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" @@ -11558,9 +11559,9 @@ } }, "eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", + "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", diff --git a/package.json b/package.json index 20f9e762..ad8a6600 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.2.3", "eslint-plugin-unused-imports": "^3.2.0", "husky": "^9.1.6", "jest": "^29.7.0", From 7f3977408634956c86e61a0eda9887711c336b61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 00:15:46 +0000 Subject: [PATCH 148/176] build(deps): bump axios from 1.7.9 to 1.8.2 Bumps [axios](https://github.com/axios/axios) from 1.7.9 to 1.8.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.9...v1.8.2) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a586d83f..50e87d38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.7.9", + "axios": "^1.8.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.2", @@ -2310,9 +2310,10 @@ } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", + "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10588,9 +10589,9 @@ } }, "axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", + "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/package.json b/package.json index ad8a6600..1c497e5b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.7.9", + "axios": "^1.8.2", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.2", From 7a0483ec09265f9e158f8196982e298b1effc733 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 00:21:23 +0000 Subject: [PATCH 149/176] build(deps): bump pg and @types/pg Bumps [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) and [@types/pg](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pg). These dependencies needed to be updated together. Updates `pg` from 8.13.1 to 8.13.3 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.13.3/packages/pg) Updates `@types/pg` from 8.11.10 to 8.11.11 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/pg) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/pg" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 64 +++++++++++++++++++++++++---------------------- package.json | 4 +-- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50e87d38..b863fdc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.1", + "pg": "^8.13.3", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", @@ -29,7 +29,7 @@ "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", "@types/node": "^22.13.9", - "@types/pg": "^8.11.10", + "@types/pg": "^8.11.11", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", @@ -1597,10 +1597,11 @@ } }, "node_modules/@types/pg": { - "version": "8.11.10", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.10.tgz", - "integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==", + "version": "8.11.11", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.11.tgz", + "integrity": "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -6879,13 +6880,14 @@ } }, "node_modules/pg": { - "version": "8.13.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", - "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "version": "8.13.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.3.tgz", + "integrity": "sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==", + "license": "MIT", "dependencies": { "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.0", - "pg-protocol": "^1.7.0", + "pg-pool": "^3.7.1", + "pg-protocol": "^1.7.1", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -6933,17 +6935,19 @@ } }, "node_modules/pg-pool": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", - "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.1.tgz", + "integrity": "sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==", + "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", - "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.1.tgz", + "integrity": "sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==", + "license": "MIT" }, "node_modules/pg-types": { "version": "4.0.2", @@ -10102,9 +10106,9 @@ } }, "@types/pg": { - "version": "8.11.10", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.10.tgz", - "integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==", + "version": "8.11.11", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.11.tgz", + "integrity": "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==", "dev": true, "requires": { "@types/node": "*", @@ -13793,14 +13797,14 @@ "dev": true }, "pg": { - "version": "8.13.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", - "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "version": "8.13.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.3.tgz", + "integrity": "sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==", "requires": { "pg-cloudflare": "^1.1.1", "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.0", - "pg-protocol": "^1.7.0", + "pg-pool": "^3.7.1", + "pg-protocol": "^1.7.1", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -13870,15 +13874,15 @@ "dev": true }, "pg-pool": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", - "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.1.tgz", + "integrity": "sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==", "requires": {} }, "pg-protocol": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", - "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.1.tgz", + "integrity": "sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==" }, "pg-types": { "version": "4.0.2", diff --git a/package.json b/package.json index 1c497e5b..4596c194 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/jest": "^29.5.14", "@types/knex": "^0.16.1", "@types/node": "^22.13.9", - "@types/pg": "^8.11.10", + "@types/pg": "^8.11.11", "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.18.0", "eslint": "^8.57.1", @@ -54,7 +54,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.1", + "pg": "^8.13.3", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", From 9295086e17ecd3ef0b70a0c483e559bdece0cbd3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 23:23:05 +0000 Subject: [PATCH 150/176] build(deps): bump pg from 8.13.3 to 8.14.1 Bumps [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) from 8.13.3 to 8.14.1. - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.14.1/packages/pg) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index b863fdc6..c8a5eb97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.3", + "pg": "^8.14.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", @@ -6880,14 +6880,14 @@ } }, "node_modules/pg": { - "version": "8.13.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.3.tgz", - "integrity": "sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", + "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", "license": "MIT", "dependencies": { "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.1", - "pg-protocol": "^1.7.1", + "pg-pool": "^3.8.0", + "pg-protocol": "^1.8.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -6935,18 +6935,18 @@ } }, "node_modules/pg-pool": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.1.tgz", - "integrity": "sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz", + "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.1.tgz", - "integrity": "sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz", + "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==", "license": "MIT" }, "node_modules/pg-types": { @@ -13797,14 +13797,14 @@ "dev": true }, "pg": { - "version": "8.13.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.3.tgz", - "integrity": "sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", + "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", "requires": { "pg-cloudflare": "^1.1.1", "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.1", - "pg-protocol": "^1.7.1", + "pg-pool": "^3.8.0", + "pg-protocol": "^1.8.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -13874,15 +13874,15 @@ "dev": true }, "pg-pool": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.1.tgz", - "integrity": "sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz", + "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==", "requires": {} }, "pg-protocol": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.1.tgz", - "integrity": "sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz", + "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==" }, "pg-types": { "version": "4.0.2", diff --git a/package.json b/package.json index 4596c194..b855f9c6 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "kafkajs": "^2.2.3", "knex": "^3.1.0", "matrix-js-sdk": "24.1.0", - "pg": "^8.13.3", + "pg": "^8.14.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "ts-node-dev": "^2.0.0", From 9d3f5da8fe44790e4bd4563da41bdbf680b987e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 23:35:06 +0000 Subject: [PATCH 151/176] build(deps): bump @babel/runtime from 7.21.0 to 7.26.10 Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.21.0 to 7.26.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8a5eb97..2e73f81d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,11 +680,12 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -7421,9 +7422,10 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", @@ -9349,11 +9351,11 @@ } }, "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" } }, "@babel/template": { @@ -14176,9 +14178,9 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regexp.prototype.flags": { "version": "1.5.3", From 0c148426a222451fe195ce26840c1711e41d58a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 23:40:26 +0000 Subject: [PATCH 152/176] build(deps-dev): bump ts-jest from 29.2.5 to 29.2.6 Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.2.5 to 29.2.6. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.5...v29.2.6) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 32 +++++++++++++++++--------------- package.json | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e73f81d..d00eeffe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "jest": "^29.7.0", "lint-staged": "^15.4.3", "prettier": "3.3.3", - "ts-jest": "^29.2.5", + "ts-jest": "^29.2.6", "typescript": "^5.7.2" }, "engines": { @@ -7683,10 +7683,11 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -8225,10 +8226,11 @@ } }, "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "version": "29.2.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", + "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -8237,7 +8239,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", "yargs-parser": "^21.1.1" }, "bin": { @@ -14353,9 +14355,9 @@ "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==" }, "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true }, "send": { @@ -14751,9 +14753,9 @@ "requires": {} }, "ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "version": "29.2.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", + "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", "dev": true, "requires": { "bs-logger": "^0.2.6", @@ -14763,7 +14765,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", "yargs-parser": "^21.1.1" } }, diff --git a/package.json b/package.json index b855f9c6..da28f0e8 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "jest": "^29.7.0", "lint-staged": "^15.4.3", "prettier": "3.3.3", - "ts-jest": "^29.2.5", + "ts-jest": "^29.2.6", "typescript": "^5.7.2" }, "dependencies": { From c86f5c96dfefacbb14f35d134eec835a31e468b9 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Mon, 24 Mar 2025 10:40:29 +0100 Subject: [PATCH 153/176] feat: Add OneIdentity integration for visitor access management (#515) Co-authored-by: Jekabs Karklins <58165815+jekabs-karklins@users.noreply.github.com> --- src/models/Event.ts | 2 + ...neIdentityIntegrationQueueConsumer.spec.ts | 230 ++++++++-- .../OneIdentityIntegrationQueueConsumer.ts | 62 ++- src/queue/consumers/oneidentity/README.md | 102 +++++ ...salAndMembersToOneIdentityHandler.spec.ts} | 45 +- ...ProposalAndMembersToOneIdentityHandler.ts} | 19 +- .../syncVisitToOneIdentityHandler.spec.ts | 415 ++++++++++++++++++ .../syncVisitToOneIdentityHandler.ts | 164 +++++++ .../oneidentity/utils/ESSOneIdentity.spec.ts | 246 ++++++++++- .../oneidentity/utils/ESSOneIdentity.ts | 117 +++-- .../oneidentity/utils/OneIdentityApi.spec.ts | 54 +++ .../oneidentity/utils/OneIdentityApi.ts | 22 +- .../oneidentity/utils/interfaces/Eset.ts | 10 + .../oneidentity/utils/interfaces/EsetType.ts | 6 + .../oneidentity/utils/interfaces/Person.ts | 13 + .../utils/interfaces/PersonHasESET.ts | 7 + .../utils/interfaces/PersonWantsOrg.ts | 93 ++++ .../SCProposalSiteAccessResponse.ts | 14 + .../utils/interfaces/VisitMessage.ts | 5 + ...pec.ts => validateProposalMessage.spec.ts} | 16 +- ...geFields.ts => validateProposalMessage.ts} | 6 +- .../utils/validateVisitMessage.spec.ts | 62 +++ .../oneidentity/utils/validateVisitMessage.ts | 13 + 23 files changed, 1596 insertions(+), 127 deletions(-) create mode 100644 src/queue/consumers/oneidentity/README.md rename src/queue/consumers/oneidentity/consumerCallbacks/{oneIdentityIntegrationHandler.spec.ts => syncProposalAndMembersToOneIdentityHandler.spec.ts} (82%) rename src/queue/consumers/oneidentity/consumerCallbacks/{oneIdentityIntegrationHandler.ts => syncProposalAndMembersToOneIdentityHandler.ts} (91%) create mode 100644 src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts create mode 100644 src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/Eset.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/EsetType.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/Person.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/PersonHasESET.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/PersonWantsOrg.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/SCProposalSiteAccessResponse.ts create mode 100644 src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts rename src/queue/consumers/oneidentity/utils/{validateRequiredProposalMessageFields.spec.ts => validateProposalMessage.spec.ts} (63%) rename src/queue/consumers/oneidentity/utils/{validateRequiredProposalMessageFields.ts => validateProposalMessage.ts} (69%) create mode 100644 src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts create mode 100644 src/queue/consumers/oneidentity/utils/validateVisitMessage.ts diff --git a/src/models/Event.ts b/src/models/Event.ts index 5661f87d..335d7216 100644 --- a/src/models/Event.ts +++ b/src/models/Event.ts @@ -4,4 +4,6 @@ export enum Event { PROPOSAL_STATUS_ACTION_EXECUTED = 'PROPOSAL_STATUS_ACTION_EXECUTED', PROPOSAL_ACCEPTED = 'PROPOSAL_ACCEPTED', PROPOSAL_UPDATED = 'PROPOSAL_UPDATED', + VISIT_CREATED = 'VISIT_CREATED', + VISIT_DELETED = 'VISIT_DELETED', } diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts index 7ef8c4ef..4fccfc5f 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts @@ -4,14 +4,21 @@ jest.mock('../QueueConsumer', () => ({ start: jest.fn(), })), })); -jest.mock('./consumerCallbacks/oneIdentityIntegrationHandler'); +jest.mock('./consumerCallbacks/syncProposalAndMembersToOneIdentityHandler'); +jest.mock('./consumerCallbacks/syncVisitToOneIdentityHandler'); +jest.mock('axios', () => ({ + isAxiosError: jest.fn(), +})); import { logger } from '@user-office-software/duo-logger'; import { MessageBroker } from '@user-office-software/duo-message-broker'; import { MessageProperties } from 'amqplib'; +import { isAxiosError } from 'axios'; -import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; +import { syncProposalAndMembersToOneIdentityHandler } from './consumerCallbacks/syncProposalAndMembersToOneIdentityHandler'; +import { syncVisitToOneIdentityHandler } from './consumerCallbacks/syncVisitToOneIdentityHandler'; import { OneIdentityIntegrationQueueConsumer } from './OneIdentityIntegrationQueueConsumer'; +import { VisitMessage } from './utils/interfaces/VisitMessage'; import { Event } from '../../../models/Event'; import { ProposalMessageData } from '../../../models/ProposalMessage'; @@ -47,54 +54,197 @@ describe('OneIdentityIntegrationQueueConsumer', () => { ).rejects.toThrow('Invalid proposal message'); }); - it('should call oneIdentityIntegrationHandler and log message handled', async () => { - const message = createProposalMessage({ - shortCode: 'shortCode', - proposerEmail: 'proposer-email', - memberEmails: [], - }); - const type = Event.PROPOSAL_ACCEPTED; + describe('syncProposalAndMembersToOneIdentityHandler', () => { + it('should call syncProposalAndMembersToOneIdentityHandler and log message handled', async () => { + const message = createProposalMessage({ + shortCode: 'shortCode', + proposerEmail: 'proposer-email', + memberEmails: [], + }); + const type = Event.PROPOSAL_ACCEPTED; - await consumer.onMessage(type, message, {} as MessageProperties); + await consumer.onMessage(type, message, {} as MessageProperties); - expect(logger.logInfo).toHaveBeenNthCalledWith( - 1, - 'OneIdentityIntegrationQueueConsumer', - { - type, + expect(syncProposalAndMembersToOneIdentityHandler).toHaveBeenCalledWith( message, - } - ); - expect(logger.logInfo).toHaveBeenNthCalledWith(2, 'Message handled', { - type, - message, + type + ); + expect(logger.logInfo).toHaveBeenNthCalledWith( + 1, + 'OneIdentityIntegrationQueueConsumer', + { + type, + message, + } + ); + expect(logger.logInfo).toHaveBeenNthCalledWith( + 2, + 'Message handled by OneIdentityIntegrationQueueConsumer', + { + type, + message, + } + ); + expect(logger.logException).not.toHaveBeenCalled(); }); - expect(logger.logException).not.toHaveBeenCalled(); - }); - it('should log exception and re-throw error if oneIdentityIntegrationHandler throws', async () => { - const message = createProposalMessage({ - shortCode: 'shortCode', - proposerEmail: 'proposer-email', - memberEmails: [], + it('should log exception and re-throw error if syncProposalAndMembersToOneIdentityHandler throws', async () => { + const message = createProposalMessage({ + shortCode: 'shortCode', + proposerEmail: 'proposer-email', + memberEmails: [], + }); + const type = Event.PROPOSAL_ACCEPTED; + const error = new Error('Error'); + + ( + syncProposalAndMembersToOneIdentityHandler as jest.Mock + ).mockRejectedValueOnce(error); + + await expect( + consumer.onMessage(type, message, {} as MessageProperties) + ).rejects.toThrow(error); + + expect(logger.logException).toHaveBeenCalledWith( + 'Error while handling message in OneIdentityIntegrationQueueConsumer', + error, + { + type, + message, + } + ); }); - const type = Event.PROPOSAL_ACCEPTED; - const error = new Error('Error'); - (oneIdentityIntegrationHandler as jest.Mock).mockRejectedValueOnce(error); + it('should include Axios error response data in logs when available', async () => { + const message = createProposalMessage({ + shortCode: 'shortCode', + proposerEmail: 'proposer-email', + memberEmails: [], + }); + const type = Event.PROPOSAL_ACCEPTED; - await expect( - consumer.onMessage(type, message, {} as MessageProperties) - ).rejects.toThrow(error); + const axiosError = new Error('Axios Error'); + const mockResponse = { + status: 400, + headers: { 'content-type': 'application/json' }, + data: { message: 'Bad Request' }, + }; + + Object.assign(axiosError, { + isAxiosError: true, + response: mockResponse, + }); + + (isAxiosError as unknown as jest.Mock).mockReturnValueOnce(true); + ( + syncProposalAndMembersToOneIdentityHandler as jest.Mock + ).mockRejectedValueOnce(axiosError); + + await expect( + consumer.onMessage(type, message, {} as MessageProperties) + ).rejects.toThrow(axiosError); - expect(logger.logException).toHaveBeenCalledWith( - 'Error while handling proposal', - error, - { - type, + expect(logger.logException).toHaveBeenCalledWith( + 'Error while handling message in OneIdentityIntegrationQueueConsumer', + axiosError, + { + type, + message, + response: { + status: mockResponse.status, + headers: mockResponse.headers, + data: mockResponse.data, + }, + } + ); + }); + }); + + describe('syncVisitToOneIdentityHandler', () => { + it('should call syncVisitToOneIdentityHandler and log message handled', async () => { + const message = { + visitorId: 'visitor-id', + startAt: '2021-01-01T00:00:00Z', + endAt: '2021-01-02T00:00:00Z', + } as VisitMessage; + const type = Event.VISIT_CREATED; + + jest.mock('./utils/validateVisitMessage', () => ({ + validateVisitMessage: jest.fn().mockReturnValue(message), + })); + + await consumer.onMessage(type, message as any, {} as MessageProperties); + + expect(syncVisitToOneIdentityHandler).toHaveBeenCalledWith( message, - } - ); + type + ); + expect(logger.logInfo).toHaveBeenNthCalledWith( + 1, + 'OneIdentityIntegrationQueueConsumer', + { + type, + message, + } + ); + expect(logger.logInfo).toHaveBeenNthCalledWith( + 2, + 'Message handled by OneIdentityIntegrationQueueConsumer', + { + type, + message, + } + ); + expect(logger.logException).not.toHaveBeenCalled(); + }); + + it('should log exception with Axios error details when syncVisitToOneIdentityHandler throws an Axios error', async () => { + const message = { + visitorId: 'visitor-id', + startAt: '2021-01-01T00:00:00Z', + endAt: '2021-01-02T00:00:00Z', + } as VisitMessage; + const type = Event.VISIT_CREATED; + + const axiosError = new Error('Axios Error'); + const mockResponse = { + status: 500, + headers: { 'content-type': 'application/json' }, + data: { message: 'Internal Server Error' }, + }; + + Object.assign(axiosError, { + isAxiosError: true, + response: mockResponse, + }); + + jest.mock('./utils/validateVisitMessage', () => ({ + validateVisitMessage: jest.fn().mockReturnValue(message), + })); + + (isAxiosError as unknown as jest.Mock).mockReturnValueOnce(true); + (syncVisitToOneIdentityHandler as jest.Mock) = jest + .fn() + .mockRejectedValueOnce(axiosError); + + await expect( + consumer.onMessage(type, message as any, {} as MessageProperties) + ).rejects.toThrow(axiosError); + + expect(logger.logException).toHaveBeenCalledWith( + 'Error while handling message in OneIdentityIntegrationQueueConsumer', + axiosError, + { + type, + message, + response: { + status: mockResponse.status, + headers: mockResponse.headers, + data: mockResponse.data, + }, + } + ); + }); }); }); diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts index 680e31c7..44c9133f 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -2,17 +2,30 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { isAxiosError } from 'axios'; -import { oneIdentityIntegrationHandler } from './consumerCallbacks/oneIdentityIntegrationHandler'; -import { validateRequiredProposalMessageFields } from './utils/validateRequiredProposalMessageFields'; +import { syncProposalAndMembersToOneIdentityHandler } from './consumerCallbacks/syncProposalAndMembersToOneIdentityHandler'; +import { syncVisitToOneIdentityHandler } from './consumerCallbacks/syncVisitToOneIdentityHandler'; +import { validateProposalMessage } from './utils/validateProposalMessage'; import { Event } from '../../../models/Event'; import { QueueConsumer } from '../QueueConsumer'; import { hasTriggeringType } from '../utils/hasTriggeringType'; +import { validateVisitMessage } from './utils/validateVisitMessage'; const ONE_IDENTITY_INTEGRATION_QUEUE_NAME = process.env.ONE_IDENTITY_INTEGRATION_QUEUE_NAME || ''; const USER_OFFICE_CORE_EXCHANGE_NAME = process.env.USER_OFFICE_CORE_EXCHANGE_NAME || ''; -const EVENTS_FOR_HANDLING = [Event.PROPOSAL_ACCEPTED, Event.PROPOSAL_UPDATED]; + +// Events that trigger the handling of syncing proposals and members to One Identity +const SYNC_PROPOSAL_AND_MEMBERS_EVENTS_FOR_HANDLING = [ + Event.PROPOSAL_ACCEPTED, + Event.PROPOSAL_UPDATED, +]; + +// Events that trigger the handling of syncing visits to One Identity +const SYNC_VISIT_EVENTS_FOR_HANDLING = [ + Event.VISIT_CREATED, + Event.VISIT_DELETED, +]; // Class for consuming messages from the ESS One Identity Integration Queue export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { @@ -25,9 +38,17 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { } onMessage: ConsumerCallback = async (type, message) => { - if (!hasTriggeringType(type, EVENTS_FOR_HANDLING)) { - return; - } + const eventType = type as Event; + const isProposalEvent = hasTriggeringType( + eventType, + SYNC_PROPOSAL_AND_MEMBERS_EVENTS_FOR_HANDLING + ); + const isVisitEvent = hasTriggeringType( + eventType, + SYNC_VISIT_EVENTS_FOR_HANDLING + ); + + if (!isProposalEvent && !isVisitEvent) return; logger.logInfo('OneIdentityIntegrationQueueConsumer', { type, @@ -35,22 +56,33 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { }); try { - const proposalMessage = validateRequiredProposalMessageFields(message); + if (isProposalEvent) { + const proposalMessage = validateProposalMessage(message); + await syncProposalAndMembersToOneIdentityHandler( + proposalMessage, + eventType + ); + } else if (isVisitEvent) { + const visitMessage = validateVisitMessage(message); + await syncVisitToOneIdentityHandler(visitMessage, eventType); + } - await oneIdentityIntegrationHandler(proposalMessage, type as Event); - - logger.logInfo('Message handled', { + logger.logInfo('Message handled by OneIdentityIntegrationQueueConsumer', { type, message, }); } catch (error) { const response = extractAxiosErrorResponse(error); - logger.logException('Error while handling proposal', error, { - type, - message, - response, - }); + logger.logException( + 'Error while handling message in OneIdentityIntegrationQueueConsumer', + error, + { + type, + message, + response, + } + ); // Re-throw the error to make sure the message is not acknowledged throw error; diff --git a/src/queue/consumers/oneidentity/README.md b/src/queue/consumers/oneidentity/README.md new file mode 100644 index 00000000..ac591d19 --- /dev/null +++ b/src/queue/consumers/oneidentity/README.md @@ -0,0 +1,102 @@ +# One Identity Visit Access Management + +## Functional Specification + +### Purpose +The handler manages site and system access in One Identity based on visit creation and deletion events for science users. + +### Process Overview +- When a visit is created, both site access and system access are provisioned in One Identity +- When a visit is deleted, both site access and system access are cancelled in One Identity +- Only science users (users with `CCC_EmployeeSubType === ESSSCIENCEUSER`) are processed + +### Access Types +- **Site Access**: Physical access to facility for the exact visit duration +- **System Access**: Digital access to systems, extends beyond the visit end date by a configurable number of days (default: 30) + +### Key Relationships +- System access is linked to site access via `CustomProperty04` which stores the site access UID +- Both access types are identified by specific roles in `PersonWantsOrgRole` enum + +## Process Flow Chart + +``` +┌─────────────────────────┐ +│ Visit Event Received │ +└──────────┬──────────────┘ + ↓ +┌─────────────────────────┐ +│ Login to One Identity │ +└──────────┬──────────────┘ + ↓ +┌─────────────────────────┐ +│ Get Person from ID │ +└──────────┬──────────────┘ + ↓ +┌─────────────────────────┐ +< Is Science User? >──No──┐ +└──────────┬──────────────┘ │ + Yes │ + ↓ │ +┌─────────────────────────┐ │ +< Event Type? > │ +└──────────┬──────────────┘ │ + │ │ + ┌────────┴────────┐ │ + ↓ ↓ │ +┌─────────────┐ ┌───────────────┐│ +│VISIT_CREATED│ │VISIT_DELETED ││ +└──────┬──────┘ └───────┬───────┘│ + │ │ │ + ↓ ↓ │ +┌─────────────┐ ┌───────────────┐│ +│Create Site │ │Find Site ││ +│Access │ │Access ││ +└──────┬──────┘ └───────┬───────┘│ + │ │ │ + ↓ ↓ │ +┌─────────────┐ ┌───────────────┐│ +│Create System│ │Cancel Site ││ +│Access │ │Access ││ +└──────┬──────┘ └───────┬───────┘│ + │ │ │ + │ ↓ │ + │ ┌───────────────┐ │ + │ │Find System │ │ + │ │Access via │ │ + │ │CustomProperty4│ │ + │ └───────┬───────┘ │ + │ │ │ + │ ↓ │ + │ ┌───────────────┐ │ + │ │Cancel System │ │ + │ │Access │ │ + │ └───────┬───────┘ │ + │ │ │ + │ │ │ + └───────┐ │ │ + │ │ │ + │ │ │ + ↓ ↓ │ +┌─────────────────────────┐ │ +│ Logout from One Identity│◄─────┘ +└─────────────────────────┘ +``` + +## Key Implementation Details + +### System Access Duration +- Extends beyond visit by `ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS` (default: 30 days) + +### Access Creation +- Site access matches exact visit dates +- System access starts from the visit start date and extends beyond the visit end date by a configurable number of days (default: 30) +- System access links to site access via `CustomProperty04` + +### Access Cancellation +- System access cancellation depends on finding the parent site access first +- Both must be cancelled + +### Error Handling +- Proper error messages when person or access records are not found +- Always performs logout in finally block to ensure clean session management \ No newline at end of file diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts similarity index 82% rename from src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts rename to src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index 395b07a1..909f1edf 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -5,15 +5,12 @@ jest.mock('../utils/ESSOneIdentity', () => ({ import { logger } from '@user-office-software/duo-logger'; -import { oneIdentityIntegrationHandler } from './oneIdentityIntegrationHandler'; +import { syncProposalAndMembersToOneIdentityHandler } from './syncProposalAndMembersToOneIdentityHandler'; import { Event } from '../../../../models/Event'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; -import { - ESSOneIdentity, - PersonHasESETValues, - UID_ESet, - UserPersonConnection, -} from '../utils/ESSOneIdentity'; +import { ESSOneIdentity, UserPersonConnection } from '../utils/ESSOneIdentity'; +import { UID_ESet } from '../utils/interfaces/Eset'; +import { PersonHasESET } from '../utils/interfaces/PersonHasESET'; const mockOneIdentity: jest.Mocked> = { login: jest.fn(), @@ -25,11 +22,14 @@ const mockOneIdentity: jest.Mocked> = { connectPersonToProposal: jest.fn(), getProposalPersonConnections: jest.fn(), removeConnectionBetweenPersonAndProposal: jest.fn(), + getPersonWantsOrg: jest.fn(), + createPersonWantsOrg: jest.fn(), + cancelPersonWantsOrg: jest.fn(), }; const setupMocks = (data: { getProposal: UID_ESet | undefined; - getProposalPersonConnections?: PersonHasESETValues[]; + getProposalPersonConnections?: PersonHasESET[]; getPersons?: UserPersonConnection[]; }) => { mockOneIdentity.createProposal.mockResolvedValueOnce('proposal-UID_ESet'); @@ -65,7 +65,7 @@ describe('oneIdentityIntegrationHandler', () => { getProposalPersonConnections: [], }); - await oneIdentityIntegrationHandler( + await syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_ACCEPTED ); @@ -110,7 +110,7 @@ describe('oneIdentityIntegrationHandler', () => { ], }); - await oneIdentityIntegrationHandler( + await syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_ACCEPTED ); @@ -127,6 +127,25 @@ describe('oneIdentityIntegrationHandler', () => { ); }); + it('should throw error if proposal creation fails', async () => { + // Set up mocks with getProposal returning undefined (proposal doesn't exist) + mockOneIdentity.getProposal.mockResolvedValueOnce(undefined); + + // Mock createProposal to return undefined (creation failed) + mockOneIdentity.createProposal.mockResolvedValueOnce(undefined); + + // Expect the handler to throw an error + await expect( + syncProposalAndMembersToOneIdentityHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ) + ).rejects.toThrow('Proposal creation failed in ESS One Identity'); + + // Verify that logout is still called (in the finally block) + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + describe('when proposal already exists in One Identity (Retry logic)', () => { it('should not create proposal but handle connections if proposal exists', async () => { setupMocks({ @@ -139,7 +158,7 @@ describe('oneIdentityIntegrationHandler', () => { ], }); - await oneIdentityIntegrationHandler( + await syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_ACCEPTED ); @@ -180,7 +199,7 @@ describe('oneIdentityIntegrationHandler', () => { ], }); - await oneIdentityIntegrationHandler( + await syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_UPDATED ); @@ -212,7 +231,7 @@ describe('oneIdentityIntegrationHandler', () => { getProposal: undefined, }); - await oneIdentityIntegrationHandler( + await syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_UPDATED ); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts similarity index 91% rename from src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts rename to src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index d0008167..5a88daed 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/oneIdentityIntegrationHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -3,15 +3,12 @@ import { logger } from '@user-office-software/duo-logger'; import { Event } from '../../../../models/Event'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { collectUsersFromProposalMessage } from '../../utils/collectUsersFromProposalMessage'; -import { - ESSOneIdentity, - PersonHasESETValues, - UID_ESet, - UID_Person, - UserPersonConnection, -} from '../utils/ESSOneIdentity'; - -export async function oneIdentityIntegrationHandler( +import { ESSOneIdentity, UserPersonConnection } from '../utils/ESSOneIdentity'; +import { UID_ESet } from '../utils/interfaces/Eset'; +import { UID_Person } from '../utils/interfaces/Person'; +import { PersonHasESET } from '../utils/interfaces/PersonHasESET'; + +export async function syncProposalAndMembersToOneIdentityHandler( message: ProposalMessageData, type: Event ): Promise { @@ -115,7 +112,7 @@ function getUidPersons( async function addNewConnections( oneIdentity: ESSOneIdentity, uidESet: UID_ESet, - connections: PersonHasESETValues[], + connections: PersonHasESET[], uidPersons: UID_Person[] ): Promise { const connectionsToAdd = uidPersons.filter( @@ -132,7 +129,7 @@ async function addNewConnections( async function removeOldConnections( oneIdentity: ESSOneIdentity, - connections: PersonHasESETValues[], + connections: PersonHasESET[], uidPersons: UID_Person[] ): Promise { const connectionsToRemove = connections.filter( diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts new file mode 100644 index 00000000..b60035d2 --- /dev/null +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts @@ -0,0 +1,415 @@ +jest.mock('@user-office-software/duo-logger'); +jest.mock('../utils/ESSOneIdentity', () => ({ + ESSOneIdentity: jest.fn().mockImplementation(() => mockOneIdentity), +})); + +const ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS = '45'; + +jest.mock('process', () => ({ + env: { + ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS, + }, +})); + +import { logger } from '@user-office-software/duo-logger'; + +import { syncVisitToOneIdentityHandler } from './syncVisitToOneIdentityHandler'; +import { Event } from '../../../../models/Event'; +import { ESSOneIdentity } from '../utils/ESSOneIdentity'; +import { IdentityType, Person } from '../utils/interfaces/Person'; +import { + OrderState, + PersonWantsOrg, + PersonWantsOrgRole, +} from '../utils/interfaces/PersonWantsOrg'; +import { VisitMessage } from '../utils/interfaces/VisitMessage'; + +const mockOneIdentity: jest.Mocked> = { + login: jest.fn(), + logout: jest.fn(), + getPerson: jest.fn(), + getPersons: jest.fn(), + getPersonWantsOrg: jest.fn(), + getProposal: jest.fn(), + createProposal: jest.fn(), + connectPersonToProposal: jest.fn(), + getProposalPersonConnections: jest.fn(), + removeConnectionBetweenPersonAndProposal: jest.fn(), + createPersonWantsOrg: jest.fn(), + cancelPersonWantsOrg: jest.fn(), +}; + +const visitMessage: VisitMessage = { + visitorId: 'visitor-oidc-sub', + startAt: '2023-01-01T00:00:00.000Z', + endAt: '2023-01-10T00:00:00.000Z', +}; + +describe('syncVisitToOneIdentityHandler', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('Science user verification', () => { + it('should skip processing if visitor is not a science user', async () => { + // Mock person that is not a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: 'EMPLOYEEDK', + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Visitor is not a Science User, skipping', + {} + ); + expect(mockOneIdentity.createPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + }); + + describe('VISITOR_CREATED', () => { + it('should create site access and system access in One Identity for science users', async () => { + // Mock the current time to a fixed value for testing + const mockNowDate = new Date('2022-12-15T00:00:00.000Z'); + const originalDateNow = Date.now; + Date.now = jest.fn(() => mockNowDate.getTime()); + + // Mock person that is a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + // Mock site access and system access creation responses + const mockSiteAccess = { + UID_PersonWantsOrg: 'site-access-uid', + } as PersonWantsOrg; + const mockSystemAccess = { + UID_PersonWantsOrg: 'system-access-uid', + } as PersonWantsOrg; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + + // Mock sequential calls to createPersonWantsOrg with different responses + mockOneIdentity.createPersonWantsOrg + .mockResolvedValueOnce([mockSiteAccess]) + .mockResolvedValueOnce([mockSystemAccess]); + + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + + // Verify site access creation + expect(mockOneIdentity.createPersonWantsOrg).toHaveBeenCalledTimes(2); + expect(mockOneIdentity.createPersonWantsOrg).toHaveBeenNthCalledWith( + 1, + PersonWantsOrgRole.SITE_ACCESS, + visitMessage.visitorId, + visitMessage.startAt, + visitMessage.endAt + ); + + // Calculate expected system access dates + // validFrom should be the current mock date + const expectedValidFrom = mockNowDate.toISOString(); + const expectedEndDate = new Date(visitMessage.endAt); + expectedEndDate.setDate( + expectedEndDate.getDate() + + parseInt(ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS) + ); + + // Verify system access creation + expect(mockOneIdentity.createPersonWantsOrg).toHaveBeenNthCalledWith( + 2, + PersonWantsOrgRole.SYSTEM_ACCESS, + visitMessage.visitorId, + expectedValidFrom, + expectedEndDate.toISOString(), + 'site-access-uid' + ); + + expect(logger.logInfo).toHaveBeenCalledWith( + 'Site access created in One Identity', + { + UID_PersonWantsOrg: 'site-access-uid', + } + ); + expect(logger.logInfo).toHaveBeenCalledWith( + 'System access created in One Identity', + { + UID_PersonWantsOrg: 'system-access-uid', + } + ); + + expect(mockOneIdentity.logout).toHaveBeenCalled(); + + // Restore original Date.now + Date.now = originalDateNow; + }); + + it('should throw an error if site access creation fails', async () => { + // Mock person that is a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.createPersonWantsOrg.mockRejectedValueOnce( + new Error('Failed to create site access') + ); + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED) + ).rejects.toThrow('Failed to create site access'); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw an error when provided with an invalid date', async () => { + // Mock person that is a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + + // Create a message with an invalid date + const invalidVisitMessage: VisitMessage = { + visitorId: 'visitor-oidc-sub', + startAt: 'invalid-date', + endAt: '2023-01-10T00:00:00.000Z', + }; + + await expect( + syncVisitToOneIdentityHandler(invalidVisitMessage, Event.VISIT_CREATED) + ).rejects.toThrow('Invalid date provided to toIsoString: invalid-date'); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + expect(mockOneIdentity.createPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + }); + + describe('VISITOR_DELETED', () => { + it('should remove visitor access in One Identity for science users', async () => { + // Mock person that is a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + const mockPersonWantsOrgs = [ + { + UID_PersonWantsOrg: 'site-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + { + UID_PersonWantsOrg: 'system-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'site-access-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + ]; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( + mockPersonWantsOrgs + ); + + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + expect(mockOneIdentity.getPersonWantsOrg).toHaveBeenCalledWith( + 'visitor-uid' + ); + + expect(logger.logInfo).toHaveBeenCalledWith( + 'One Identity successfully logged in', + {} + ); + + expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenNthCalledWith( + 1, + 'site-access-uid' + ); + + expect(logger.logInfo).toHaveBeenCalledWith( + 'Site access cancelled in One Identity', + { + UID_PersonWantsOrg: 'site-access-uid', + } + ); + + expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenNthCalledWith( + 2, + 'system-access-uid' + ); + + expect(logger.logInfo).toHaveBeenCalledWith( + 'System access cancelled in One Identity', + { + UID_PersonWantsOrg: 'system-access-uid', + } + ); + + expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenCalledTimes(2); + + expect(mockOneIdentity.logout).toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith( + 'One Identity successfully logged out', + {} + ); + }); + + it('should skip processing if visitor is not a science user', async () => { + // Mock person that is not a science user + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: 'EMPLOYEEDK', + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Visitor is not a Science User, skipping', + {} + ); + expect(mockOneIdentity.getPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.cancelPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw error if person not found', async () => { + mockOneIdentity.getPerson.mockResolvedValueOnce(undefined); + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED) + ).rejects.toThrow('Person not found in One Identity'); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ + oidcSub: 'visitor-oidc-sub', + }); + expect(mockOneIdentity.getPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.cancelPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw error if site access not found', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + const mockPersonWantsOrgs = [ + // No site access matching the dates + { + UID_PersonWantsOrg: 'site-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: '2023-01-02T00:00:00.000Z', // Different from message.startAt + ValidUntil: '2023-01-10T00:00:00.000Z', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + ]; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( + mockPersonWantsOrgs + ); + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED) + ).rejects.toThrow( + 'Site access not found in One Identity, cannot remove access' + ); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw error if system access not found', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + const mockPersonWantsOrgs = [ + { + UID_PersonWantsOrg: 'site-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: visitMessage.startAt, + ValidUntil: visitMessage.endAt, + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + // No system access with CustomProperty04 matching site-access-uid + { + UID_PersonWantsOrg: 'system-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'different-site-access-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + ]; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( + mockPersonWantsOrgs + ); + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED) + ).rejects.toThrow( + 'System access not found in One Identity, cannot remove access' + ); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenCalledWith( + 'site-access-uid' + ); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Site access cancelled in One Identity', + { + UID_PersonWantsOrg: 'site-access-uid', + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + }); +}); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts new file mode 100644 index 00000000..84427150 --- /dev/null +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts @@ -0,0 +1,164 @@ +import process from 'process'; + +import { logger } from '@user-office-software/duo-logger'; + +import { Event } from '../../../../models/Event'; +import { ESSOneIdentity } from '../utils/ESSOneIdentity'; +import { IdentityType, UID_Person } from '../utils/interfaces/Person'; +import { + OrderState, + PersonWantsOrgRole, +} from '../utils/interfaces/PersonWantsOrg'; +import { VisitMessage } from '../utils/interfaces/VisitMessage'; + +const ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS = parseInt( + process.env.ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS || '30' +); + +export async function syncVisitToOneIdentityHandler( + { startAt, endAt, visitorId }: VisitMessage, + type: Event +): Promise { + const oneIdentity = new ESSOneIdentity(); + await oneIdentity.login(); + + logger.logInfo('One Identity successfully logged in', {}); + + try { + // Only Science Users' access should be managed! + const uidPerson = await getScienceUser(oneIdentity, visitorId); + if (!uidPerson) { + logger.logInfo('Visitor is not a Science User, skipping', {}); + + return; + } + + if (type === Event.VISIT_CREATED) { + await createAccessInOneIdentity(oneIdentity, startAt, endAt, visitorId); + } else if (type === Event.VISIT_DELETED) { + await removeAccessFromOneIdentity(oneIdentity, startAt, endAt, uidPerson); + } + } finally { + await oneIdentity.logout(); + logger.logInfo('One Identity successfully logged out', {}); + } +} + +// Find person UID from oidcSub +// If the person is not a science user, return undefined +async function getScienceUser( + oneIdentity: ESSOneIdentity, + centralAccount: string +): Promise { + // Find person UID from oidcSub + const person = await oneIdentity.getPerson({ + oidcSub: centralAccount, + }); + + if (!person) { + throw new Error('Person not found in One Identity'); + } + + if (person.CCC_EmployeeSubType === IdentityType.ESSSCIENCEUSER) + return person.UID_Person; + else return undefined; +} + +async function createAccessInOneIdentity( + oneIdentity: ESSOneIdentity, + startAt: string, + endAt: string, + centralAccount: string +) { + // Create site access + const [pwoSite] = await oneIdentity.createPersonWantsOrg( + PersonWantsOrgRole.SITE_ACCESS, + centralAccount, + toIsoString(startAt), + toIsoString(endAt) + ); + + logger.logInfo('Site access created in One Identity', { + UID_PersonWantsOrg: pwoSite.UID_PersonWantsOrg, + }); + + // validFrom in One Identity should be in the future so that the access is not immediately available + const validFrom = Date.now(); + const validUntil = new Date(endAt).setDate( + new Date(endAt).getDate() + ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS + ); + + // Create system access + const [pwoSystem] = await oneIdentity.createPersonWantsOrg( + PersonWantsOrgRole.SYSTEM_ACCESS, + centralAccount, + toIsoString(validFrom), + toIsoString(validUntil), + pwoSite.UID_PersonWantsOrg // CustomProperty04 + ); + + logger.logInfo('System access created in One Identity', { + UID_PersonWantsOrg: pwoSystem.UID_PersonWantsOrg, + }); +} + +async function removeAccessFromOneIdentity( + oneIdentity: ESSOneIdentity, + startAt: string, + endAt: string, + uidPerson: UID_Person +) { + // Find person wants orgs for the visitor + const personWantsOrgs = await oneIdentity.getPersonWantsOrg(uidPerson); + + // Find site access for the visitor + const siteAccess = personWantsOrgs.find( + (pwo) => + pwo.DisplayOrg === PersonWantsOrgRole.SITE_ACCESS && + toIsoString(pwo.ValidFrom) === toIsoString(startAt) && + toIsoString(pwo.ValidUntil) === toIsoString(endAt) && + pwo.OrderState !== OrderState.ABORTED + ); + + if (!siteAccess) { + throw new Error( + 'Site access not found in One Identity, cannot remove access' + ); + } + + await oneIdentity.cancelPersonWantsOrg(siteAccess.UID_PersonWantsOrg); + + logger.logInfo('Site access cancelled in One Identity', { + UID_PersonWantsOrg: siteAccess.UID_PersonWantsOrg, + }); + + // Find system access for the site access (CustomProperty04 is the site access UID) + const systemAccess = personWantsOrgs.find( + (pwo) => + pwo.CustomProperty04 === siteAccess.UID_PersonWantsOrg && + pwo.DisplayOrg === PersonWantsOrgRole.SYSTEM_ACCESS && + pwo.OrderState !== OrderState.UNSUBSCRIBED + ); + + if (!systemAccess) { + throw new Error( + 'System access not found in One Identity, cannot remove access' + ); + } + + await oneIdentity.cancelPersonWantsOrg(systemAccess.UID_PersonWantsOrg); + + logger.logInfo('System access cancelled in One Identity', { + UID_PersonWantsOrg: systemAccess.UID_PersonWantsOrg, + }); +} + +function toIsoString(date: string | number) { + const parsedDate = new Date(date); + + if (isNaN(parsedDate.getTime())) { + throw new Error(`Invalid date provided to toIsoString: ${date}`); + } + + return parsedDate.toISOString(); +} diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts index c699bbf6..edb0e506 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts @@ -10,6 +10,10 @@ jest.mock('process', () => ({ })); import { ESSOneIdentity } from './ESSOneIdentity'; +import { + PersonWantsOrg, + PersonWantsOrgRole, +} from './interfaces/PersonWantsOrg'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { ProposalUser } from '../../scicat/scicatProposal/dto'; @@ -19,6 +23,7 @@ const mockOneIdentityApi = { createEntity: jest.fn(), getEntities: jest.fn(), deleteEntity: jest.fn(), + callScript: jest.fn(), }; describe('ESSOneIdentity', () => { @@ -76,6 +81,18 @@ describe('ESSOneIdentity', () => { }); expect(result).toBe('created-uid'); }); + + it('should throw an error when UID_ESetType is not found', async () => { + const proposalMessage = { + shortCode: 'some-short-code', + } as ProposalMessageData; + + mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); + + await expect( + essOneIdentity.createProposal(proposalMessage) + ).rejects.toThrow('UID_ESetType not found: PROPOSAL_IDENT_ESET_TYPE'); + }); }); describe('getProposal', () => { @@ -100,6 +117,18 @@ describe('ESSOneIdentity', () => { ); expect(result).toBe('proposal-uid'); }); + + it('should return undefined if proposal is not found', async () => { + const proposalMessage = { + shortCode: 'some-short-code', + } as ProposalMessageData; + + mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); + + const result = await essOneIdentity.getProposal(proposalMessage); + + expect(result).toBeUndefined(); + }); }); describe('getPerson', () => { @@ -118,7 +147,8 @@ describe('ESSOneIdentity', () => { expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( 'Person', - "CentralAccount='0000-0000-0000-0000'" + "CentralAccount='0000-0000-0000-0000'", + ['CCC_EmployeeSubType'] ); expect(result).toEqual({ UID_Person: 'person-uid' }); }); @@ -258,4 +288,218 @@ describe('ESSOneIdentity', () => { ]); }); }); + + describe('createPersonWantsOrg', () => { + const role = PersonWantsOrgRole.SITE_ACCESS; + const centralAccount = 'user123'; + const startDate = '2023-01-01'; + const endDate = '2023-12-31'; + const mockPersonWantsOrgData: PersonWantsOrg[] = [ + { + UID_PersonWantsOrg: 'pwo-123', + ValidFrom: startDate, + ValidUntil: endDate, + } as PersonWantsOrg, + ]; + + it('should successfully create site access', async () => { + mockOneIdentityApi.callScript.mockResolvedValueOnce({ + IsSuccess: true, + Data: mockPersonWantsOrgData, + Message: 'Success', + }); + + const result = await essOneIdentity.createPersonWantsOrg( + role, + centralAccount, + startDate, + endDate + ); + + expect(mockOneIdentityApi.callScript).toHaveBeenCalledWith( + 'SCProposalSiteAccess', + [role, centralAccount, centralAccount, startDate, endDate, '', ''] + ); + expect(result).toEqual(mockPersonWantsOrgData); + }); + + it('should successfully create site access with custom data', async () => { + const customData = 'custom-data-123'; + mockOneIdentityApi.callScript.mockResolvedValueOnce({ + IsSuccess: true, + Data: mockPersonWantsOrgData, + Message: 'Success', + }); + + const result = await essOneIdentity.createPersonWantsOrg( + role, + centralAccount, + startDate, + endDate, + customData + ); + + expect(mockOneIdentityApi.callScript).toHaveBeenCalledWith( + 'SCProposalSiteAccess', + [ + role, + centralAccount, + centralAccount, + startDate, + endDate, + customData, + '', + ] + ); + expect(result).toEqual(mockPersonWantsOrgData); + }); + + it('should throw an error when site access creation fails', async () => { + const errorMessage = 'Access denied'; + mockOneIdentityApi.callScript.mockResolvedValueOnce({ + IsSuccess: false, + Data: null, + Message: errorMessage, + }); + + await expect( + essOneIdentity.createPersonWantsOrg( + role, + centralAccount, + startDate, + endDate + ) + ).rejects.toThrow(`Failed to create site access: ${errorMessage}`); + expect(mockOneIdentityApi.callScript).toHaveBeenCalledWith( + 'SCProposalSiteAccess', + [role, centralAccount, centralAccount, startDate, endDate, '', ''] + ); + }); + }); + + describe('cancelPersonWantsOrg', () => { + const uidPersonWantsOrg = 'pwo-123'; + + it('should successfully cancel site access', async () => { + mockOneIdentityApi.callScript.mockResolvedValueOnce({ + IsSuccess: true, + Message: 'Success', + }); + + await essOneIdentity.cancelPersonWantsOrg(uidPersonWantsOrg); + + expect(mockOneIdentityApi.callScript).toHaveBeenCalledWith( + 'SCProposalSiteAccessCancel', + [uidPersonWantsOrg] + ); + }); + + it('should throw an error when site access cancellation fails', async () => { + const errorMessage = 'Access not found'; + mockOneIdentityApi.callScript.mockResolvedValueOnce({ + IsSuccess: false, + Message: errorMessage, + }); + + await expect( + essOneIdentity.cancelPersonWantsOrg(uidPersonWantsOrg) + ).rejects.toThrow(`Failed to cancel site access:${errorMessage}`); + expect(mockOneIdentityApi.callScript).toHaveBeenCalledWith( + 'SCProposalSiteAccessCancel', + [uidPersonWantsOrg] + ); + }); + }); + + describe('getPersonWantsOrg', () => { + const mockPersonWantsOrgData = [ + { + values: { + UID_PersonWantsOrg: 'pwo-123', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: '2023-01-01', + ValidUntil: '2023-12-31', + OrderState: 'Granted', + }, + }, + { + values: { + UID_PersonWantsOrg: 'pwo-456', + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, + ValidFrom: '2023-01-01', + ValidUntil: '2023-12-31', + OrderState: 'Granted', + }, + }, + ]; + + it('should get person wants org records with default parameters', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce( + mockPersonWantsOrgData + ); + + const result = await essOneIdentity.getPersonWantsOrg('person-uid'); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'PersonWantsOrg', + "UID_PersonOrdered='person-uid' AND (DisplayOrg='Experiment visit - site access' OR DisplayOrg='Experiment visit - system access')", + [ + 'ValidFrom', + 'ValidUntil', + 'OrderState', + 'DisplayOrg', + 'CustomProperty04', + ] + ); + expect(result).toEqual([ + mockPersonWantsOrgData[0].values, + mockPersonWantsOrgData[1].values, + ]); + }); + + it('should get person wants org records with custom parameters', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce( + mockPersonWantsOrgData + ); + + const result = await essOneIdentity.getPersonWantsOrg('person-uid', [ + PersonWantsOrgRole.SITE_ACCESS, + ]); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'PersonWantsOrg', + "UID_PersonOrdered='person-uid' AND (DisplayOrg='Experiment visit - site access')", + [ + 'ValidFrom', + 'ValidUntil', + 'OrderState', + 'DisplayOrg', + 'CustomProperty04', + ] + ); + expect(result).toEqual([ + mockPersonWantsOrgData[0].values, + mockPersonWantsOrgData[1].values, + ]); + }); + + it('should return empty array when no records found', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); + + const result = await essOneIdentity.getPersonWantsOrg('person-uid'); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'PersonWantsOrg', + "UID_PersonOrdered='person-uid' AND (DisplayOrg='Experiment visit - site access' OR DisplayOrg='Experiment visit - system access')", + [ + 'ValidFrom', + 'ValidUntil', + 'OrderState', + 'DisplayOrg', + 'CustomProperty04', + ] + ); + expect(result).toEqual([]); + }); + }); }); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts index c5952b39..8630de73 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts @@ -1,33 +1,21 @@ import { env } from 'process'; +import { Eset, UID_ESet } from './interfaces/Eset'; +import { EsetType } from './interfaces/EsetType'; +import { Person, UID_Person } from './interfaces/Person'; +import { PersonHasESET } from './interfaces/PersonHasESET'; +import { + PersonWantsOrg, + PersonWantsOrgRole, +} from './interfaces/PersonWantsOrg'; +import { + SCProposalSiteAccessCancelResponse, + SCProposalSiteAccessResponse, +} from './interfaces/SCProposalSiteAccessResponse'; import { OneIdentityApi } from './OneIdentityApi'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { ProposalUser } from '../../scicat/scicatProposal/dto'; -type UID_ESetType = string; -export type UID_Person = string; -export type UID_ESet = string; - -interface EsetValues { - UID_ESet: UID_ESet; - UID_ESetType: UID_ESetType; - Ident_ESet: string; - DisplayName: string; -} - -interface EsetTypeValues { - UID_ESetType: UID_ESetType; -} - -interface PersonValues { - UID_Person: UID_Person; -} - -export interface PersonHasESETValues { - UID_Person: UID_Person; - UID_ESet: UID_ESet; -} - export interface UserPersonConnection { oidcSub: string; uidPerson: UID_Person | undefined; @@ -60,7 +48,7 @@ export class ESSOneIdentity { proposalMessage: ProposalMessageData ): Promise { // get "Science Proposal" UID_ESetType from ESS One Identity - const entities = await this.oneIdentityApi.getEntities( + const entities = await this.oneIdentityApi.getEntities( 'EsetType', `Ident_ESetType='${PROPOSAL_IDENT_ESET_TYPE}'` ); @@ -73,7 +61,7 @@ export class ESSOneIdentity { // create proposal in ESS One Identity const esetResponse = await this.oneIdentityApi.createEntity< - Omit + Omit >('ESET', { UID_ESetType: uidESetType, Ident_ESet: proposalMessage.shortCode, @@ -86,7 +74,7 @@ export class ESSOneIdentity { public async getProposal( proposalMessage: ProposalMessageData ): Promise { - const entities = await this.oneIdentityApi.getEntities( + const entities = await this.oneIdentityApi.getEntities( 'ESET', `Ident_ESet='${proposalMessage.shortCode}'` ); @@ -96,10 +84,11 @@ export class ESSOneIdentity { public async getPerson( user: Pick - ): Promise { - const entities = await this.oneIdentityApi.getEntities( + ): Promise { + const entities = await this.oneIdentityApi.getEntities( 'Person', - `CentralAccount='${user.oidcSub}'` + `CentralAccount='${user.oidcSub}'`, + ['CCC_EmployeeSubType'] ); return entities[0]?.values; @@ -123,7 +112,7 @@ export class ESSOneIdentity { uidEset: UID_ESet, uidPerson: UID_Person ): Promise { - const { uid } = await this.oneIdentityApi.createEntity( + const { uid } = await this.oneIdentityApi.createEntity( 'PersonHasESET', { UID_ESet: uidEset, @@ -146,12 +135,74 @@ export class ESSOneIdentity { public async getProposalPersonConnections( uidEset: UID_ESet - ): Promise { - const entities = await this.oneIdentityApi.getEntities( + ): Promise { + const entities = await this.oneIdentityApi.getEntities( 'PersonHasESET', `UID_ESet='${uidEset}'` ); return entities.map(({ values }) => values); } + + public async createPersonWantsOrg( + role: PersonWantsOrgRole, + centralAccount: string, + startDate: string, + endDate: string, + customData: string = '' + ): Promise { + const res = + await this.oneIdentityApi.callScript( + 'SCProposalSiteAccess', + [ + role, // access type + centralAccount, // requester + centralAccount, // recipient + startDate, + endDate, + customData, // PersonWantsOrg.CustomProperty04 + '', // UID_PersonWantsOrg (empty for new) + ] + ); + + if (!res.IsSuccess) + throw new Error('Failed to create site access: ' + res.Message); + + return res.Data; + } + + public async cancelPersonWantsOrg(uidPersonWantsOrg: string): Promise { + const res = + await this.oneIdentityApi.callScript( + 'SCProposalSiteAccessCancel', + [uidPersonWantsOrg] + ); + + if (!res.IsSuccess) + throw new Error('Failed to cancel site access:' + res.Message); + } + + public async getPersonWantsOrg( + uidPerson: UID_Person, + displayOrgs: PersonWantsOrgRole[] = [ + PersonWantsOrgRole.SITE_ACCESS, + PersonWantsOrgRole.SYSTEM_ACCESS, + ] + ): Promise { + const entities = await this.oneIdentityApi.getEntities( + 'PersonWantsOrg', + `UID_PersonOrdered='${uidPerson}' AND (${displayOrgs + .map((org) => `DisplayOrg='${org}'`) + .join(' OR ')})`, + [ + 'ValidFrom', + 'ValidUntil', + 'OrderState', + 'DisplayOrg', + 'CustomProperty04', + ] + ); + + return entities.map(({ values }) => values); + } } diff --git a/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts b/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts index 6ede6de9..ac6e232a 100644 --- a/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts +++ b/src/queue/consumers/oneidentity/utils/OneIdentityApi.spec.ts @@ -47,6 +47,23 @@ describe('OneIdentityApi', () => { } ); }); + + it('should throw error when no cookie is set', async () => { + (axios.post as jest.Mock).mockResolvedValueOnce({ + headers: {}, + }); + + await expect(api.login('user', 'password')).rejects.toThrow( + 'No cookie set' + ); + }); + + it('should handle API errors during login', async () => { + const errorMessage = 'Authentication failed'; + (axios.post as jest.Mock).mockRejectedValueOnce(new Error(errorMessage)); + + await expect(api.login('user', 'password')).rejects.toThrow(errorMessage); + }); }); describe('logout', () => { @@ -87,6 +104,18 @@ describe('OneIdentityApi', () => { }); expect(result).toEqual(mockEntities); }); + + it('should get entities with display columns successfully', async () => { + const mockEntities = [{ id: 1, name: 'test' }]; + (axios.get as jest.Mock).mockResolvedValueOnce({ data: mockEntities }); + + const result = await api.getEntities('testTable', 'id=1', ['name']); + + expect(axios.get).toHaveBeenCalledWith('/entities/testTable', { + params: { where: 'id=1', displayColumns: 'name' }, + }); + expect(result).toEqual(mockEntities); + }); }); describe('deleteEntity', () => { @@ -98,4 +127,29 @@ describe('OneIdentityApi', () => { expect(axios.delete).toHaveBeenCalledWith('/entity/testTable/1'); }); }); + + describe('callScript', () => { + it('should call script successfully', async () => { + const mockResult = { success: true, data: 'script result' }; + (axios.put as jest.Mock).mockResolvedValueOnce({ data: mockResult }); + + const scriptParams = ['param1', 'param2']; + const result = await api.callScript('TestScript', scriptParams); + + expect(axios.put).toHaveBeenCalledWith('/script/TestScript', { + parameters: scriptParams, + returnRawResult: true, + }); + expect(result).toEqual(mockResult); + }); + + it('should handle errors during script calls', async () => { + const errorMessage = 'Script execution failed'; + (axios.put as jest.Mock).mockRejectedValueOnce(new Error(errorMessage)); + + await expect(api.callScript('TestScript', [])).rejects.toThrow( + errorMessage + ); + }); + }); }); diff --git a/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts b/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts index 99e9e015..20c2045b 100644 --- a/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts +++ b/src/queue/consumers/oneidentity/utils/OneIdentityApi.ts @@ -89,13 +89,19 @@ export class OneIdentityApi { public async getEntities( table: string, - where: string + where: string, + displayColumns?: (keyof T)[] ): Promise[]> { const { data } = await this.axiosInstance.get< T, AxiosResponse[]> >(`/entities/${table}`, { - params: { where }, + params: { + where, + ...(displayColumns && displayColumns.length > 0 + ? { displayColumns: displayColumns.join(',') } + : {}), + }, }); return data; @@ -104,4 +110,16 @@ export class OneIdentityApi { public deleteEntity(table: string, uid: string): Promise { return this.axiosInstance.delete(`/entity/${table}/${uid}`); } + + public async callScript(name: string, parameters: string[]): Promise { + const { data } = await this.axiosInstance.put>( + `/script/${name}`, + { + parameters, + returnRawResult: true, // One Identity API returns the result as a string from the script. Axios will be able to JSON parse it. + } + ); + + return data; + } } diff --git a/src/queue/consumers/oneidentity/utils/interfaces/Eset.ts b/src/queue/consumers/oneidentity/utils/interfaces/Eset.ts new file mode 100644 index 00000000..81e2b3a6 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/Eset.ts @@ -0,0 +1,10 @@ +import { UID_ESetType } from './EsetType'; + +export type UID_ESet = string; + +export interface Eset { + UID_ESet: UID_ESet; + UID_ESetType: UID_ESetType; + Ident_ESet: string; + DisplayName: string; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/EsetType.ts b/src/queue/consumers/oneidentity/utils/interfaces/EsetType.ts new file mode 100644 index 00000000..83113e56 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/EsetType.ts @@ -0,0 +1,6 @@ +export type UID_ESetType = string; + +export interface EsetType { + Ident_ESetType: string; + UID_ESetType: UID_ESetType; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/Person.ts b/src/queue/consumers/oneidentity/utils/interfaces/Person.ts new file mode 100644 index 00000000..a5dfc121 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/Person.ts @@ -0,0 +1,13 @@ +export enum IdentityType { + ESSSCIENCEUSER = 'ESSSCIENCEUSER', + EMPLOYEEDK = 'EMPLOYEEDK', +} + +export type UID_Person = string; + +export interface Person { + CCC_EmployeeSubType: IdentityType; + CentralAccount: string; + InternalName: string; + UID_Person: UID_Person; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/PersonHasESET.ts b/src/queue/consumers/oneidentity/utils/interfaces/PersonHasESET.ts new file mode 100644 index 00000000..a307c90a --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/PersonHasESET.ts @@ -0,0 +1,7 @@ +import { UID_ESet } from './Eset'; +import { UID_Person } from './Person'; + +export interface PersonHasESET { + UID_Person: UID_Person; + UID_ESet: UID_ESet; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/PersonWantsOrg.ts b/src/queue/consumers/oneidentity/utils/interfaces/PersonWantsOrg.ts new file mode 100644 index 00000000..47cd44df --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/PersonWantsOrg.ts @@ -0,0 +1,93 @@ +export enum OrderState { + GRANTED = 'Granted', + ABORTED = 'Aborted', + WAITING = 'Waiting', + ASSIGNED = 'Assigned', + UNSUBSCRIBED = 'Unsubscribed', + ORDERPRODUCT = 'OrderProduct', +} + +export enum PersonWantsOrgRole { + SYSTEM_ACCESS = 'Experiment visit - system access', + SITE_ACCESS = 'Experiment visit - site access', +} + +export interface PersonWantsOrg { + AdditionalData: string; + CCC_CustomDate01: string; + CCC_CustomPerson01: string; + CheckResult: number; + CheckResultDetail: string; + CustomProperty01: string; + CustomProperty02: string; + CustomProperty03: string; + CustomProperty04: string; + CustomProperty05: string; + CustomProperty06: string; + CustomProperty07: string; + CustomProperty08: string; + CustomProperty09: string; + CustomProperty10: string; + DateActivated: string; + DateDeactivated: string; + DateHead: string; + DecisionLevel: number; + DisplayObjectKeyAssignment: string; + DisplayOrg: PersonWantsOrgRole; + DisplayOrgParent: string; + DisplayOrgParentOfParent: string; + DisplayPersonHead: string; + DisplayPersonInserted: string; + DisplayPersonOrdered: string; + GenProcID: string; + IsCrossFunctional: boolean; + IsOptionalChild: boolean; + IsOrderForWorkDesk: boolean; + IsReserved: boolean; + ObjectKeyAssignment: string; + ObjectKeyElementUsedInAssign: string; + ObjectKeyFinal: string; + ObjectKeyOrdered: string; + ObjectKeyOrgUsedInAssign: string; + OrderDate: string; + OrderDetail1: string; + OrderDetail2: string; + OrderReason: string; + OrderState: OrderState; + PeerGroupFactor: number; + PWOPriority: number; + Quantity: number; + ReasonHead: string; + Recommendation: number; + RecommendationDetail: string; + UID_Department: string; + UID_ITShopOrgFinal: string; + UID_Org: string; + UID_OrgParent: string; + UID_OrgParentOfParent: string; + UID_PersonHead: string; + UID_PersonInserted: string; + UID_PersonOrdered: string; + UID_PersonWantsOrg: string; + UID_PersonWantsOrgParent: string; + UID_ProfitCenter: string; + UID_PWOState: string; + UID_QERJustification: string; + UID_QERJustificationOrder: string; + UID_QERResourceType: string; + UID_QERWorkingMethod: string; + UID_ShoppingCartOrder: string; + UID_WorkDeskOrdered: string; + UiOrderState: string; + ValidFrom: string; + ValidUntil: string; + ValidUntilProlongation: string; + ValidUntilUnsubscribe: string; + XDateInserted: string; + XDateUpdated: string; + XMarkedForDeletion: number; + XObjectKey: string; + XTouched: string; + XUserInserted: string; + XUserUpdated: string; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/SCProposalSiteAccessResponse.ts b/src/queue/consumers/oneidentity/utils/interfaces/SCProposalSiteAccessResponse.ts new file mode 100644 index 00000000..1ae848f2 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/SCProposalSiteAccessResponse.ts @@ -0,0 +1,14 @@ +import { PersonWantsOrg } from './PersonWantsOrg'; + +export interface SiteAccessResponse { + IsSuccess: boolean; + Message: string | null; +} + +export interface SCProposalSiteAccessResponse extends SiteAccessResponse { + Data: PersonWantsOrg[]; +} + +export interface SCProposalSiteAccessCancelResponse extends SiteAccessResponse { + Data: []; +} diff --git a/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts b/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts new file mode 100644 index 00000000..7b60bd35 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts @@ -0,0 +1,5 @@ +export interface VisitMessage { + startAt: string; + endAt: string; + visitorId: string; +} diff --git a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts b/src/queue/consumers/oneidentity/utils/validateProposalMessage.spec.ts similarity index 63% rename from src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts rename to src/queue/consumers/oneidentity/utils/validateProposalMessage.spec.ts index f16bd774..eb26d670 100644 --- a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.spec.ts +++ b/src/queue/consumers/oneidentity/utils/validateProposalMessage.spec.ts @@ -1,10 +1,10 @@ -import { validateRequiredProposalMessageFields } from './validateRequiredProposalMessageFields'; +import { validateProposalMessage } from './validateProposalMessage'; -describe('validateRequiredProposalMessageFields', () => { +describe('validateProposalMessage', () => { it('should throw an error if message is not an object', () => { const message = 'not an object'; - expect(() => validateRequiredProposalMessageFields(message)).toThrow( + expect(() => validateProposalMessage(message)).toThrow( 'Invalid proposal message' ); }); @@ -12,7 +12,7 @@ describe('validateRequiredProposalMessageFields', () => { it('should throw an error if message is null', () => { const message = null; - expect(() => validateRequiredProposalMessageFields(message)).toThrow( + expect(() => validateProposalMessage(message)).toThrow( 'Invalid proposal message' ); }); @@ -23,7 +23,7 @@ describe('validateRequiredProposalMessageFields', () => { members: [], }; - expect(() => validateRequiredProposalMessageFields(message)).toThrow( + expect(() => validateProposalMessage(message)).toThrow( 'Invalid proposal message' ); }); @@ -34,7 +34,7 @@ describe('validateRequiredProposalMessageFields', () => { members: [], }; - expect(() => validateRequiredProposalMessageFields(message)).toThrow( + expect(() => validateProposalMessage(message)).toThrow( 'Invalid proposal message' ); }); @@ -45,7 +45,7 @@ describe('validateRequiredProposalMessageFields', () => { proposer: {}, }; - expect(() => validateRequiredProposalMessageFields(message)).toThrow( + expect(() => validateProposalMessage(message)).toThrow( 'Invalid proposal message' ); }); @@ -57,6 +57,6 @@ describe('validateRequiredProposalMessageFields', () => { members: [], }; - expect(validateRequiredProposalMessageFields(message)).toEqual(message); + expect(validateProposalMessage(message)).toEqual(message); }); }); diff --git a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts b/src/queue/consumers/oneidentity/utils/validateProposalMessage.ts similarity index 69% rename from src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts rename to src/queue/consumers/oneidentity/utils/validateProposalMessage.ts index 072590e6..67227867 100644 --- a/src/queue/consumers/oneidentity/utils/validateRequiredProposalMessageFields.ts +++ b/src/queue/consumers/oneidentity/utils/validateProposalMessage.ts @@ -1,12 +1,10 @@ import { ProposalMessageData } from '../../../../models/ProposalMessage'; // For OneIdentity, only these fields are required -export function validateRequiredProposalMessageFields( +export function validateProposalMessage( message: any ): ProposalMessageData | never { if ( - typeof message !== 'object' || - message === null || message?.shortCode === undefined || message?.proposer === undefined || message?.members === undefined @@ -14,5 +12,5 @@ export function validateRequiredProposalMessageFields( throw new Error('Invalid proposal message'); } - return message as ProposalMessageData; + return message; } diff --git a/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts b/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts new file mode 100644 index 00000000..7250b75d --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts @@ -0,0 +1,62 @@ +import { validateVisitMessage } from './validateVisitMessage'; + +describe('validateVisitMessage', () => { + it('should throw an error if message is not an object', () => { + const message = 'not an object'; + + expect(() => validateVisitMessage(message)).toThrow( + 'Invalid Visit message' + ); + }); + + it('should throw an error if message is null', () => { + const message = null; + + expect(() => validateVisitMessage(message)).toThrow( + 'Invalid Visit message' + ); + }); + + it('should throw an error if visitorId is undefined', () => { + const message = { + startAt: '2023-01-01T00:00:00Z', + endAt: '2023-01-02T00:00:00Z', + }; + + expect(() => validateVisitMessage(message)).toThrow( + 'Invalid Visit message' + ); + }); + + it('should throw an error if startAt is undefined', () => { + const message = { + visitorId: 'visitor123', + endAt: '2023-01-02T00:00:00Z', + }; + + expect(() => validateVisitMessage(message)).toThrow( + 'Invalid Visit message' + ); + }); + + it('should throw an error if endAt is undefined', () => { + const message = { + visitorId: 'visitor123', + startAt: '2023-01-01T00:00:00Z', + }; + + expect(() => validateVisitMessage(message)).toThrow( + 'Invalid Visit message' + ); + }); + + it('should return the message if visitorId, startAt, and endAt are defined', () => { + const message = { + visitorId: 'visitor123', + startAt: '2023-01-01T00:00:00Z', + endAt: '2023-01-02T00:00:00Z', + }; + + expect(validateVisitMessage(message)).toEqual(message); + }); +}); diff --git a/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts b/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts new file mode 100644 index 00000000..f532889a --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts @@ -0,0 +1,13 @@ +import { VisitMessage } from './interfaces/VisitMessage'; + +export function validateVisitMessage(message: any): VisitMessage | never { + if ( + message?.visitorId === undefined || + message?.startAt === undefined || + message?.endAt === undefined + ) { + throw new Error('Invalid Visit message'); + } + + return message; +} From a4b1faf41605f408463676d1ed177584016e9976 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 01:10:36 +0000 Subject: [PATCH 154/176] build(deps-dev): bump ts-jest from 29.2.6 to 29.3.0 Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.2.6 to 29.3.0. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.6...v29.3.0) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 37 ++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d00eeffe..f23fbee9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "jest": "^29.7.0", "lint-staged": "^15.4.3", "prettier": "3.3.3", - "ts-jest": "^29.2.6", + "ts-jest": "^29.3.0", "typescript": "^5.7.2" }, "engines": { @@ -8226,9 +8226,9 @@ } }, "node_modules/ts-jest": { - "version": "29.2.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", - "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", "dev": true, "license": "MIT", "dependencies": { @@ -8240,6 +8240,7 @@ "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.1", + "type-fest": "^4.37.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -8274,6 +8275,19 @@ } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -14753,9 +14767,9 @@ "requires": {} }, "ts-jest": { - "version": "29.2.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", - "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", "dev": true, "requires": { "bs-logger": "^0.2.6", @@ -14766,7 +14780,16 @@ "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.1", + "type-fest": "^4.37.0", "yargs-parser": "^21.1.1" + }, + "dependencies": { + "type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true + } } }, "ts-node": { diff --git a/package.json b/package.json index da28f0e8..0e0b8c54 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "jest": "^29.7.0", "lint-staged": "^15.4.3", "prettier": "3.3.3", - "ts-jest": "^29.2.6", + "ts-jest": "^29.3.0", "typescript": "^5.7.2" }, "dependencies": { From 9e844afefe4bd9fec05378876592d4b478522de1 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:38:44 +0200 Subject: [PATCH 155/176] refactor: remove event types and simplify event handling (#529) --- src/models/Event.ts | 2 -- .../consumers/ChatroomCreationQueueConsumer.ts | 2 -- .../scicatProposal/consumers/FolderCreationQueueConsumer.ts | 6 +----- .../consumers/ProposalCreationQueueConsumer.ts | 4 ++-- .../consumers/visa/consumers/syncProposalQueueConsumer.ts | 2 -- 5 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/models/Event.ts b/src/models/Event.ts index 335d7216..2ed1cff6 100644 --- a/src/models/Event.ts +++ b/src/models/Event.ts @@ -1,6 +1,4 @@ export enum Event { - PROPOSAL_STATUS_CHANGED_BY_WORKFLOW = 'PROPOSAL_STATUS_CHANGED_BY_WORKFLOW', - PROPOSAL_STATUS_CHANGED_BY_USER = 'PROPOSAL_STATUS_CHANGED_BY_USER', PROPOSAL_STATUS_ACTION_EXECUTED = 'PROPOSAL_STATUS_ACTION_EXECUTED', PROPOSAL_ACCEPTED = 'PROPOSAL_ACCEPTED', PROPOSAL_UPDATED = 'PROPOSAL_UPDATED', diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts index 748d700b..cc431a52 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/ChatroomCreationQueueConsumer.ts @@ -8,8 +8,6 @@ import { validateProposalMessage } from '../../../utils/validateProposalMessage' import { createChatroom } from '../consumerCallbacks/createChatroom'; const EVENT_TYPES = [ - Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, - Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, Event.PROPOSAL_UPDATED, ]; diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts index e734aa10..fad6dc2e 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/FolderCreationQueueConsumer.ts @@ -7,11 +7,7 @@ import { hasTriggeringType } from '../../../utils/hasTriggeringType'; import { validateProposalMessage } from '../../../utils/validateProposalMessage'; import { proposalFoldersCreation } from '../consumerCallbacks/proposalFoldersCreation'; -const EVENT_TYPES = [ - Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, - Event.PROPOSAL_STATUS_CHANGED_BY_USER, - Event.PROPOSAL_STATUS_ACTION_EXECUTED, -]; +const EVENT_TYPES = [Event.PROPOSAL_STATUS_ACTION_EXECUTED]; const triggeringStatuses = process.env.PROPOSAL_FOLDERS_CREATION_TRIGGERING_STATUSES?.split(', '); diff --git a/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts b/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts index f3862bb2..e6f790c2 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumers/ProposalCreationQueueConsumer.ts @@ -8,10 +8,10 @@ import { validateProposalMessage } from '../../../utils/validateProposalMessage' import { upsertProposalInScicat } from '../consumerCallbacks/upsertProposalInScicat'; const EVENT_TYPES = [ - Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, - Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, + Event.PROPOSAL_UPDATED, ]; + const triggeringStatuses = process.env.SCICAT_PROPOSAL_TRIGGERING_STATUSES?.split(', '); diff --git a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts index e7f25cbf..1347bb4f 100644 --- a/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts +++ b/src/queue/consumers/visa/consumers/syncProposalQueueConsumer.ts @@ -11,8 +11,6 @@ import { syncVisaProposal } from '../consumerCallbacks/syncVisaProposal'; import { sanitizeProposalMessage } from '../utils/sanitizeProposalMessage'; const EVENTS_FOR_HANDLING = [ - Event.PROPOSAL_STATUS_CHANGED_BY_WORKFLOW, - Event.PROPOSAL_STATUS_CHANGED_BY_USER, Event.PROPOSAL_STATUS_ACTION_EXECUTED, Event.PROPOSAL_UPDATED, ]; From 78044fe4e63d1d84645aa35d01a430f4fba19a48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:42:20 +0000 Subject: [PATCH 156/176] build(deps): bump base-x from 4.0.0 to 4.0.1 Bumps [base-x](https://github.com/cryptocoinjs/base-x) from 4.0.0 to 4.0.1. - [Commits](https://github.com/cryptocoinjs/base-x/compare/v4.0.0...v4.0.1) --- updated-dependencies: - dependency-name: base-x dependency-version: 4.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index f23fbee9..4f5bb036 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2419,9 +2419,10 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -10696,9 +10697,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" }, "binary-extensions": { "version": "2.2.0", From b5a53372a0e6093733be022080b4b6ef5c51e39c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 17 Jun 2025 15:26:36 +0200 Subject: [PATCH 157/176] Merge pull request #558 from UserOfficeProject/SWAP-4738-connector-re-fetch-accesstoken-on-invalid-token-e refactor: token refresh in chatRoomCreateConsumer and added unit tests --- src/index.ts | 1 - .../nicos/NicosTopicConsumer.spec.ts | 127 ++++++++++++++++++ .../consumers/nicos/NicosTopicConsumer.ts | 17 ++- .../consumerCallbacks/postNicosMessage.ts | 19 --- .../nicos/utils/validateNicosMessage.spec.ts | 63 +++++++++ .../consumerCallbacks/createChatroom.ts | 3 + src/services/synapse/SynapseService.ts | 39 ++++-- 7 files changed, 233 insertions(+), 36 deletions(-) create mode 100644 src/queue/consumers/nicos/NicosTopicConsumer.spec.ts delete mode 100644 src/queue/consumers/nicos/consumerCallbacks/postNicosMessage.ts create mode 100644 src/queue/consumers/nicos/utils/validateNicosMessage.spec.ts diff --git a/src/index.ts b/src/index.ts index f3f5635d..23409f92 100644 --- a/src/index.ts +++ b/src/index.ts @@ -49,7 +49,6 @@ async function bootstrap() { const enableOneIdentityIntegration = str2Bool( process.env.ENABLE_ONE_IDENTITY_INTEGRATION as string ); - const enableSyncVisaProposals = str2Bool( process.env.ENABLE_SYNC_VISA_PROPOSALS as string ); diff --git a/src/queue/consumers/nicos/NicosTopicConsumer.spec.ts b/src/queue/consumers/nicos/NicosTopicConsumer.spec.ts new file mode 100644 index 00000000..f67ad5f4 --- /dev/null +++ b/src/queue/consumers/nicos/NicosTopicConsumer.spec.ts @@ -0,0 +1,127 @@ +jest.mock('tsyringe', () => ({ + container: { + resolve: jest.fn(), + }, +})); +jest.mock('./utils/validateNicosMessage'); +jest.mock('@user-office-software/duo-logger', () => ({ + logger: { + logError: jest.fn(), + }, +})); + +import { logger } from '@user-office-software/duo-logger'; +import { container } from 'tsyringe'; + +import { TopicSciChatConsumer } from './NicosTopicConsumer'; +import { validateNicosMessage } from './utils/validateNicosMessage'; +import { Tokens } from '../../../config/Tokens'; + +const mockLogin = jest.fn(); +const mockSendMessage = jest.fn(); + +const mockSynapseService = { + login: mockLogin, + sendMessage: mockSendMessage, +}; + +const mockConsume = jest.fn(); + +const mockConsumerService = { + consume: mockConsume, +}; + +describe('TopicSciChatConsumer', () => { + const topic = 'test-topic'; + const kafkaClientId = 'test-client-id'; + const validMessageData = { + proposal: 'p1', + instrument: 'testInstrument', + source: 'test-source', + message: 'hello', + }; + + beforeEach(() => { + jest.clearAllMocks(); + (container.resolve as jest.Mock).mockReturnValue(mockSynapseService); + (validateNicosMessage as jest.Mock).mockReturnValue(validMessageData); + process.env.KAFKA_CLIENTID = kafkaClientId; + }); + + it('should login and consume messages', async () => { + const consumer = new TopicSciChatConsumer(mockConsumerService as any); + + await consumer.start(topic); + + expect(container.resolve).toHaveBeenCalledWith(Tokens.SynapseService); + expect(mockLogin).toHaveBeenCalledWith('TopicSciChatConsumer'); + expect(mockConsume).toHaveBeenCalledWith( + kafkaClientId, + { topics: [topic] }, + expect.objectContaining({ + eachMessage: expect.any(Function), + }) + ); + }); + + it('should process a valid message and call sendMessage', async () => { + const consumer = new TopicSciChatConsumer(mockConsumerService as any); + await consumer.start(topic); + + // Simulate eachMessage handler + const { eachMessage } = mockConsume.mock.calls[0][2]; + const fakeKafkaMessage = { + value: Buffer.from(JSON.stringify(validMessageData)), + offset: '123', + }; + + await eachMessage({ message: fakeKafkaMessage }); + + expect(validateNicosMessage).toHaveBeenCalledWith(validMessageData); + expect(mockSendMessage).toHaveBeenCalledWith('p1', 'hello'); + expect(logger.logError).not.toHaveBeenCalled(); + }); + + it('should log error and not throw if message processing fails', async () => { + const consumer = new TopicSciChatConsumer(mockConsumerService as any); + await consumer.start(topic); + + // Simulate eachMessage handler with invalid JSON + const { eachMessage } = mockConsume.mock.calls[0][2]; + const fakeKafkaMessage = { + value: Buffer.from('not-json'), + offset: '456', + }; + + await eachMessage({ message: fakeKafkaMessage }); + + expect(logger.logError).toHaveBeenCalledWith('Failed processing message', { + messageOffset: '456', + reason: expect.any(String), + }); + expect(mockSendMessage).not.toHaveBeenCalled(); + }); + + it('should log error if validateNicosMessage throws', async () => { + (validateNicosMessage as jest.Mock).mockImplementation(() => { + throw new Error('validation failed'); + }); + + const consumer = new TopicSciChatConsumer(mockConsumerService as any); + await consumer.start(topic); + + const { eachMessage } = mockConsume.mock.calls[0][2]; + const fakeKafkaMessage = { + value: Buffer.from(JSON.stringify(validMessageData)), + offset: '789', + }; + + await eachMessage({ message: fakeKafkaMessage }); + + expect(logger.logError).toHaveBeenCalledWith('Failed processing message', { + messageOffset: '789', + reason: 'validation failed', + }); + expect(mockSendMessage).not.toHaveBeenCalled(); + }); +}); diff --git a/src/queue/consumers/nicos/NicosTopicConsumer.ts b/src/queue/consumers/nicos/NicosTopicConsumer.ts index 41b284f9..d06bffc5 100644 --- a/src/queue/consumers/nicos/NicosTopicConsumer.ts +++ b/src/queue/consumers/nicos/NicosTopicConsumer.ts @@ -1,12 +1,19 @@ import { logger } from '@user-office-software/duo-logger'; +import { container } from 'tsyringe'; import ConsumerService from '../KafkaConsumer'; -import { postNicosMessage } from './consumerCallbacks/postNicosMessage'; import { validateNicosMessage } from './utils/validateNicosMessage'; +import { Tokens } from '../../../config/Tokens'; +import { SynapseService } from '../../../services/synapse/SynapseService'; export class TopicSciChatConsumer { constructor(private _consumer: ConsumerService) {} async start(topic: string) { + const synapseService: SynapseService = container.resolve( + Tokens.SynapseService + ); + await synapseService.login('TopicSciChatConsumer'); + this._consumer.consume( `${process.env.KAFKA_CLIENTID}`, { topics: [topic] }, @@ -16,10 +23,10 @@ export class TopicSciChatConsumer { const messageData = JSON.parse(message.value?.toString() as string); const validMessageData = validateNicosMessage(messageData); - await postNicosMessage({ - roomName: validMessageData.proposal, - message: validMessageData.message, - }); + await synapseService.sendMessage( + validMessageData.proposal, + validMessageData.message + ); } catch (error) { logger.logError('Failed processing message', { // Note: offset is similar to the index of the message diff --git a/src/queue/consumers/nicos/consumerCallbacks/postNicosMessage.ts b/src/queue/consumers/nicos/consumerCallbacks/postNicosMessage.ts deleted file mode 100644 index ef9c5a07..00000000 --- a/src/queue/consumers/nicos/consumerCallbacks/postNicosMessage.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { container } from 'tsyringe'; - -import { Tokens } from '../../../../config/Tokens'; -import { SynapseService } from '../../../../services/synapse/SynapseService'; - -const postNicosMessage = async ({ - roomName, - message, -}: { - roomName: string; - message: string; -}) => { - const synapseService: SynapseService = container.resolve( - Tokens.SynapseService - ); - await synapseService.sendMessage(roomName, message); -}; - -export { postNicosMessage }; diff --git a/src/queue/consumers/nicos/utils/validateNicosMessage.spec.ts b/src/queue/consumers/nicos/utils/validateNicosMessage.spec.ts new file mode 100644 index 00000000..ef273ea1 --- /dev/null +++ b/src/queue/consumers/nicos/utils/validateNicosMessage.spec.ts @@ -0,0 +1,63 @@ +import { validateNicosMessage } from './validateNicosMessage'; +import { NicosMessageData } from '../../../../models/KafkaTypes'; +// Mock NicosMessageData type since it's imported from another file + +describe('validateNicosMessage', () => { + const validMessage: NicosMessageData = { + proposal: 'proposal1', + instrument: 'instrument1', + source: 'source1', + message: 'message1', + }; + + it('should return the message as ValidNicosMessage when all fields are valid', () => { + const result = validateNicosMessage(validMessage); + expect(result).toEqual(validMessage); + }); + + it('should throw error if proposal is missing', () => { + const msg = { ...validMessage, proposal: undefined }; + expect(() => validateNicosMessage(msg as any)).toThrow( + 'Proposal format is wrong' + ); + }); + + it('should throw error if proposal is not a string', () => { + const msg = { ...validMessage, proposal: 123 as any }; + expect(() => validateNicosMessage(msg)).toThrow('Proposal format is wrong'); + }); + + it('should throw error if instrument is missing', () => { + const msg = { ...validMessage, instrument: undefined as any }; + expect(() => validateNicosMessage(msg)).toThrow( + 'Instrument format is wrong' + ); + }); + + it('should throw error if instrument is not a string', () => { + const msg = { ...validMessage, instrument: 123 as any }; + expect(() => validateNicosMessage(msg)).toThrow( + 'Instrument format is wrong' + ); + }); + + it('should throw error if source is missing', () => { + const msg = { ...validMessage, source: undefined as any }; + expect(() => validateNicosMessage(msg)).toThrow('Source format is wrong'); + }); + + it('should throw error if source is not a string', () => { + const msg = { ...validMessage, source: 123 as any }; + expect(() => validateNicosMessage(msg)).toThrow('Source format is wrong'); + }); + + it('should throw error if message is missing', () => { + const msg = { ...validMessage, message: undefined as any }; + expect(() => validateNicosMessage(msg)).toThrow('message format is wrong'); + }); + + it('should throw error if message is not a string', () => { + const msg = { ...validMessage, message: 123 as any }; + expect(() => validateNicosMessage(msg)).toThrow('message format is wrong'); + }); +}); diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts index db6e5824..20d0f21f 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/createChatroom.ts @@ -50,6 +50,7 @@ const createChatroom = async (message: ValidProposalMessageData) => { const synapseService: SynapseService = container.resolve( Tokens.SynapseService ); + await synapseService.login(); const allUsersOnProposal = [...message.members, message.proposer]; const { validUsers, invalidUsers } = validateUsersProfile(allUsersOnProposal); @@ -117,6 +118,8 @@ const createChatroom = async (message: ValidProposalMessageData) => { } } catch (err: unknown) { logger.logException('Error while creating chatroom: ', err, { message }); + } finally { + await synapseService.logout(); } }; diff --git a/src/services/synapse/SynapseService.ts b/src/services/synapse/SynapseService.ts index d0445b58..9bee5e8e 100644 --- a/src/services/synapse/SynapseService.ts +++ b/src/services/synapse/SynapseService.ts @@ -54,13 +54,36 @@ export class SynapseService { baseUrl: serverUrl, fetchFn: axiosFetch, }); - // TODO, If consumer service is started after downtime, and there are some pending messages in the queue // then it could be that queue handler will delegate handling of messages before connection to supabase is established - this.client.loginWithPassword( - serviceAccount.userId, - serviceAccount.password - ); + } + + async login(consumerName = 'ChatroomCreationQueueConsumer') { + if (!serviceAccount.userId) + throw new Error('SYNAPSE_SERVICE_USER is not set'); + if (!serviceAccount.password) + throw new Error('SYNAPSE_SERVICE_PASSWORD is not set'); + + try { + await this.client.loginWithPassword( + serviceAccount.userId, + serviceAccount.password + ); + } catch (error) { + logger.logError(`Failed to login to Synapse from ${consumerName}`, { + error, + }); + throw error; + } + } + + async logout() { + try { + await this.client.logout(); + } catch (error) { + logger.logError('Failed to logout from Synapse', { error }); + throw error; + } } async createRoom(name: string, topic: string, members: ProposalUser[]) { @@ -127,12 +150,6 @@ export class SynapseService { await this.client .sendEvent(roomId, EventType.RoomMessage, messageContent, '') - .then(() => { - logger.logInfo('Success sending message to chatroom ', { - roomId: roomId, - message: message, - }); - }) .catch((reason) => { logger.logError('Failed sending message to chatroom', { roomId: roomId, From 9dc01d08e3b179f5e1f74127ba153b3d02f6f6d4 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Tue, 24 Jun 2025 11:18:22 +0200 Subject: [PATCH 158/176] feat: Improve One Identity Sync: Link visitors to the proposal in OIM (#563) --- ...neIdentityIntegrationQueueConsumer.spec.ts | 38 ++- .../OneIdentityIntegrationQueueConsumer.ts | 10 +- src/queue/consumers/oneidentity/README.md | 129 ++++++++- ...osalAndMembersToOneIdentityHandler.spec.ts | 156 +++++++++-- ...cProposalAndMembersToOneIdentityHandler.ts | 63 +++-- .../syncVisitToOneIdentityHandler.spec.ts | 257 ++++++++++++++++-- .../syncVisitToOneIdentityHandler.ts | 99 ++++++- .../oneidentity/utils/ESSOneIdentity.spec.ts | 168 ++++++++++-- .../oneidentity/utils/ESSOneIdentity.ts | 45 +-- .../utils/interfaces/VisitMessage.ts | 3 + .../oneidentity/utils/isVisitMessage.spec.ts | 58 ++++ .../oneidentity/utils/isVisitMessage.ts | 12 + .../utils/validateVisitMessage.spec.ts | 62 ----- .../oneidentity/utils/validateVisitMessage.ts | 13 - 14 files changed, 896 insertions(+), 217 deletions(-) create mode 100644 src/queue/consumers/oneidentity/utils/isVisitMessage.spec.ts create mode 100644 src/queue/consumers/oneidentity/utils/isVisitMessage.ts delete mode 100644 src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts delete mode 100644 src/queue/consumers/oneidentity/utils/validateVisitMessage.ts diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts index 4fccfc5f..3bdb9416 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.spec.ts @@ -6,6 +6,7 @@ jest.mock('../QueueConsumer', () => ({ })); jest.mock('./consumerCallbacks/syncProposalAndMembersToOneIdentityHandler'); jest.mock('./consumerCallbacks/syncVisitToOneIdentityHandler'); +jest.mock('./utils/isVisitMessage'); jest.mock('axios', () => ({ isAxiosError: jest.fn(), })); @@ -19,6 +20,7 @@ import { syncProposalAndMembersToOneIdentityHandler } from './consumerCallbacks/ import { syncVisitToOneIdentityHandler } from './consumerCallbacks/syncVisitToOneIdentityHandler'; import { OneIdentityIntegrationQueueConsumer } from './OneIdentityIntegrationQueueConsumer'; import { VisitMessage } from './utils/interfaces/VisitMessage'; +import { isVisitMessage } from './utils/isVisitMessage'; import { Event } from '../../../models/Event'; import { ProposalMessageData } from '../../../models/ProposalMessage'; @@ -166,12 +168,13 @@ describe('OneIdentityIntegrationQueueConsumer', () => { visitorId: 'visitor-id', startAt: '2021-01-01T00:00:00Z', endAt: '2021-01-02T00:00:00Z', + proposal: { + shortCode: 'proposal-short-code', + }, } as VisitMessage; const type = Event.VISIT_CREATED; - jest.mock('./utils/validateVisitMessage', () => ({ - validateVisitMessage: jest.fn().mockReturnValue(message), - })); + (isVisitMessage as unknown as jest.Mock).mockReturnValue(true); await consumer.onMessage(type, message as any, {} as MessageProperties); @@ -203,6 +206,9 @@ describe('OneIdentityIntegrationQueueConsumer', () => { visitorId: 'visitor-id', startAt: '2021-01-01T00:00:00Z', endAt: '2021-01-02T00:00:00Z', + proposal: { + shortCode: 'proposal-short-code', + }, } as VisitMessage; const type = Event.VISIT_CREATED; @@ -218,14 +224,12 @@ describe('OneIdentityIntegrationQueueConsumer', () => { response: mockResponse, }); - jest.mock('./utils/validateVisitMessage', () => ({ - validateVisitMessage: jest.fn().mockReturnValue(message), - })); + (isVisitMessage as unknown as jest.Mock).mockReturnValue(true); (isAxiosError as unknown as jest.Mock).mockReturnValueOnce(true); - (syncVisitToOneIdentityHandler as jest.Mock) = jest - .fn() - .mockRejectedValueOnce(axiosError); + (syncVisitToOneIdentityHandler as jest.Mock).mockRejectedValueOnce( + axiosError + ); await expect( consumer.onMessage(type, message as any, {} as MessageProperties) @@ -245,6 +249,22 @@ describe('OneIdentityIntegrationQueueConsumer', () => { } ); }); + + it('should throw an error if the visit message is invalid', async () => { + const message = { some: 'invalid message' }; + const type = Event.VISIT_CREATED; + + (isVisitMessage as unknown as jest.Mock).mockReturnValue(false); + + await expect( + consumer.onMessage(type, message as any, {} as MessageProperties) + ).rejects.toThrow( + `Invalid Visit message received: ${JSON.stringify(message)}` + ); + + expect(syncVisitToOneIdentityHandler).not.toHaveBeenCalled(); + expect(logger.logException).toHaveBeenCalled(); + }); }); }); diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts index 44c9133f..7f03eb86 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -8,7 +8,7 @@ import { validateProposalMessage } from './utils/validateProposalMessage'; import { Event } from '../../../models/Event'; import { QueueConsumer } from '../QueueConsumer'; import { hasTriggeringType } from '../utils/hasTriggeringType'; -import { validateVisitMessage } from './utils/validateVisitMessage'; +import { isVisitMessage } from './utils/isVisitMessage'; const ONE_IDENTITY_INTEGRATION_QUEUE_NAME = process.env.ONE_IDENTITY_INTEGRATION_QUEUE_NAME || ''; @@ -63,8 +63,12 @@ export class OneIdentityIntegrationQueueConsumer extends QueueConsumer { eventType ); } else if (isVisitEvent) { - const visitMessage = validateVisitMessage(message); - await syncVisitToOneIdentityHandler(visitMessage, eventType); + if (isVisitMessage(message)) + await syncVisitToOneIdentityHandler(message, eventType); + else + throw new Error( + `Invalid Visit message received: ${JSON.stringify(message)}` + ); } logger.logInfo('Message handled by OneIdentityIntegrationQueueConsumer', { diff --git a/src/queue/consumers/oneidentity/README.md b/src/queue/consumers/oneidentity/README.md index ac591d19..3345b5fa 100644 --- a/src/queue/consumers/oneidentity/README.md +++ b/src/queue/consumers/oneidentity/README.md @@ -17,6 +17,7 @@ The handler manages site and system access in One Identity based on visit creati ### Key Relationships - System access is linked to site access via `CustomProperty04` which stores the site access UID - Both access types are identified by specific roles in `PersonWantsOrgRole` enum +- Proposal's short code is stored in `CustomProperty04` of the system access record ## Process Flow Chart @@ -99,4 +100,130 @@ The handler manages site and system access in One Identity based on visit creati ### Error Handling - Proper error messages when person or access records are not found -- Always performs logout in finally block to ensure clean session management \ No newline at end of file +- Always performs logout in finally block to ensure clean session management + +--- + +## One Identity Proposal and Member Sync + +### Purpose +The handler synchronizes proposal information and its members (proposer and co-proposers) with One Identity. This ensures that proposals and their associated personnel are accurately represented and connected in One Identity. + +### Process Overview +- Triggered by `PROPOSAL_ACCEPTED` and `PROPOSAL_UPDATED` events. +- **Login**: Establishes a session with One Identity. +- **Proposal Retrieval/Creation**: + - For both event types, it first attempts to retrieve the proposal (`ESet`) from One Identity using the proposal data. + - If `PROPOSAL_ACCEPTED` event: + - If the proposal does not exist, it creates the proposal in One Identity. + - If creation fails, an error is thrown. + - If `PROPOSAL_UPDATED` event: + - If the proposal does not exist, the process logs this information and concludes, as there's no existing record to update. +- **User Synchronization**: + - Collects all unique user OIDC sub identifiers from the proposal message (proposer and members). + - Retrieves the corresponding `UID_Person` for these users from One Identity. + - Logs an error if any users from the proposal message are not found in One Identity. +- **Connection Management**: + - Fetches all existing `PersonHasESET` connections for the identified proposal (`UID_ESet`). + - **Remove Old Connections**: + - Identifies connections in One Identity for persons who are no longer part of the current proposal members list. + - Before removing a connection, it checks if the person has "site access" to the proposal (e.g., as a visitor). + - If the person has site access, their connection to the proposal is *not* removed. + - Otherwise, the outdated connection is removed. + - **Add New Connections**: + - Identifies persons in the current proposal members list who are not yet connected to the proposal in One Identity. + - Creates new `PersonHasESET` connections for these persons. +- **Logout**: Ensures logout from One Identity in a `finally` block, regardless of success or failure. + +### Key Relationships +- **Proposals**: Mapped to `ESet` objects in One Identity. +- **Users**: (Proposers, members) are `Person` objects in One Identity, identified via their OIDC sub. +- **Connections**: The link between a `Person` and an `ESet` is represented by a `PersonHasESET` record. + +### Process Flow Chart + +``` +┌─────────────────────────┐ +│ Proposal Event Received │ +│ (ACCEPTED/UPDATED) │ +└──────────┬──────────────┘ + ↓ +┌─────────────────────────┐ +│ Login to One Identity │ +└──────────┬──────────────┘ + ↓ +┌─────────────────────────┐ +│ Get Proposal (ESet) │ +│ from One Identity │ +└──────────┬──────────────┘ + │ +┌──────────┴──────────┐ +│ Event Type? │ +└────┬───────────┬────┘ + ↓ ↓ +PROPOSAL_ACCEPTED PROPOSAL_UPDATED + │ │ +┌────┴────────┐ │ ┌──────────────────────────┐ +│ ESet Exists?│ No │ ESet Exists? ├─No─┐ +└──────┬───No─┘ │ └──────────┬───────────────┘ │ + Yes │ Yes │ + │ │ │ ┌──────────────────────────┐ + │ ┌───────┴─────────┐ │ │ Log "Proposal not found │ + │ │ Create ESet in │ │ │ for update", Logout & Exit│ + │ │ One Identity │ │ └──────────────────────────┘ + │ └───────┬─────────┘ │ + │ ↓ │ + │ ┌───────┴─────────┐ │ + │ │ ESet Created? ├─No─┼───►Error: Creation Failed, Logout + │ └───────┬─────────┘ │ + Yes Yes │ + └──────────┼─────────────┘ + ↓ +┌─────────────────────────────────┐ +│ Get UIDs for all proposal users │ +│ (proposer & members) via OIDC sub│ +└────────────────┬────────────────┘ + ↓ +┌─────────────────────────────────┐ +│ All users found in One Identity?├─No─►Log Error: Users Missing +└────────────────┬────────────────┘ + Yes + ↓ +┌─────────────────────────────────┐ +│ Get existing PersonHasESET │ +│ connections for the ESet │ +└────────────────┬────────────────┘ + │ +┌────────────────┴────────────────┐ +│ For each existing connection: │ +│ - Is person still in proposal? │ +│ No ─► Has person site access? │ +│ No ─► Remove Connection │ +└────────────────┬────────────────┘ + ↓ +┌─────────────────────────────────┐ +│ For each user in current proposal:│ +│ - Not already connected? │ +│ Yes ─► Add Connection │ +└────────────────┬────────────────┘ + ↓ +┌─────────────────────────────────┐ +│ Log "Connections updated" │ +└────────────────┬────────────────┘ + ↓ +┌─────────────────────────────────┐ +│ Logout from One Identity │ +└─────────────────────────────────┘ +``` + +### Key Implementation Details +- **User Identification**: Users are primarily identified by their `oidcSub` from the proposal message, which is used to look up their `UID_Person` in One Identity. +- **Proposal Identification**: The proposal itself is identified in One Identity using its `shortCode` and other details from the `ProposalMessageData`. +- **Conditional Connection Removal**: A crucial feature is that connections for users no longer in the proposal are only removed if those users do not also have separate site access to that proposal. This prevents inadvertently revoking access for individuals like visitors who might be associated with a proposal through a different mechanism (site access). +- **Idempotency for `PROPOSAL_ACCEPTED`**: If a `PROPOSAL_ACCEPTED` event is processed for a proposal that already exists in One Identity (e.g., due to a retry), the system does not attempt to re-create it but proceeds to synchronize the member connections. +- **Handling `PROPOSAL_UPDATED` for Non-existent Proposals**: If a `PROPOSAL_UPDATED` event is received for a proposal that isn't found in One Identity, the handler logs this and exits gracefully, as there's no record to update. + +### Error Handling +- **Proposal Creation Failure**: If creating a new proposal (`ESet`) in One Identity fails during a `PROPOSAL_ACCEPTED` event, an error is thrown, and the process is halted. +- **User Not Found**: If any users listed in the proposal message (proposer or members) cannot be found in One Identity, an error is logged. The process continues with the users that were found. +- **Logout Guarantee**: The One Identity session is always closed in a `finally` block, ensuring resources are released even if errors occur during the synchronization process. \ No newline at end of file diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index 909f1edf..ce45e904 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -8,7 +8,7 @@ import { logger } from '@user-office-software/duo-logger'; import { syncProposalAndMembersToOneIdentityHandler } from './syncProposalAndMembersToOneIdentityHandler'; import { Event } from '../../../../models/Event'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; -import { ESSOneIdentity, UserPersonConnection } from '../utils/ESSOneIdentity'; +import { ESSOneIdentity } from '../utils/ESSOneIdentity'; import { UID_ESet } from '../utils/interfaces/Eset'; import { PersonHasESET } from '../utils/interfaces/PersonHasESET'; @@ -25,12 +25,14 @@ const mockOneIdentity: jest.Mocked> = { getPersonWantsOrg: jest.fn(), createPersonWantsOrg: jest.fn(), cancelPersonWantsOrg: jest.fn(), + hasPersonSiteAccessToProposal: jest.fn(), }; const setupMocks = (data: { getProposal: UID_ESet | undefined; getProposalPersonConnections?: PersonHasESET[]; - getPersons?: UserPersonConnection[]; + getPersons?: string[]; + hasPersonSiteAccessToProposalConfig?: { [key: string]: boolean }; }) => { mockOneIdentity.createProposal.mockResolvedValueOnce('proposal-UID_ESet'); mockOneIdentity.getProposal.mockResolvedValueOnce(data.getProposal); @@ -38,17 +40,17 @@ const setupMocks = (data: { data.getProposalPersonConnections ?? [] ); mockOneIdentity.getPersons.mockResolvedValueOnce( - data.getPersons ?? [ - { - oidcSub: 'proposer-oidc-sub', - uidPerson: 'proposer-uid', - }, - { - oidcSub: 'member-oidc-sub', - uidPerson: 'member-uid', - }, - ] + data.getPersons ?? ['proposer-uid', 'member-uid'] ); + if (data.hasPersonSiteAccessToProposalConfig) { + mockOneIdentity.hasPersonSiteAccessToProposal.mockImplementation( + async (uidPerson: string, _proposalUid: string) => { + return data.hasPersonSiteAccessToProposalConfig?.[uidPerson] ?? false; + } + ); + } else { + mockOneIdentity.hasPersonSiteAccessToProposal.mockResolvedValue(false); + } }; const proposalMessage = { @@ -102,12 +104,7 @@ describe('oneIdentityIntegrationHandler', () => { setupMocks({ getProposal: undefined, getProposalPersonConnections: [], - getPersons: [ - { - oidcSub: 'proposer-oidc-sub', - uidPerson: 'proposer-uid', - }, - ], + getPersons: ['proposer-uid'], }); await syncProposalAndMembersToOneIdentityHandler( @@ -116,13 +113,10 @@ describe('oneIdentityIntegrationHandler', () => { ); expect(logger.logError).toHaveBeenCalledWith( - 'Not all users found in One Identity (investigate)', + 'Not all users found in One Identity (Investigate). Missing central accounts:', { - users: [ - { oidcSub: 'member-oidc-sub' }, - { oidcSub: 'proposer-oidc-sub' }, - ], - uidPersons: ['proposer-uid'], + centralAccounts: ['member-oidc-sub', 'proposer-oidc-sub'], + foundUsersInOneIdentity: ['proposer-uid'], } ); }); @@ -184,7 +178,7 @@ describe('oneIdentityIntegrationHandler', () => { }); describe('PROPOSAL_UPDATED', () => { - it('should handle updated proposal', async () => { + it('should handle updated proposal and remove old connections', async () => { setupMocks({ getProposal: 'proposal-UID_ESet', getProposalPersonConnections: [ @@ -194,9 +188,10 @@ describe('oneIdentityIntegrationHandler', () => { }, { UID_ESet: 'proposal-UID_ESet', - UID_Person: 'old-member-uid', // this person should be removed, because it's not in the updated proposal + UID_Person: 'old-member-uid', // this person should be removed }, ], + hasPersonSiteAccessToProposalConfig: { 'old-member-uid': false }, }); await syncProposalAndMembersToOneIdentityHandler( @@ -226,6 +221,115 @@ describe('oneIdentityIntegrationHandler', () => { expect(mockOneIdentity.logout).toHaveBeenCalled(); }); + it('should not remove old connection if person has site access to proposal', async () => { + setupMocks({ + getProposal: 'proposal-UID_ESet', + getProposalPersonConnections: [ + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'proposer-uid', + }, + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'visitor-member-uid', // this person should NOT be removed due to site access + }, + ], + // 'visitor-member-uid' has site access + hasPersonSiteAccessToProposalConfig: { 'visitor-member-uid': true }, + }); + + await syncProposalAndMembersToOneIdentityHandler( + proposalMessage, + Event.PROPOSAL_UPDATED + ); + + expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); + expect(mockOneIdentity.getProposalPersonConnections).toHaveBeenCalledWith( + 'proposal-UID_ESet' + ); + // removeConnectionBetweenPersonAndProposal should NOT be called for 'visitor-member-uid' + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalledWith('proposal-UID_ESet', 'visitor-member-uid'); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledTimes(0); // No connections should be removed in this specific setup + + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); // 'member-uid' is new + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'member-uid' + ); + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: ['proposer-uid', 'member-uid'], + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should remove one old connection and keep another due to site access', async () => { + setupMocks({ + getProposal: 'proposal-UID_ESet', + getProposalPersonConnections: [ + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'proposer-uid', // Keep (in proposal) + }, + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'old-member-to-remove-uid', // Remove (not in proposal, no site access) + }, + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'visitor-member-to-keep-uid', // Keep (not in proposal, but has site access) + }, + ], + getPersons: ['proposer-uid', 'member-uid'], // Current members in the proposal message + hasPersonSiteAccessToProposalConfig: { + 'old-member-to-remove-uid': false, + 'visitor-member-to-keep-uid': true, + }, + }); + + await syncProposalAndMembersToOneIdentityHandler( + proposalMessage, // Contains proposer-uid and member-uid + Event.PROPOSAL_UPDATED + ); + + expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); + expect(mockOneIdentity.getProposalPersonConnections).toHaveBeenCalledWith( + 'proposal-UID_ESet' + ); + + // Check removals + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledTimes(1); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledWith('proposal-UID_ESet', 'old-member-to-remove-uid'); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'visitor-member-to-keep-uid' + ); + + // Check additions + // 'member-uid' is in proposalMessage.members and not in initial connections that are kept + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'member-uid' + ); + + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: ['proposer-uid', 'member-uid'], + }); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + it('should not handle proposal if there is no created proposal in One Identity', async () => { setupMocks({ getProposal: undefined, diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index 5a88daed..21d84957 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -3,7 +3,7 @@ import { logger } from '@user-office-software/duo-logger'; import { Event } from '../../../../models/Event'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { collectUsersFromProposalMessage } from '../../utils/collectUsersFromProposalMessage'; -import { ESSOneIdentity, UserPersonConnection } from '../utils/ESSOneIdentity'; +import { ESSOneIdentity } from '../utils/ESSOneIdentity'; import { UID_ESet } from '../utils/interfaces/Eset'; import { UID_Person } from '../utils/interfaces/Person'; import { PersonHasESET } from '../utils/interfaces/PersonHasESET'; @@ -24,10 +24,11 @@ export async function syncProposalAndMembersToOneIdentityHandler( logger.logInfo('UID_ESet from One Identity', { uidESet }); if (uidESet) { + const users = collectUsersFromProposalMessage(message); await handleConnectionsBetweenProposalAndPersons( oneIdentity, uidESet, - message + users.map((user) => user.oidcSub) ); } } finally { @@ -68,22 +69,24 @@ async function getUIDESetFromOneIdentity( async function handleConnectionsBetweenProposalAndPersons( oneIdentity: ESSOneIdentity, uidESet: UID_ESet, - message: ProposalMessageData + centralAccounts: string[] ) { - const users = collectUsersFromProposalMessage(message); - - logger.logInfo('Users from proposal', { users }); + logger.logInfo('Users to be connected to proposal', { + centralAccounts, + }); // Get all users from One Identity - const userPersonConnections = await oneIdentity.getPersons(users); - const uidPersons = getUidPersons(userPersonConnections); + const uidPersons = await oneIdentity.getPersons(centralAccounts); // Log an error if not all users are found in One Identity to be able to investigate - if (uidPersons.length !== users.length) { - logger.logError('Not all users found in One Identity (investigate)', { - users, - uidPersons, - }); + if (uidPersons.length !== centralAccounts.length) { + logger.logError( + 'Not all users found in One Identity (Investigate). Missing central accounts:', + { + centralAccounts, + foundUsersInOneIdentity: uidPersons, + } + ); } logger.logInfo('Found persons in One Identity', { uidPersons }); @@ -97,18 +100,6 @@ async function handleConnectionsBetweenProposalAndPersons( logger.logInfo('Connections updated', { uidESet, uidPersons }); } -// Method to get UID_Person from UserPersonConnection -function getUidPersons( - userPersonConnections: UserPersonConnection[] -): UID_Person[] { - return userPersonConnections - .filter( - (connection): connection is { oidcSub: string; uidPerson: UID_Person } => - connection.uidPerson !== undefined - ) - .map(({ uidPerson }) => uidPerson); -} - async function addNewConnections( oneIdentity: ESSOneIdentity, uidESet: UID_ESet, @@ -132,10 +123,30 @@ async function removeOldConnections( connections: PersonHasESET[], uidPersons: UID_Person[] ): Promise { - const connectionsToRemove = connections.filter( + // Collect connections that are not in the list of current persons (OIM) + const potentiallyRemoveableConnections = connections.filter( (connection) => !uidPersons.includes(connection.UID_Person) ); + const removalChecks = await Promise.all( + potentiallyRemoveableConnections.map(async (connectionToRemove) => { + const hasAccess = await oneIdentity.hasPersonSiteAccessToProposal( + connectionToRemove.UID_Person, + connectionToRemove.UID_ESet + ); + + return { + connection: connectionToRemove, + shouldRemove: !hasAccess, // Remove if the person does NOT have site access + }; + }) + ); + + // Filter out connections that should not be removed + const connectionsToRemove = removalChecks + .filter((check) => check.shouldRemove) + .map((check) => check.connection); + await Promise.all( connectionsToRemove.map((connection) => oneIdentity.removeConnectionBetweenPersonAndProposal( diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts index b60035d2..bcd45b9c 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts @@ -15,7 +15,9 @@ import { logger } from '@user-office-software/duo-logger'; import { syncVisitToOneIdentityHandler } from './syncVisitToOneIdentityHandler'; import { Event } from '../../../../models/Event'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; import { ESSOneIdentity } from '../utils/ESSOneIdentity'; +import { UID_ESet } from '../utils/interfaces/Eset'; import { IdentityType, Person } from '../utils/interfaces/Person'; import { OrderState, @@ -37,12 +39,30 @@ const mockOneIdentity: jest.Mocked> = { removeConnectionBetweenPersonAndProposal: jest.fn(), createPersonWantsOrg: jest.fn(), cancelPersonWantsOrg: jest.fn(), + hasPersonSiteAccessToProposal: jest.fn(), }; +const mockUidESet: UID_ESet = 'eset-uid-123'; + const visitMessage: VisitMessage = { visitorId: 'visitor-oidc-sub', startAt: '2023-01-01T00:00:00.000Z', endAt: '2023-01-10T00:00:00.000Z', + proposal: { + shortCode: 'proposal-short-code', + members: [ + { oidcSub: 'member-oidc-sub' }, + { oidcSub: 'visitor-oidc-sub' }, // Visitor is also a member + ], + } as ProposalMessageData, +}; + +const visitMessageVisitorNotMember: VisitMessage = { + ...visitMessage, + proposal: { + ...visitMessage.proposal, + members: [{ oidcSub: 'member-oidc-sub' }], // Visitor is NOT a member + } as ProposalMessageData, }; describe('syncVisitToOneIdentityHandler', () => { @@ -63,9 +83,9 @@ describe('syncVisitToOneIdentityHandler', () => { await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(logger.logInfo).toHaveBeenCalledWith( 'Visitor is not a Science User, skipping', {} @@ -75,8 +95,8 @@ describe('syncVisitToOneIdentityHandler', () => { }); }); - describe('VISITOR_CREATED', () => { - it('should create site access and system access in One Identity for science users', async () => { + describe('VISIT_CREATED', () => { + it('should create site access and system access in One Identity for science users and connect to proposal', async () => { // Mock the current time to a fixed value for testing const mockNowDate = new Date('2022-12-15T00:00:00.000Z'); const originalDateNow = Date.now; @@ -97,6 +117,8 @@ describe('syncVisitToOneIdentityHandler', () => { } as PersonWantsOrg; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); + mockOneIdentity.getProposalPersonConnections.mockResolvedValueOnce([]); // No existing connection // Mock sequential calls to createPersonWantsOrg with different responses mockOneIdentity.createPersonWantsOrg @@ -106,9 +128,15 @@ describe('syncVisitToOneIdentityHandler', () => { await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); + expect(mockOneIdentity.getProposal).toHaveBeenCalledWith( + visitMessage.proposal + ); + expect(mockOneIdentity.getProposalPersonConnections).toHaveBeenCalledWith( + mockUidESet + ); // Verify site access creation expect(mockOneIdentity.createPersonWantsOrg).toHaveBeenCalledTimes(2); @@ -117,7 +145,8 @@ describe('syncVisitToOneIdentityHandler', () => { PersonWantsOrgRole.SITE_ACCESS, visitMessage.visitorId, visitMessage.startAt, - visitMessage.endAt + visitMessage.endAt, + visitMessage.proposal.shortCode ); // Calculate expected system access dates @@ -152,12 +181,84 @@ describe('syncVisitToOneIdentityHandler', () => { } ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + mockUidESet, + mockPerson.UID_Person + ); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Connection created between proposal and visitor', + { + uidPerson: mockPerson.UID_Person, + uidESet: mockUidESet, + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); // Restore original Date.now Date.now = originalDateNow; }); + it('should skip creating proposal connection if it already exists', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + const mockSiteAccess = { + UID_PersonWantsOrg: 'site-access-uid', + } as PersonWantsOrg; + const mockSystemAccess = { + UID_PersonWantsOrg: 'system-access-uid', + } as PersonWantsOrg; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); + mockOneIdentity.getProposalPersonConnections.mockResolvedValueOnce([ + { UID_Person: mockPerson.UID_Person, UID_ESet: mockUidESet }, + ]); // Connection exists + mockOneIdentity.createPersonWantsOrg + .mockResolvedValueOnce([mockSiteAccess]) + .mockResolvedValueOnce([mockSystemAccess]); + + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED); + + expect(mockOneIdentity.connectPersonToProposal).not.toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Connection already exists, skipping', + { + uidPerson: mockPerson.UID_Person, + uidESet: mockUidESet, + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw an error if proposal is not found in One Identity', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(undefined); // Proposal not found + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_CREATED) + ).rejects.toThrow( + 'Proposal not found in One Identity, cannot sync visit' + ); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); + expect(mockOneIdentity.getProposal).toHaveBeenCalledWith( + visitMessage.proposal + ); + expect(mockOneIdentity.createPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + it('should throw an error if site access creation fails', async () => { // Mock person that is a science user const mockPerson = { @@ -166,6 +267,7 @@ describe('syncVisitToOneIdentityHandler', () => { } as Person; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); mockOneIdentity.createPersonWantsOrg.mockRejectedValueOnce( new Error('Failed to create site access') ); @@ -175,6 +277,9 @@ describe('syncVisitToOneIdentityHandler', () => { ).rejects.toThrow('Failed to create site access'); expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -186,12 +291,12 @@ describe('syncVisitToOneIdentityHandler', () => { } as Person; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); // Create a message with an invalid date const invalidVisitMessage: VisitMessage = { - visitorId: 'visitor-oidc-sub', + ...visitMessage, startAt: 'invalid-date', - endAt: '2023-01-10T00:00:00.000Z', }; await expect( @@ -199,16 +304,16 @@ describe('syncVisitToOneIdentityHandler', () => { ).rejects.toThrow('Invalid date provided to toIsoString: invalid-date'); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(mockOneIdentity.createPersonWantsOrg).not.toHaveBeenCalled(); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); }); describe('VISITOR_DELETED', () => { - it('should remove visitor access in One Identity for science users', async () => { + it('should remove visitor access and proposal connection in One Identity for science users (if not a member)', async () => { // Mock person that is a science user const mockPerson = { UID_Person: 'visitor-uid', @@ -222,6 +327,7 @@ describe('syncVisitToOneIdentityHandler', () => { DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, ValidFrom: '2023-01-01T00:00:00.000Z', ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'proposal-short-code', OrderState: OrderState.GRANTED, } as PersonWantsOrg, { @@ -236,17 +342,24 @@ describe('syncVisitToOneIdentityHandler', () => { ]; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( mockPersonWantsOrgs ); - await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED); + await syncVisitToOneIdentityHandler( + visitMessageVisitorNotMember, // Visitor is NOT a member + Event.VISIT_DELETED + ); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + visitMessageVisitorNotMember.visitorId + ); + expect(mockOneIdentity.getProposal).toHaveBeenCalledWith( + visitMessageVisitorNotMember.proposal + ); expect(mockOneIdentity.getPersonWantsOrg).toHaveBeenCalledWith( 'visitor-uid' ); @@ -282,6 +395,17 @@ describe('syncVisitToOneIdentityHandler', () => { expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenCalledTimes(2); + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).toHaveBeenCalledWith(mockUidESet, mockPerson.UID_Person); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Connection removed between proposal and visitor', + { + uidPerson: mockPerson.UID_Person, + uidESet: mockUidESet, + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); expect(logger.logInfo).toHaveBeenCalledWith( 'One Identity successfully logged out', @@ -289,6 +413,80 @@ describe('syncVisitToOneIdentityHandler', () => { ); }); + it('should skip removing proposal connection if visitor is a member of the proposal', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + const mockPersonWantsOrgs = [ + { + UID_PersonWantsOrg: 'site-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'proposal-short-code', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + { + UID_PersonWantsOrg: 'system-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'site-access-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + ]; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); + mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( + mockPersonWantsOrgs + ); + + // Using original visitMessage where visitor IS a member + await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED); + + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Visitor is a proposal member, skipping removal', + { + uidPerson: mockPerson.UID_Person, + uidESet: mockUidESet, + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + + it('should throw an error if proposal is not found in One Identity on delete', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(undefined); // Proposal not found + + await expect( + syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED) + ).rejects.toThrow( + 'Proposal not found in One Identity, cannot sync visit' + ); + + expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); + expect(mockOneIdentity.getProposal).toHaveBeenCalledWith( + visitMessage.proposal + ); + expect(mockOneIdentity.cancelPersonWantsOrg).not.toHaveBeenCalled(); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + it('should skip processing if visitor is not a science user', async () => { // Mock person that is not a science user const mockPerson = { @@ -301,9 +499,9 @@ describe('syncVisitToOneIdentityHandler', () => { await syncVisitToOneIdentityHandler(visitMessage, Event.VISIT_DELETED); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(logger.logInfo).toHaveBeenCalledWith( 'Visitor is not a Science User, skipping', {} @@ -321,9 +519,9 @@ describe('syncVisitToOneIdentityHandler', () => { ).rejects.toThrow('Person not found in One Identity'); expect(mockOneIdentity.login).toHaveBeenCalled(); - expect(mockOneIdentity.getPerson).toHaveBeenCalledWith({ - oidcSub: 'visitor-oidc-sub', - }); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(mockOneIdentity.getPersonWantsOrg).not.toHaveBeenCalled(); expect(mockOneIdentity.cancelPersonWantsOrg).not.toHaveBeenCalled(); expect(mockOneIdentity.logout).toHaveBeenCalled(); @@ -347,6 +545,7 @@ describe('syncVisitToOneIdentityHandler', () => { ]; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( mockPersonWantsOrgs ); @@ -358,6 +557,9 @@ describe('syncVisitToOneIdentityHandler', () => { ); expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -374,6 +576,7 @@ describe('syncVisitToOneIdentityHandler', () => { DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, ValidFrom: visitMessage.startAt, ValidUntil: visitMessage.endAt, + CustomProperty04: 'proposal-short-code', OrderState: OrderState.GRANTED, } as PersonWantsOrg, // No system access with CustomProperty04 matching site-access-uid @@ -389,6 +592,7 @@ describe('syncVisitToOneIdentityHandler', () => { ]; mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( mockPersonWantsOrgs ); @@ -400,6 +604,9 @@ describe('syncVisitToOneIdentityHandler', () => { ); expect(mockOneIdentity.login).toHaveBeenCalled(); + expect(mockOneIdentity.getPerson).toHaveBeenCalledWith( + 'visitor-oidc-sub' + ); expect(mockOneIdentity.cancelPersonWantsOrg).toHaveBeenCalledWith( 'site-access-uid' ); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts index 84427150..5479bc95 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts @@ -3,6 +3,8 @@ import process from 'process'; import { logger } from '@user-office-software/duo-logger'; import { Event } from '../../../../models/Event'; +import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { collectUsersFromProposalMessage } from '../../utils/collectUsersFromProposalMessage'; import { ESSOneIdentity } from '../utils/ESSOneIdentity'; import { IdentityType, UID_Person } from '../utils/interfaces/Person'; import { @@ -16,7 +18,7 @@ const ONE_IDENTITY_SYSTEM_ACCESS_LASTS_FOR_DAYS = parseInt( ); export async function syncVisitToOneIdentityHandler( - { startAt, endAt, visitorId }: VisitMessage, + { startAt, endAt, visitorId: oidcSub, proposal }: VisitMessage, type: Event ): Promise { const oneIdentity = new ESSOneIdentity(); @@ -26,17 +28,41 @@ export async function syncVisitToOneIdentityHandler( try { // Only Science Users' access should be managed! - const uidPerson = await getScienceUser(oneIdentity, visitorId); + const uidPerson = await getScienceUser(oneIdentity, oidcSub); if (!uidPerson) { logger.logInfo('Visitor is not a Science User, skipping', {}); return; } + const uidESet = await oneIdentity.getProposal(proposal); + + if (!uidESet) { + throw new Error('Proposal not found in One Identity, cannot sync visit'); + } + if (type === Event.VISIT_CREATED) { - await createAccessInOneIdentity(oneIdentity, startAt, endAt, visitorId); + await createAccessInOneIdentity( + oneIdentity, + startAt, + endAt, + oidcSub, + proposal + ); + + // Every visitor should have access to the proposal folders + await createProposalConnection(oneIdentity, uidESet, uidPerson); } else if (type === Event.VISIT_DELETED) { await removeAccessFromOneIdentity(oneIdentity, startAt, endAt, uidPerson); + + // Remove the connection between the proposal and the visitor + await removeProposalConnection( + oneIdentity, + uidESet, + uidPerson, + oidcSub, + proposal + ); } } finally { await oneIdentity.logout(); @@ -51,9 +77,7 @@ async function getScienceUser( centralAccount: string ): Promise { // Find person UID from oidcSub - const person = await oneIdentity.getPerson({ - oidcSub: centralAccount, - }); + const person = await oneIdentity.getPerson(centralAccount); if (!person) { throw new Error('Person not found in One Identity'); @@ -68,14 +92,16 @@ async function createAccessInOneIdentity( oneIdentity: ESSOneIdentity, startAt: string, endAt: string, - centralAccount: string + centralAccount: string, + proposal: ProposalMessageData ) { // Create site access const [pwoSite] = await oneIdentity.createPersonWantsOrg( PersonWantsOrgRole.SITE_ACCESS, centralAccount, toIsoString(startAt), - toIsoString(endAt) + toIsoString(endAt), + proposal.shortCode // CustomProperty04 - We store the proposal short code for the site access to be able to find it later ); logger.logInfo('Site access created in One Identity', { @@ -94,7 +120,7 @@ async function createAccessInOneIdentity( centralAccount, toIsoString(validFrom), toIsoString(validUntil), - pwoSite.UID_PersonWantsOrg // CustomProperty04 + pwoSite.UID_PersonWantsOrg // CustomProperty04 - We store the site access UID for the system access to be able to find it later ); logger.logInfo('System access created in One Identity', { @@ -153,6 +179,61 @@ async function removeAccessFromOneIdentity( }); } +async function createProposalConnection( + oneIdentity: ESSOneIdentity, + uidESet: string, + uidPerson: string +) { + // Check if the connection already exists + // If connection already exists, no need to create it again, reasons could be: + // - The visitor is a member of the proposal + // - The visitor has been added to the proposal in the past + const exists = (await oneIdentity.getProposalPersonConnections(uidESet)).some( + (c) => c.UID_Person === uidPerson + ); + + if (exists) { + logger.logInfo('Connection already exists, skipping', { + uidPerson, + uidESet, + }); + } else { + await oneIdentity.connectPersonToProposal(uidESet, uidPerson); + logger.logInfo('Connection created between proposal and visitor', { + uidPerson, + uidESet, + }); + } +} + +async function removeProposalConnection( + oneIdentity: ESSOneIdentity, + uidESet: string, + uidPerson: string, + oidcSub: string, + proposal: ProposalMessageData +) { + const isMember = collectUsersFromProposalMessage(proposal).some( + (m) => m.oidcSub === oidcSub + ); + + if (isMember) { + logger.logInfo('Visitor is a proposal member, skipping removal', { + uidPerson, + uidESet, + }); + } else { + await oneIdentity.removeConnectionBetweenPersonAndProposal( + uidESet, + uidPerson + ); + logger.logInfo('Connection removed between proposal and visitor', { + uidPerson, + uidESet, + }); + } +} + function toIsoString(date: string | number) { const parsedDate = new Date(date); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts index edb0e506..3a037a22 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.spec.ts @@ -13,9 +13,9 @@ import { ESSOneIdentity } from './ESSOneIdentity'; import { PersonWantsOrg, PersonWantsOrgRole, + OrderState, } from './interfaces/PersonWantsOrg'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; -import { ProposalUser } from '../../scicat/scicatProposal/dto'; const mockOneIdentityApi = { login: jest.fn(), @@ -137,20 +137,22 @@ describe('ESSOneIdentity', () => { { values: { UID_Person: 'person-uid', + CCC_EmployeeSubType: 'ESSSCIENCEUSER', }, }, ]); - const result = await essOneIdentity.getPerson({ - oidcSub: '0000-0000-0000-0000', - }); + const result = await essOneIdentity.getPerson('0000-0000-0000-0000'); expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( 'Person', "CentralAccount='0000-0000-0000-0000'", ['CCC_EmployeeSubType'] ); - expect(result).toEqual({ UID_Person: 'person-uid' }); + expect(result).toEqual({ + UID_Person: 'person-uid', + CCC_EmployeeSubType: 'ESSSCIENCEUSER', + }); }); // The CentralAccount is unique, but the response is an array of entities @@ -159,20 +161,23 @@ describe('ESSOneIdentity', () => { { values: { UID_Person: 'person-1-uid', + CCC_EmployeeSubType: 'ESSSCIENCEUSER', }, }, { values: { UID_Person: 'person-2-uid', + CCC_EmployeeSubType: 'ESSSCIENCEUSER', }, }, ]); - const result = await essOneIdentity.getPerson({ - oidcSub: '0000-0000-0000-0000', - }); + const result = await essOneIdentity.getPerson('0000-0000-0000-0000'); - expect(result).toEqual({ UID_Person: 'person-1-uid' }); + expect(result).toEqual({ + UID_Person: 'person-1-uid', + CCC_EmployeeSubType: 'ESSSCIENCEUSER', + }); }); }); @@ -195,24 +200,11 @@ describe('ESSOneIdentity', () => { }); const result = await essOneIdentity.getPersons([ - { - oidcSub: 'unknown-oidc-sub', - } as ProposalUser, - { - oidcSub: 'known-oidc-sub', - } as ProposalUser, + 'unknown-oidc-sub', + 'known-oidc-sub', ]); - expect(result).toEqual([ - { - oidcSub: 'unknown-oidc-sub', - uidPerson: undefined, - }, - { - oidcSub: 'known-oidc-sub', - uidPerson: 'known-person-uid', - }, - ]); + expect(result).toEqual(['known-person-uid']); }); }); @@ -484,7 +476,7 @@ describe('ESSOneIdentity', () => { }); it('should return empty array when no records found', async () => { - mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); + mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); // No records const result = await essOneIdentity.getPersonWantsOrg('person-uid'); @@ -502,4 +494,128 @@ describe('ESSOneIdentity', () => { expect(result).toEqual([]); }); }); + + describe('hasPersonSiteAccessToProposal', () => { + const uidPerson = 'person-123'; + const proposalUid = 'proposal-abc'; + + it('should return true if person has site access to the proposal', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + CustomProperty04: proposalUid, + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + }, + ]); + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + + expect(mockOneIdentityApi.getEntities).toHaveBeenCalledWith( + 'PersonWantsOrg', + `UID_PersonOrdered='${uidPerson}' AND (DisplayOrg='${PersonWantsOrgRole.SITE_ACCESS}')`, + [ + 'ValidFrom', + 'ValidUntil', + 'OrderState', + 'DisplayOrg', + 'CustomProperty04', + ] + ); + expect(result).toBe(true); + }); + + it('should return false if person does not have site access to the proposal (different proposal)', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + CustomProperty04: 'other-proposal-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + }, + ]); + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + expect(result).toBe(false); + }); + + it('should return false if person does not have site access to the proposal (different role)', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, // Different role + CustomProperty04: proposalUid, + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + }, + ]); + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + expect(result).toBe(false); + }); + + it('should return false if site access is aborted', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + CustomProperty04: proposalUid, + OrderState: OrderState.ABORTED, // Aborted state + } as PersonWantsOrg, + }, + ]); + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + expect(result).toBe(false); + }); + + it('should return false if no PersonWantsOrg records are found', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([]); // No records + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + expect(result).toBe(false); + }); + + it('should return true if person has multiple site access records and one matches', async () => { + mockOneIdentityApi.getEntities.mockResolvedValueOnce([ + { + values: { + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + CustomProperty04: 'other-proposal-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + }, + { + values: { + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + CustomProperty04: proposalUid, + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + }, + ]); + + const result = await essOneIdentity.hasPersonSiteAccessToProposal( + uidPerson, + proposalUid + ); + expect(result).toBe(true); + }); + }); }); diff --git a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts index 8630de73..ad79a121 100644 --- a/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts +++ b/src/queue/consumers/oneidentity/utils/ESSOneIdentity.ts @@ -5,6 +5,7 @@ import { EsetType } from './interfaces/EsetType'; import { Person, UID_Person } from './interfaces/Person'; import { PersonHasESET } from './interfaces/PersonHasESET'; import { + OrderState, PersonWantsOrg, PersonWantsOrgRole, } from './interfaces/PersonWantsOrg'; @@ -14,7 +15,6 @@ import { } from './interfaces/SCProposalSiteAccessResponse'; import { OneIdentityApi } from './OneIdentityApi'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; -import { ProposalUser } from '../../scicat/scicatProposal/dto'; export interface UserPersonConnection { oidcSub: string; @@ -82,30 +82,25 @@ export class ESSOneIdentity { return entities[0]?.values?.UID_ESet; } - public async getPerson( - user: Pick - ): Promise { + public async getPerson(centralAccount: string): Promise { const entities = await this.oneIdentityApi.getEntities( 'Person', - `CentralAccount='${user.oidcSub}'`, + `CentralAccount='${centralAccount}'`, ['CCC_EmployeeSubType'] ); return entities[0]?.values; } - public async getPersons( - users: ProposalUser[] - ): Promise { - return await Promise.all( - users - .filter((user): user is ProposalUser => user !== undefined) - .map(async (user) => { - const uidPerson = (await this.getPerson(user))?.UID_Person; - - return { oidcSub: user.oidcSub, uidPerson }; - }) - ); + public async getPersons(centralAccounts: string[]): Promise { + return ( + await Promise.all( + centralAccounts.map( + async (centralAccount) => + (await this.getPerson(centralAccount))?.UID_Person + ) + ) + ).filter((uidPerson): uidPerson is string => uidPerson !== undefined); } public async connectPersonToProposal( @@ -205,4 +200,20 @@ export class ESSOneIdentity { return entities.map(({ values }) => values); } + + public async hasPersonSiteAccessToProposal( + uidPerson: UID_Person, + proposal: UID_ESet + ): Promise { + const personWantsOrgs = await this.getPersonWantsOrg(uidPerson, [ + PersonWantsOrgRole.SITE_ACCESS, + ]); + + return personWantsOrgs.some( + (pwo) => + pwo.DisplayOrg === PersonWantsOrgRole.SITE_ACCESS && + pwo.CustomProperty04 === proposal && + pwo.OrderState !== OrderState.ABORTED + ); + } } diff --git a/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts b/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts index 7b60bd35..ce180475 100644 --- a/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts +++ b/src/queue/consumers/oneidentity/utils/interfaces/VisitMessage.ts @@ -1,5 +1,8 @@ +import { ProposalMessageData } from '../../../../../models/ProposalMessage'; + export interface VisitMessage { startAt: string; endAt: string; visitorId: string; + proposal: ProposalMessageData; } diff --git a/src/queue/consumers/oneidentity/utils/isVisitMessage.spec.ts b/src/queue/consumers/oneidentity/utils/isVisitMessage.spec.ts new file mode 100644 index 00000000..5f7c0d78 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/isVisitMessage.spec.ts @@ -0,0 +1,58 @@ +import { isVisitMessage } from './isVisitMessage'; + +describe('isVisitMessage', () => { + it('should return false if message is not an object', () => { + const message = 'not an object'; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return false if message is null', () => { + const message = null; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return false if visitorId is undefined', () => { + const message = { + startAt: '2023-01-01T00:00:00Z', + endAt: '2023-01-02T00:00:00Z', + }; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return false if startAt is undefined', () => { + const message = { + visitorId: 'visitor123', + endAt: '2023-01-02T00:00:00Z', + }; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return false if endAt is undefined', () => { + const message = { + visitorId: 'visitor123', + startAt: '2023-01-01T00:00:00Z', + }; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return false if proposal is undefined', () => { + const message = { + visitorId: 'visitor123', + startAt: '2023-01-01T00:00:00Z', + endAt: '2023-01-02T00:00:00Z', + }; + expect(isVisitMessage(message)).toBe(false); + }); + + it('should return true if the message is valid', () => { + const message = { + visitorId: 'visitor123', + startAt: '2023-01-01T00:00:00Z', + endAt: '2023-01-02T00:00:00Z', + proposal: { + shortCode: 'proposal-short-code', + }, + }; + expect(isVisitMessage(message)).toBe(true); + }); +}); diff --git a/src/queue/consumers/oneidentity/utils/isVisitMessage.ts b/src/queue/consumers/oneidentity/utils/isVisitMessage.ts new file mode 100644 index 00000000..ed7cb282 --- /dev/null +++ b/src/queue/consumers/oneidentity/utils/isVisitMessage.ts @@ -0,0 +1,12 @@ +import { VisitMessage } from './interfaces/VisitMessage'; + +export function isVisitMessage(message: any): message is VisitMessage { + return ( + message != null && + typeof message === 'object' && + 'visitorId' in message && + 'startAt' in message && + 'endAt' in message && + 'proposal' in message + ); +} diff --git a/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts b/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts deleted file mode 100644 index 7250b75d..00000000 --- a/src/queue/consumers/oneidentity/utils/validateVisitMessage.spec.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { validateVisitMessage } from './validateVisitMessage'; - -describe('validateVisitMessage', () => { - it('should throw an error if message is not an object', () => { - const message = 'not an object'; - - expect(() => validateVisitMessage(message)).toThrow( - 'Invalid Visit message' - ); - }); - - it('should throw an error if message is null', () => { - const message = null; - - expect(() => validateVisitMessage(message)).toThrow( - 'Invalid Visit message' - ); - }); - - it('should throw an error if visitorId is undefined', () => { - const message = { - startAt: '2023-01-01T00:00:00Z', - endAt: '2023-01-02T00:00:00Z', - }; - - expect(() => validateVisitMessage(message)).toThrow( - 'Invalid Visit message' - ); - }); - - it('should throw an error if startAt is undefined', () => { - const message = { - visitorId: 'visitor123', - endAt: '2023-01-02T00:00:00Z', - }; - - expect(() => validateVisitMessage(message)).toThrow( - 'Invalid Visit message' - ); - }); - - it('should throw an error if endAt is undefined', () => { - const message = { - visitorId: 'visitor123', - startAt: '2023-01-01T00:00:00Z', - }; - - expect(() => validateVisitMessage(message)).toThrow( - 'Invalid Visit message' - ); - }); - - it('should return the message if visitorId, startAt, and endAt are defined', () => { - const message = { - visitorId: 'visitor123', - startAt: '2023-01-01T00:00:00Z', - endAt: '2023-01-02T00:00:00Z', - }; - - expect(validateVisitMessage(message)).toEqual(message); - }); -}); diff --git a/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts b/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts deleted file mode 100644 index f532889a..00000000 --- a/src/queue/consumers/oneidentity/utils/validateVisitMessage.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { VisitMessage } from './interfaces/VisitMessage'; - -export function validateVisitMessage(message: any): VisitMessage | never { - if ( - message?.visitorId === undefined || - message?.startAt === undefined || - message?.endAt === undefined - ) { - throw new Error('Invalid Visit message'); - } - - return message; -} From 839a345f4b637226af25e0dfdf7cd8e665ab33b8 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 17 Jul 2025 11:34:16 +0200 Subject: [PATCH 159/176] =?UTF-8?q?feat:=20Add=20metadata=20field=20to=20p?= =?UTF-8?q?roposal=20DTOs=20and=20implement=20instruments=20o=E2=80=A6=20(?= =?UTF-8?q?#577)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-commit | 6 ++--- .../upsertProposalInScicat.ts | 25 +++++++++++++++++++ .../consumers/scicat/scicatProposal/dto.ts | 2 ++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 22e8b022..08404245 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,2 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx lint-staged --shell +#!/bin/sh +npx --no-install lint-staged \ No newline at end of file diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 2c81043a..215b697c 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -1,5 +1,6 @@ import { logger } from '@user-office-software/duo-logger'; +import { Instrument } from '../../../../../models/ProposalMessage'; import { ValidProposalMessageData } from '../../../utils/validateProposalMessage'; import { CreateProposalDto, UpdateProposalDto } from '../dto'; @@ -64,6 +65,7 @@ const getCreateProposalDto = (proposalMessage: ValidProposalMessageData) => { startTime: new Date(), endTime: new Date(), MeasurementPeriodList: [], + metadata: createInstrumentsObject(proposalMessage.instruments), }; return createProposalDto; @@ -84,11 +86,34 @@ const getUpdateProposalDto = (proposalMessage: ValidProposalMessageData) => { startTime: new Date(), endTime: new Date(), MeasurementPeriodList: [], + metadata: createInstrumentsObject(proposalMessage.instruments), }; return updateProposalDto; }; +const createInstrumentsObject = (instruments: Instrument[]) => { + const instrumentsObject: Record< + string, + { value: string | number; unit: string } + > = {}; + + instruments.forEach((instrument, index) => { + if (instrument) { + instrumentsObject[`instrument_${index + 1}`] = { + value: instrument.shortCode, + unit: '', + }; + instrumentsObject[`instrument_time_${index + 1}`] = { + value: instrument.allocatedTime / 86400 || NaN, + unit: 'days', + }; + } + }); + + return instrumentsObject; +}; + const createProposal = async ( proposalMessage: ValidProposalMessageData, sciCatAccessToken: string diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index 04e90535..5380e2aa 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -13,6 +13,7 @@ export type CreateProposalDto = { startTime?: Date; endTime?: Date; MeasurementPeriodList: any[]; + metadata?: Record; }; export type UpdateProposalDto = { @@ -29,6 +30,7 @@ export type UpdateProposalDto = { startTime?: Date; endTime?: Date; MeasurementPeriodList?: any[]; + metadata?: Record; }; export interface Institution { From c5861bbda6483923f1ee3a1977c90b9573e88441 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Sep 2025 11:51:11 +0000 Subject: [PATCH 160/176] build(deps): bump axios from 1.8.2 to 1.12.0 Bumps [axios](https://github.com/axios/axios) from 1.8.2 to 1.12.0. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.8.2...v1.12.0) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 255 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 176 insertions(+), 81 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f5bb036..f8c57a56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.8.2", + "axios": "^1.12.0", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.2", @@ -2294,7 +2294,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", @@ -2312,13 +2313,13 @@ } }, "node_modules/axios": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", + "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -2590,6 +2591,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2857,6 +2871,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3114,6 +3129,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -3196,6 +3212,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/dynamic-dedupe": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", @@ -3350,12 +3380,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3369,10 +3397,10 @@ } }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3381,14 +3409,15 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -4186,12 +4215,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -4307,15 +4339,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4332,6 +4370,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -4448,11 +4499,12 @@ } }, "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" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4503,6 +4555,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4511,9 +4564,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4525,7 +4579,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -6385,6 +6438,15 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/matrix-events-sdk": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz", @@ -10612,12 +10674,12 @@ } }, "axios": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", + "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", "requires": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -10827,6 +10889,15 @@ "set-function-length": "^1.2.1" } }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -11222,6 +11293,16 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "dynamic-dedupe": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", @@ -11345,12 +11426,9 @@ } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors": { "version": "1.3.0", @@ -11358,23 +11436,22 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, "es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "requires": { "es-errors": "^1.3.0" } }, "es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "requires": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" } }, "es-shim-unscopables": { @@ -11962,12 +12039,14 @@ } }, "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, @@ -12042,15 +12121,20 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, "get-package-type": { @@ -12058,6 +12142,15 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -12135,12 +12228,9 @@ } }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "graceful-fs": { "version": "4.2.11", @@ -12177,18 +12267,18 @@ "has-proto": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "requires": { "has-symbols": "^1.0.3" } @@ -13461,6 +13551,11 @@ "tmpl": "1.0.5" } }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "matrix-events-sdk": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz", diff --git a/package.json b/package.json index 0e0b8c54..f1291f4b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "dependencies": { "@user-office-software/duo-logger": "^2.2.1", "@user-office-software/duo-message-broker": "^1.7.0", - "axios": "^1.8.2", + "axios": "^1.12.0", "dotenv": "^16.4.5", "envalid": "^8.0.0", "express": "^4.21.2", From a51c5c7ff7057cec1480cc2f55d27b9fc3c93f19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Sep 2025 11:56:36 +0000 Subject: [PATCH 161/176] build(deps): bump brace-expansion Bumps and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together. Updates `brace-expansion` from 1.1.11 to 1.1.12 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) Updates `brace-expansion` from 2.0.1 to 2.0.2 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect - dependency-name: brace-expansion dependency-version: 2.0.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 52 +++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8c57a56..aee35af0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1804,10 +1804,11 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1913,10 +1914,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2475,9 +2477,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4090,10 +4093,11 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -10328,9 +10332,9 @@ } }, "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -10392,9 +10396,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -10808,9 +10812,9 @@ } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11942,9 +11946,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" From 1d20284804b1eddae2adb18de271d505b5198951 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Fri, 19 Sep 2025 14:39:25 +0200 Subject: [PATCH 162/176] providing visa to data access users and visitors --- src/models/ProposalMessage.ts | 2 ++ .../visa/consumerCallbacks/syncVisaProposal.ts | 10 ++++++---- .../consumers/visa/utils/sanitizeProposalMessage.ts | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index b61dfb02..a075c42a 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -29,6 +29,8 @@ export type ProposalMessageData = { newStatus?: ProposalStatusDefaultShortCodes; submitted: boolean; members: ProposalUser[]; + dataAccessUsers: ProposalUser[]; + visitors: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; }; diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 824bb39a..0dd0b74d 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -104,13 +104,15 @@ export async function syncVisaProposal( }); } - const proposersAndCoproposers = [ + const experimenters = [ ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, + ...proposalWithNewStatus.dataAccessUsers, + ...proposalWithNewStatus.visitors, ]; - // Create new user for the Principal Investigator and Coproposers - for (const member of proposersAndCoproposers) { + // Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors + for (const member of experimenters) { await createUserAndAssignToExperiment( member, proposalWithNewStatus.proposalPk @@ -120,6 +122,6 @@ export async function syncVisaProposal( // Delete the users that are saved in the experiment users table, but not in the Proposal Payload await deleteMissingUsersFromExperiment( proposalWithNewStatus.proposalPk, - proposersAndCoproposers + experimenters ); } diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts index 053354ce..648cc0dd 100644 --- a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -10,6 +10,16 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { oidcSub: member.oidcSub.toLowerCase(), email: member.email.toLowerCase(), })), + dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({ + ...user, + oidcSub: user.oidcSub.toLowerCase(), + email: user.email.toLowerCase(), + })), + visitors: proposalMessage.visitors.map((visitor) => ({ + ...visitor, + oidcSub: visitor.oidcSub.toLowerCase(), + email: visitor.email.toLowerCase(), + })), proposer: proposalMessage.proposer ? { ...proposalMessage.proposer, From b36b46939106d480794f9ef101eeb245c222f101 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan <132274772+yoganandaness@users.noreply.github.com> Date: Fri, 3 Oct 2025 14:12:06 +0200 Subject: [PATCH 163/176] providing visa to data access users and visitors (#605) --- src/models/ProposalMessage.ts | 2 ++ .../visa/consumerCallbacks/syncVisaProposal.ts | 10 ++++++---- .../consumers/visa/utils/sanitizeProposalMessage.ts | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index b61dfb02..a075c42a 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -29,6 +29,8 @@ export type ProposalMessageData = { newStatus?: ProposalStatusDefaultShortCodes; submitted: boolean; members: ProposalUser[]; + dataAccessUsers: ProposalUser[]; + visitors: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; }; diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 824bb39a..0dd0b74d 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -104,13 +104,15 @@ export async function syncVisaProposal( }); } - const proposersAndCoproposers = [ + const experimenters = [ ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, + ...proposalWithNewStatus.dataAccessUsers, + ...proposalWithNewStatus.visitors, ]; - // Create new user for the Principal Investigator and Coproposers - for (const member of proposersAndCoproposers) { + // Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors + for (const member of experimenters) { await createUserAndAssignToExperiment( member, proposalWithNewStatus.proposalPk @@ -120,6 +122,6 @@ export async function syncVisaProposal( // Delete the users that are saved in the experiment users table, but not in the Proposal Payload await deleteMissingUsersFromExperiment( proposalWithNewStatus.proposalPk, - proposersAndCoproposers + experimenters ); } diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts index 053354ce..648cc0dd 100644 --- a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -10,6 +10,16 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { oidcSub: member.oidcSub.toLowerCase(), email: member.email.toLowerCase(), })), + dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({ + ...user, + oidcSub: user.oidcSub.toLowerCase(), + email: user.email.toLowerCase(), + })), + visitors: proposalMessage.visitors.map((visitor) => ({ + ...visitor, + oidcSub: visitor.oidcSub.toLowerCase(), + email: visitor.email.toLowerCase(), + })), proposer: proposalMessage.proposer ? { ...proposalMessage.proposer, From a606a3ce3137839d3fe721dda2f0e96dc072ab7c Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 3 Oct 2025 15:02:16 +0200 Subject: [PATCH 164/176] feat: Add instrument ID handling to proposal DTOs and update proposal creation logic (#614) --- src/models/ProposalMessage.ts | 13 ++++ .../upsertProposalInScicat.ts | 63 +++++++++++-------- .../consumers/scicat/scicatProposal/dto.ts | 2 + 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index a075c42a..f33a8c2a 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -6,6 +6,19 @@ export type Instrument = { allocatedTime: number; }; +export interface InstrumentDto { + _id: string; + id: string; + name: string; + pid: string; + uniqueName: string; + createdBy: string; + updatedBy?: string; + createdAt: string; + updatedAt?: string; + customMetadata: Record; +} + export enum ProposalStatusDefaultShortCodes { DRAFT = 'DRAFT', FEASIBILITY_REVIEW = 'FEASIBILITY_REVIEW', diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 215b697c..63f0bbea 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -1,6 +1,9 @@ import { logger } from '@user-office-software/duo-logger'; -import { Instrument } from '../../../../../models/ProposalMessage'; +import { + Instrument, + InstrumentDto, +} from '../../../../../models/ProposalMessage'; import { ValidProposalMessageData } from '../../../utils/validateProposalMessage'; import { CreateProposalDto, UpdateProposalDto } from '../dto'; @@ -61,11 +64,12 @@ const getCreateProposalDto = (proposalMessage: ValidProposalMessageData) => { lastname: proposalMessage.proposer.lastName, abstract: proposalMessage.abstract, ownerGroup: proposalMessage.shortCode, + instrumentIds: [], accessGroups: [], startTime: new Date(), endTime: new Date(), MeasurementPeriodList: [], - metadata: createInstrumentsObject(proposalMessage.instruments), + metadata: {}, }; return createProposalDto; @@ -82,38 +86,17 @@ const getUpdateProposalDto = (proposalMessage: ValidProposalMessageData) => { lastname: proposalMessage.proposer.lastName, abstract: proposalMessage.abstract, ownerGroup: proposalMessage.shortCode, + instrumentIds: [], accessGroups: [], startTime: new Date(), endTime: new Date(), MeasurementPeriodList: [], - metadata: createInstrumentsObject(proposalMessage.instruments), + metadata: {}, }; return updateProposalDto; }; -const createInstrumentsObject = (instruments: Instrument[]) => { - const instrumentsObject: Record< - string, - { value: string | number; unit: string } - > = {}; - - instruments.forEach((instrument, index) => { - if (instrument) { - instrumentsObject[`instrument_${index + 1}`] = { - value: instrument.shortCode, - unit: '', - }; - instrumentsObject[`instrument_time_${index + 1}`] = { - value: instrument.allocatedTime / 86400 || NaN, - unit: 'days', - }; - } - }); - - return instrumentsObject; -}; - const createProposal = async ( proposalMessage: ValidProposalMessageData, sciCatAccessToken: string @@ -124,6 +107,13 @@ const createProposal = async ( logger.logInfo('POST', { url }); logger.logInfo('Proposal data', { proposalData: createProposalDto }); + // RabbitMQ message only provides shortCodes (instrument names). + // To persist proposals with proper references, we resolve those shortCodes to + // actual Instrument IDs from SciCat and store the instrumentIds in the record. + createProposalDto.instrumentIds = await getInstrumentIds( + proposalMessage.instruments + ); + const createProposalResponse = await request(url, { method: 'POST', body: JSON.stringify(createProposalDto), @@ -147,6 +137,12 @@ const updateProposal = async ( const url = `${sciCatBaseUrl}/Proposals/${proposalMessage.shortCode}`; const updateProposalDto = getUpdateProposalDto(proposalMessage); + // RabbitMQ message only provides shortCodes (instrument names). + // To persist proposals with proper references, we resolve those shortCodes to + // actual Instrument IDs from SciCat and store the instrumentIds in the record. + updateProposalDto.instrumentIds = await getInstrumentIds( + proposalMessage.instruments + ); const updateProposalResponse = await request(url, { method: 'PATCH', body: JSON.stringify(updateProposalDto), @@ -197,6 +193,23 @@ const checkProposalExists = async ( } }; +const getInstrumentIds = async (instruments: Instrument[]) => { + const sciCatAccessToken = await getSciCatAccessToken(); + const shortCodes = JSON.stringify(instruments.map((inst) => inst.shortCode)); + + const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"$in":${shortCodes}}}}`; + + const getInstrumentsResponse = await request(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${sciCatAccessToken}`, + }, + }); + + return getInstrumentsResponse.map((inst) => inst.pid); +}; + const upsertProposalInScicat = async ( proposalMessage: ValidProposalMessageData ) => { diff --git a/src/queue/consumers/scicat/scicatProposal/dto.ts b/src/queue/consumers/scicat/scicatProposal/dto.ts index 5380e2aa..8aa79b07 100644 --- a/src/queue/consumers/scicat/scicatProposal/dto.ts +++ b/src/queue/consumers/scicat/scicatProposal/dto.ts @@ -12,6 +12,7 @@ export type CreateProposalDto = { abstract: string; startTime?: Date; endTime?: Date; + instrumentIds: string[]; MeasurementPeriodList: any[]; metadata?: Record; }; @@ -29,6 +30,7 @@ export type UpdateProposalDto = { abstract?: string; startTime?: Date; endTime?: Date; + instrumentIds: string[]; MeasurementPeriodList?: any[]; metadata?: Record; }; From 55c400748442677c3f73ad777c29cc4aa731c396 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 8 Oct 2025 18:48:56 +0200 Subject: [PATCH 165/176] feat: Improve instrument ID retrieval by using individual requests and error handling (#618) --- .../upsertProposalInScicat.ts | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 63f0bbea..8b47c59a 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -195,19 +195,32 @@ const checkProposalExists = async ( const getInstrumentIds = async (instruments: Instrument[]) => { const sciCatAccessToken = await getSciCatAccessToken(); - const shortCodes = JSON.stringify(instruments.map((inst) => inst.shortCode)); + const instrumentNames = instruments.map((inst) => inst.shortCode); - const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"$in":${shortCodes}}}}`; + const instrumentIds = []; - const getInstrumentsResponse = await request(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${sciCatAccessToken}`, - }, - }); + for (const name of instrumentNames) { + const instrumentNameLowerCase = encodeURIComponent(name.toLowerCase()); + const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"like":"${instrumentNameLowerCase}"}}}`; + + try { + const res = await request(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${sciCatAccessToken}`, + }, + }); + + instrumentIds.push(res[0].pid); + } catch (error) { + logger.logError(`Error fetching instrument ID from scicat for ${name}`, { + error, + }); + } + } - return getInstrumentsResponse.map((inst) => inst.pid); + return instrumentIds; }; const upsertProposalInScicat = async ( From 3c53e49aefbc54a527f0260e8e0381c8e8ff14eb Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Tue, 14 Oct 2025 12:11:09 +0200 Subject: [PATCH 166/176] fix: null handler for data access user and visitors --- src/models/ProposalMessage.ts | 4 ++-- .../consumerCallbacks/syncVisaProposal.ts | 4 ++-- .../visa/utils/sanitizeProposalMessage.ts | 24 +++++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/models/ProposalMessage.ts b/src/models/ProposalMessage.ts index a075c42a..e2366866 100644 --- a/src/models/ProposalMessage.ts +++ b/src/models/ProposalMessage.ts @@ -29,8 +29,8 @@ export type ProposalMessageData = { newStatus?: ProposalStatusDefaultShortCodes; submitted: boolean; members: ProposalUser[]; - dataAccessUsers: ProposalUser[]; - visitors: ProposalUser[]; + dataAccessUsers?: ProposalUser[]; + visitors?: ProposalUser[]; proposer?: ProposalUser; instruments?: Instrument[]; }; diff --git a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts index 0dd0b74d..cbb79e22 100644 --- a/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts +++ b/src/queue/consumers/visa/consumerCallbacks/syncVisaProposal.ts @@ -107,8 +107,8 @@ export async function syncVisaProposal( const experimenters = [ ...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []), ...proposalWithNewStatus.members, - ...proposalWithNewStatus.dataAccessUsers, - ...proposalWithNewStatus.visitors, + ...(proposalWithNewStatus.dataAccessUsers || []), + ...(proposalWithNewStatus.visitors || []), ]; // Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors diff --git a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts index 648cc0dd..393ddf3c 100644 --- a/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts +++ b/src/queue/consumers/visa/utils/sanitizeProposalMessage.ts @@ -10,16 +10,20 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) { oidcSub: member.oidcSub.toLowerCase(), email: member.email.toLowerCase(), })), - dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({ - ...user, - oidcSub: user.oidcSub.toLowerCase(), - email: user.email.toLowerCase(), - })), - visitors: proposalMessage.visitors.map((visitor) => ({ - ...visitor, - oidcSub: visitor.oidcSub.toLowerCase(), - email: visitor.email.toLowerCase(), - })), + dataAccessUsers: proposalMessage.dataAccessUsers + ? proposalMessage.dataAccessUsers.map((user) => ({ + ...user, + oidcSub: user.oidcSub.toLowerCase(), + email: user.email.toLowerCase(), + })) + : [], + visitors: proposalMessage.visitors + ? proposalMessage.visitors.map((visitor) => ({ + ...visitor, + oidcSub: visitor.oidcSub.toLowerCase(), + email: visitor.email.toLowerCase(), + })) + : [], proposer: proposalMessage.proposer ? { ...proposalMessage.proposer, From f8b37464ede9ba4375fce76733bab80d6421a778 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 00:13:28 +0000 Subject: [PATCH 167/176] build(deps-dev): bump js-yaml from 3.14.1 to 3.14.2 Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.1 to 3.14.2. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 3.14.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index aee35af0..f39edfdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -183,6 +183,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", @@ -905,10 +906,11 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1672,6 +1674,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.16.1", @@ -2026,6 +2029,7 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2516,6 +2520,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001503", "electron-to-chromium": "^1.4.431", @@ -3482,6 +3487,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -3537,6 +3543,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -5164,6 +5171,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -5721,10 +5729,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7268,6 +7277,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -9067,6 +9077,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", "dev": true, + "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", @@ -9608,9 +9619,9 @@ } }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -10264,6 +10275,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, + "peer": true, "requires": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.16.1", @@ -10474,7 +10486,8 @@ "acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -10833,6 +10846,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, + "peer": true, "requires": { "caniuse-lite": "^1.0.30001503", "electron-to-chromium": "^1.4.431", @@ -11499,6 +11513,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -11557,6 +11572,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "peer": true, "requires": {} }, "eslint-import-resolver-node": { @@ -12674,6 +12690,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "peer": true, "requires": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -13102,9 +13119,9 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -14145,7 +14162,8 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true + "dev": true, + "peer": true }, "prettier-linter-helpers": { "version": "1.0.0", From 810ac4f9b2060f9dbcf1c8e29f5c20648899bb83 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 4 Dec 2025 14:26:47 +0100 Subject: [PATCH 168/176] fix: update instrument name filter to use case-insensitive matching (#630) --- .../scicatProposal/consumerCallbacks/upsertProposalInScicat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 8b47c59a..5d3f3001 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -201,7 +201,7 @@ const getInstrumentIds = async (instruments: Instrument[]) => { for (const name of instrumentNames) { const instrumentNameLowerCase = encodeURIComponent(name.toLowerCase()); - const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"like":"${instrumentNameLowerCase}"}}}`; + const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"ilike":"${instrumentNameLowerCase}"}}}`; try { const res = await request(url, { From 9cfa490e8a6d054f077b08226a8aa62e67ec7425 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Thu, 11 Dec 2025 16:32:53 +0100 Subject: [PATCH 169/176] feat: include data access users in One Identity sync (#631) --- .../OneIdentityIntegrationQueueConsumer.ts | 4 +- src/queue/consumers/oneidentity/README.md | 8 +-- ...osalAndMembersToOneIdentityHandler.spec.ts | 56 ++++++++++----- ...cProposalAndMembersToOneIdentityHandler.ts | 6 +- .../syncVisitToOneIdentityHandler.spec.ts | 8 +-- .../syncVisitToOneIdentityHandler.ts | 1 + .../collectUsersFromProposalMessage.spec.ts | 72 +++++++++++++++++++ .../utils/collectUsersFromProposalMessage.ts | 10 +-- 8 files changed, 133 insertions(+), 32 deletions(-) create mode 100644 src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts diff --git a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts index 7f03eb86..0dfaacbb 100644 --- a/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts +++ b/src/queue/consumers/oneidentity/OneIdentityIntegrationQueueConsumer.ts @@ -2,13 +2,13 @@ import { logger } from '@user-office-software/duo-logger'; import { ConsumerCallback } from '@user-office-software/duo-message-broker'; import { isAxiosError } from 'axios'; +import { QueueConsumer } from '../QueueConsumer'; import { syncProposalAndMembersToOneIdentityHandler } from './consumerCallbacks/syncProposalAndMembersToOneIdentityHandler'; import { syncVisitToOneIdentityHandler } from './consumerCallbacks/syncVisitToOneIdentityHandler'; +import { isVisitMessage } from './utils/isVisitMessage'; import { validateProposalMessage } from './utils/validateProposalMessage'; import { Event } from '../../../models/Event'; -import { QueueConsumer } from '../QueueConsumer'; import { hasTriggeringType } from '../utils/hasTriggeringType'; -import { isVisitMessage } from './utils/isVisitMessage'; const ONE_IDENTITY_INTEGRATION_QUEUE_NAME = process.env.ONE_IDENTITY_INTEGRATION_QUEUE_NAME || ''; diff --git a/src/queue/consumers/oneidentity/README.md b/src/queue/consumers/oneidentity/README.md index 3345b5fa..48d8cf10 100644 --- a/src/queue/consumers/oneidentity/README.md +++ b/src/queue/consumers/oneidentity/README.md @@ -107,7 +107,7 @@ The handler manages site and system access in One Identity based on visit creati ## One Identity Proposal and Member Sync ### Purpose -The handler synchronizes proposal information and its members (proposer and co-proposers) with One Identity. This ensures that proposals and their associated personnel are accurately represented and connected in One Identity. +The handler synchronizes proposal information and its members (proposer, co-proposers and data access users) with One Identity. This ensures that proposals and their associated personnel are accurately represented and connected in One Identity. ### Process Overview - Triggered by `PROPOSAL_ACCEPTED` and `PROPOSAL_UPDATED` events. @@ -120,18 +120,18 @@ The handler synchronizes proposal information and its members (proposer and co-p - If `PROPOSAL_UPDATED` event: - If the proposal does not exist, the process logs this information and concludes, as there's no existing record to update. - **User Synchronization**: - - Collects all unique user OIDC sub identifiers from the proposal message (proposer and members). + - Collects all unique user OIDC sub identifiers from the proposal message (proposer, members and data access users). - Retrieves the corresponding `UID_Person` for these users from One Identity. - Logs an error if any users from the proposal message are not found in One Identity. - **Connection Management**: - Fetches all existing `PersonHasESET` connections for the identified proposal (`UID_ESet`). - **Remove Old Connections**: - - Identifies connections in One Identity for persons who are no longer part of the current proposal members list. + - Identifies connections in One Identity for persons who are no longer part of the current proposal members/dataAccessUsers list. - Before removing a connection, it checks if the person has "site access" to the proposal (e.g., as a visitor). - If the person has site access, their connection to the proposal is *not* removed. - Otherwise, the outdated connection is removed. - **Add New Connections**: - - Identifies persons in the current proposal members list who are not yet connected to the proposal in One Identity. + - Identifies persons in the current proposal members/dataAccessUsers list who are not yet connected to the proposal in One Identity. - Creates new `PersonHasESET` connections for these persons. - **Logout**: Ensures logout from One Identity in a `finally` block, regardless of success or failure. diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index ce45e904..7ba30e25 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -8,6 +8,7 @@ import { logger } from '@user-office-software/duo-logger'; import { syncProposalAndMembersToOneIdentityHandler } from './syncProposalAndMembersToOneIdentityHandler'; import { Event } from '../../../../models/Event'; import { ProposalMessageData } from '../../../../models/ProposalMessage'; +import { ProposalUser } from '../../scicat/scicatProposal/dto'; import { ESSOneIdentity } from '../utils/ESSOneIdentity'; import { UID_ESet } from '../utils/interfaces/Eset'; import { PersonHasESET } from '../utils/interfaces/PersonHasESET'; @@ -40,7 +41,7 @@ const setupMocks = (data: { data.getProposalPersonConnections ?? [] ); mockOneIdentity.getPersons.mockResolvedValueOnce( - data.getPersons ?? ['proposer-uid', 'member-uid'] + data.getPersons ?? ['proposer-uid', 'member-uid', 'data-access-uid'] ); if (data.hasPersonSiteAccessToProposalConfig) { mockOneIdentity.hasPersonSiteAccessToProposal.mockImplementation( @@ -57,6 +58,8 @@ const proposalMessage = { shortCode: 'shortCode', proposer: { oidcSub: 'proposer-oidc-sub' }, members: [{ oidcSub: 'member-oidc-sub' }], + dataAccessUsers: [{ oidcSub: 'data-access-oidc-sub' } as ProposalUser], + visitors: [] as ProposalUser[], } as ProposalMessageData; describe('oneIdentityIntegrationHandler', () => { @@ -81,7 +84,7 @@ describe('oneIdentityIntegrationHandler', () => { expect( mockOneIdentity.removeConnectionBetweenPersonAndProposal ).toHaveBeenCalledTimes(0); - expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(3); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenNthCalledWith( 1, 'proposal-UID_ESet', @@ -92,10 +95,15 @@ describe('oneIdentityIntegrationHandler', () => { 'proposal-UID_ESet', 'member-uid' ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenNthCalledWith( + 3, + 'proposal-UID_ESet', + 'data-access-uid' + ); expect(logger.logError).not.toHaveBeenCalled(); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', - uidPersons: ['proposer-uid', 'member-uid'], + uidPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], }); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -104,7 +112,7 @@ describe('oneIdentityIntegrationHandler', () => { setupMocks({ getProposal: undefined, getProposalPersonConnections: [], - getPersons: ['proposer-uid'], + getPersons: ['proposer-oidc-sub'], }); await syncProposalAndMembersToOneIdentityHandler( @@ -115,8 +123,8 @@ describe('oneIdentityIntegrationHandler', () => { expect(logger.logError).toHaveBeenCalledWith( 'Not all users found in One Identity (Investigate). Missing central accounts:', { - centralAccounts: ['member-oidc-sub', 'proposer-oidc-sub'], - foundUsersInOneIdentity: ['proposer-uid'], + missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], + foundUsersInOneIdentity: ['proposer-oidc-sub'], } ); }); @@ -159,18 +167,22 @@ describe('oneIdentityIntegrationHandler', () => { expect(mockOneIdentity.createProposal).not.toHaveBeenCalled(); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes( - 1 + 2 ); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( 'proposal-UID_ESet', 'member-uid' ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'data-access-uid' + ); expect( mockOneIdentity.removeConnectionBetweenPersonAndProposal ).not.toHaveBeenCalled(); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', - uidPersons: ['proposer-uid', 'member-uid'], + uidPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], }); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -209,14 +221,18 @@ describe('oneIdentityIntegrationHandler', () => { expect( mockOneIdentity.removeConnectionBetweenPersonAndProposal ).toHaveBeenCalledWith('proposal-UID_ESet', 'old-member-uid'); - expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( 'proposal-UID_ESet', 'member-uid' ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'data-access-uid' + ); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', - uidPersons: ['proposer-uid', 'member-uid'], + uidPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], }); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -255,14 +271,18 @@ describe('oneIdentityIntegrationHandler', () => { mockOneIdentity.removeConnectionBetweenPersonAndProposal ).toHaveBeenCalledTimes(0); // No connections should be removed in this specific setup - expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); // 'member-uid' is new + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( 'proposal-UID_ESet', 'member-uid' ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'data-access-uid' + ); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', - uidPersons: ['proposer-uid', 'member-uid'], + uidPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], }); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); @@ -284,7 +304,7 @@ describe('oneIdentityIntegrationHandler', () => { UID_Person: 'visitor-member-to-keep-uid', // Keep (not in proposal, but has site access) }, ], - getPersons: ['proposer-uid', 'member-uid'], // Current members in the proposal message + getPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], // Current members in the proposal message hasPersonSiteAccessToProposalConfig: { 'old-member-to-remove-uid': false, 'visitor-member-to-keep-uid': true, @@ -292,7 +312,7 @@ describe('oneIdentityIntegrationHandler', () => { }); await syncProposalAndMembersToOneIdentityHandler( - proposalMessage, // Contains proposer-uid and member-uid + proposalMessage, Event.PROPOSAL_UPDATED ); @@ -317,15 +337,19 @@ describe('oneIdentityIntegrationHandler', () => { // Check additions // 'member-uid' is in proposalMessage.members and not in initial connections that are kept - expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( 'proposal-UID_ESet', 'member-uid' ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'data-access-uid' + ); expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { uidESet: 'proposal-UID_ESet', - uidPersons: ['proposer-uid', 'member-uid'], + uidPersons: ['proposer-uid', 'member-uid', 'data-access-uid'], }); expect(mockOneIdentity.logout).toHaveBeenCalled(); }); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index 21d84957..481814ba 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -80,10 +80,14 @@ async function handleConnectionsBetweenProposalAndPersons( // Log an error if not all users are found in One Identity to be able to investigate if (uidPersons.length !== centralAccounts.length) { + const missingCentralAccounts = centralAccounts.filter( + (account) => !uidPersons.includes(account) + ); + logger.logError( 'Not all users found in One Identity (Investigate). Missing central accounts:', { - centralAccounts, + missingCentralAccounts, foundUsersInOneIdentity: uidPersons, } ); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts index bcd45b9c..ce60cc3c 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts @@ -50,10 +50,8 @@ const visitMessage: VisitMessage = { endAt: '2023-01-10T00:00:00.000Z', proposal: { shortCode: 'proposal-short-code', - members: [ - { oidcSub: 'member-oidc-sub' }, - { oidcSub: 'visitor-oidc-sub' }, // Visitor is also a member - ], + members: [{ oidcSub: 'member-oidc-sub' }], + dataAccessUsers: [{ oidcSub: 'visitor-oidc-sub' }], // Visitor is also a data access user } as ProposalMessageData, }; @@ -61,7 +59,7 @@ const visitMessageVisitorNotMember: VisitMessage = { ...visitMessage, proposal: { ...visitMessage.proposal, - members: [{ oidcSub: 'member-oidc-sub' }], // Visitor is NOT a member + dataAccessUsers: [], // remove visitor from data access users } as ProposalMessageData, }; diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts index 5479bc95..781f1d7b 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts @@ -218,6 +218,7 @@ async function removeProposalConnection( ); if (isMember) { + // [proposer, members, dataAccessUsers] should always have access to the proposal logger.logInfo('Visitor is a proposal member, skipping removal', { uidPerson, uidESet, diff --git a/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts b/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts new file mode 100644 index 00000000..690c9866 --- /dev/null +++ b/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts @@ -0,0 +1,72 @@ +import { collectUsersFromProposalMessage } from './collectUsersFromProposalMessage'; +import { ProposalMessageData } from '../../../models/ProposalMessage'; +import { ProposalUser } from '../scicat/scicatProposal/dto'; + +describe('collectUsersFromProposalMessage', () => { + const createUser = (id: number, suffix: string): ProposalUser => ({ + id, + firstName: `first-${suffix}`, + lastName: `last-${suffix}`, + email: `${suffix}@example.com`, + oidcSub: `oidc-${suffix}`, + }); + + const createBaseMessage = ( + overrides: Partial = {} + ): ProposalMessageData => ({ + proposalPk: 1, + shortCode: 'short', + title: 'title', + abstract: 'abstract', + callId: 2, + submitted: true, + members: [], + ...overrides, + }); + + it('returns members, proposer, and data access users in order', () => { + const member = createUser(1, 'member'); + const proposer = createUser(2, 'proposer'); + const dataAccessUser = createUser(3, 'data'); + + const message = createBaseMessage({ + members: [member], + proposer, + dataAccessUsers: [dataAccessUser], + }); + + const result = collectUsersFromProposalMessage(message); + + expect(result).toEqual([member, proposer, dataAccessUser]); + }); + + it('filters out undefined entries', () => { + const member = createUser(1, 'member'); + + const message = createBaseMessage({ + members: [member], + proposer: undefined, + dataAccessUsers: [undefined as unknown as ProposalUser], + }); + + const result = collectUsersFromProposalMessage(message); + + expect(result).toEqual([member]); + }); + + it('handles missing dataAccessUsers by treating it as empty', () => { + const member = createUser(1, 'member'); + const proposer = createUser(2, 'proposer'); + + const message = { + ...createBaseMessage({ + members: [member], + proposer, + }), + } as ProposalMessageData; + + const result = collectUsersFromProposalMessage(message); + + expect(result).toEqual([member, proposer]); + }); +}); diff --git a/src/queue/consumers/utils/collectUsersFromProposalMessage.ts b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts index a711dab1..f2dfa3ce 100644 --- a/src/queue/consumers/utils/collectUsersFromProposalMessage.ts +++ b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts @@ -1,10 +1,12 @@ import { ProposalMessageData } from '../../../models/ProposalMessage'; import { ProposalUser } from '../scicat/scicatProposal/dto'; -export function collectUsersFromProposalMessage( - proposalMessage: ProposalMessageData -): ProposalUser[] { - return [...proposalMessage.members, proposalMessage.proposer].filter( +export function collectUsersFromProposalMessage({ + members, + proposer, + dataAccessUsers = [], +}: ProposalMessageData): ProposalUser[] { + return [...members, proposer, ...dataAccessUsers].filter( (user): user is ProposalUser => user !== undefined ); } From 34bee1f9d3e09414b1d3b380cbbc116bee680cc2 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 22 Jan 2026 15:30:05 +0100 Subject: [PATCH 170/176] fix: update instrument ID fetching to use encoded filter string (#633) --- .../consumerCallbacks/proposalFoldersCreation.spec.ts | 2 +- .../consumerCallbacks/upsertProposalInScicat.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts index 28ade264..8c5d6f47 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/proposalFoldersCreation.spec.ts @@ -85,7 +85,7 @@ describe('proposalFoldersCreation', () => { expect(exec).toHaveBeenCalledTimes(1); expect(exec).toHaveBeenCalledWith( - 'command shortcode 2025 shortCode group_prefix_shortCode test.proposer@email.com test.member@email.com', + 'command shortcode 2026 shortCode group_prefix_shortCode test.proposer@email.com test.member@email.com', expect.any(Function) ); }); diff --git a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts index 5d3f3001..0e1d5ade 100644 --- a/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts +++ b/src/queue/consumers/scicat/scicatProposal/consumerCallbacks/upsertProposalInScicat.ts @@ -200,8 +200,13 @@ const getInstrumentIds = async (instruments: Instrument[]) => { const instrumentIds = []; for (const name of instrumentNames) { - const instrumentNameLowerCase = encodeURIComponent(name.toLowerCase()); - const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"ilike":"${instrumentNameLowerCase}"}}}`; + const instrumentNameLowerCase = name.toLowerCase(); + + const filterString = JSON.stringify({ + where: { name: { ilike: instrumentNameLowerCase } }, + }); + + const url = `${sciCatBaseUrl}/Instruments?filter=${encodeURIComponent(filterString)}`; try { const res = await request(url, { From 1b72a53d555c5d86db772106cd2a15e072e1dc32 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Mon, 2 Feb 2026 11:29:12 +0100 Subject: [PATCH 171/176] chore: cleanup removed user fields --- src/datasources/visa/UserDataSource.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/datasources/visa/UserDataSource.ts b/src/datasources/visa/UserDataSource.ts index 1c1e6552..bf532fcf 100644 --- a/src/datasources/visa/UserDataSource.ts +++ b/src/datasources/visa/UserDataSource.ts @@ -6,25 +6,15 @@ export interface UserUpdationEventPayload { firstname: string; middlename: string; lastname: string; - username: string; preferredname: string; oidcSub: string; oauthRefreshToken: string; oauthAccessToken: string; - oauthIssuer: string; - oauthgenderccessToken: string; nationality: number; - birthdate: string; organisation: number; - - department: string; - position: string; email: string; emailVerified: boolean; - - telephone: string; - telephone_alt: string; placeholder: string; created: string; updated: string; From 37f65a3f36b737f4292ef80a827f9903bc3725af Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Thu, 5 Mar 2026 19:30:49 +0100 Subject: [PATCH 172/176] feat: implement retry logic for discovering persons in One Identity --- ...osalAndMembersToOneIdentityHandler.spec.ts | 148 +++++++++++++++++- ...cProposalAndMembersToOneIdentityHandler.ts | 81 +++++++--- 2 files changed, 205 insertions(+), 24 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index 7ba30e25..cb8cf144 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -40,7 +40,7 @@ const setupMocks = (data: { mockOneIdentity.getProposalPersonConnections.mockResolvedValueOnce( data.getProposalPersonConnections ?? [] ); - mockOneIdentity.getPersons.mockResolvedValueOnce( + mockOneIdentity.getPersons.mockResolvedValue( data.getPersons ?? ['proposer-uid', 'member-uid', 'data-access-uid'] ); if (data.hasPersonSiteAccessToProposalConfig) { @@ -63,6 +63,14 @@ const proposalMessage = { } as ProposalMessageData; describe('oneIdentityIntegrationHandler', () => { + beforeAll(() => { + jest.useFakeTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + describe('PROPOSAL_ACCEPTED', () => { it('should handle accepted proposal', async () => { setupMocks({ @@ -115,17 +123,145 @@ describe('oneIdentityIntegrationHandler', () => { getPersons: ['proposer-oidc-sub'], }); - await syncProposalAndMembersToOneIdentityHandler( + const promise = syncProposalAndMembersToOneIdentityHandler( proposalMessage, Event.PROPOSAL_ACCEPTED ); + await jest.runAllTimersAsync(); + await promise; + expect(logger.logError).toHaveBeenCalledWith( - 'Not all users found in One Identity (Investigate). Missing central accounts:', - { + 'discoverOIMPersonsWithRetry: failed after max retries', + expect.objectContaining({ + attempt: 3, + maxRetries: 3, + missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], + foundCount: 1, + expectedCount: 3, + }) + ); + }); + + it('should retry and eventually find all users after retries', async () => { + setupMocks({ + getProposal: undefined, + getProposalPersonConnections: [], + }); + + // First two attempts return incomplete results, third attempt returns all users + mockOneIdentity.getPersons + .mockResolvedValueOnce(['proposer-oidc-sub']) + .mockResolvedValueOnce(['proposer-oidc-sub', 'member-oidc-sub']) + .mockResolvedValueOnce([ + 'proposer-oidc-sub', + 'member-oidc-sub', + 'data-access-oidc-sub', + ]); + + const promise = syncProposalAndMembersToOneIdentityHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ); + + await jest.runAllTimersAsync(); + await promise; + + // Verify retry logs + expect(logger.logError).toHaveBeenNthCalledWith( + 1, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 1, + foundCount: 1, + expectedCount: 3, + }) + ); + + expect(logger.logError).toHaveBeenNthCalledWith( + 2, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 2, + foundCount: 2, + expectedCount: 3, + }) + ); + + // Verify success log on final attempt + expect(logger.logInfo).toHaveBeenCalledWith( + 'discoverOIMPersonsWithRetry: success', + expect.objectContaining({ + attempt: 3, + foundCount: 3, + }) + ); + + // Verify all users are connected + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(3); + }); + + it('should retry three times and fail if users are not found', async () => { + setupMocks({ + getProposal: undefined, + getProposalPersonConnections: [], + getPersons: ['proposer-oidc-sub'], + }); + + const promise = syncProposalAndMembersToOneIdentityHandler( + proposalMessage, + Event.PROPOSAL_ACCEPTED + ); + + await jest.runAllTimersAsync(); + await promise; + + // Verify that getPersons was called 3 times (one per retry attempt) + expect(mockOneIdentity.getPersons).toHaveBeenCalledTimes(3); + + // Verify intermediate retry logs + expect(logger.logError).toHaveBeenNthCalledWith( + 1, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 1, + maxRetries: 3, + missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], + foundCount: 1, + expectedCount: 3, + }) + ); + + expect(logger.logError).toHaveBeenNthCalledWith( + 2, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 2, + maxRetries: 3, + missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], + foundCount: 1, + expectedCount: 3, + }) + ); + + // Verify final error log after max retries exhausted + expect(logger.logError).toHaveBeenNthCalledWith( + 3, + 'discoverOIMPersonsWithRetry: failed after max retries', + expect.objectContaining({ + attempt: 3, + maxRetries: 3, missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], - foundUsersInOneIdentity: ['proposer-oidc-sub'], - } + foundCount: 1, + expectedCount: 3, + }) + ); + + // Verify connections are still attempted with partial results + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(1); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'proposer-oidc-sub' ); }); diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index 481814ba..0e7e6d4a 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -66,6 +66,65 @@ async function getUIDESetFromOneIdentity( return uidESet; } +async function discoverPersonsWithRetry( + oneIdentity: ESSOneIdentity, + centralAccounts: string[] +): Promise { + const MAX_RETRIES = 3; + const RETRY_DELAYS_MS = [2000, 5000, 10000]; // Progressive delays: 2s, 5s, 10s + + let attempts = 0; + + const attemptDiscovery = async (): Promise => { + attempts++; + const uidPersons = await oneIdentity.getPersons(centralAccounts); + + if (uidPersons.length !== centralAccounts.length) { + const missingCentralAccounts = centralAccounts.filter( + (account) => !uidPersons.includes(account) + ); + + if (attempts < MAX_RETRIES) { + const delayMs = RETRY_DELAYS_MS[attempts - 1]; + logger.logError('discoverOIMPersonsWithRetry: incomplete - retrying', { + attempt: attempts, + maxRetries: MAX_RETRIES, + delayMs, + missingCentralAccounts, + foundCount: uidPersons.length, + expectedCount: centralAccounts.length, + }); + + await new Promise((resolve) => setTimeout(resolve, delayMs)); + + return attemptDiscovery(); + } else { + logger.logError( + 'discoverOIMPersonsWithRetry: failed after max retries', + { + attempt: attempts, + maxRetries: MAX_RETRIES, + missingCentralAccounts, + foundCount: uidPersons.length, + expectedCount: centralAccounts.length, + } + ); + + return uidPersons; + } + } + + logger.logInfo('discoverOIMPersonsWithRetry: success', { + attempt: attempts, + foundCount: uidPersons.length, + }); + + return uidPersons; + }; + + return attemptDiscovery(); +} + async function handleConnectionsBetweenProposalAndPersons( oneIdentity: ESSOneIdentity, uidESet: UID_ESet, @@ -76,24 +135,10 @@ async function handleConnectionsBetweenProposalAndPersons( }); // Get all users from One Identity - const uidPersons = await oneIdentity.getPersons(centralAccounts); - - // Log an error if not all users are found in One Identity to be able to investigate - if (uidPersons.length !== centralAccounts.length) { - const missingCentralAccounts = centralAccounts.filter( - (account) => !uidPersons.includes(account) - ); - - logger.logError( - 'Not all users found in One Identity (Investigate). Missing central accounts:', - { - missingCentralAccounts, - foundUsersInOneIdentity: uidPersons, - } - ); - } - - logger.logInfo('Found persons in One Identity', { uidPersons }); + const uidPersons = await discoverPersonsWithRetry( + oneIdentity, + centralAccounts + ); // Get all connections between UID_ESet and UID_Person const connections = await oneIdentity.getProposalPersonConnections(uidESet); From e1cff59b8ed00f08ddc2d3e13f344be5691590c9 Mon Sep 17 00:00:00 2001 From: Yoganandan Pandiyan Date: Mon, 9 Mar 2026 13:48:26 +0100 Subject: [PATCH 173/176] fixed comments --- .../syncProposalAndMembersToOneIdentityHandler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index 0e7e6d4a..7219dafa 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -71,7 +71,7 @@ async function discoverPersonsWithRetry( centralAccounts: string[] ): Promise { const MAX_RETRIES = 3; - const RETRY_DELAYS_MS = [2000, 5000, 10000]; // Progressive delays: 2s, 5s, 10s + const RETRY_DELAYS_MS = [20000, 40000, 60000]; // Progressive delays: 20s, 40s, 60s let attempts = 0; @@ -140,6 +140,8 @@ async function handleConnectionsBetweenProposalAndPersons( centralAccounts ); + logger.logInfo('Found persons in One Identity', { uidPersons }); + // Get all connections between UID_ESet and UID_Person const connections = await oneIdentity.getProposalPersonConnections(uidESet); From 923a6f638c064960d285e89f4c4090126195e9cf Mon Sep 17 00:00:00 2001 From: janosbabik Date: Thu, 12 Mar 2026 10:48:44 +0100 Subject: [PATCH 174/176] fix: change error logging to warning for retry attempts in One Identity integration --- ...yncProposalAndMembersToOneIdentityHandler.spec.ts | 12 +++++------- .../syncProposalAndMembersToOneIdentityHandler.ts | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index cb8cf144..895d314e 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -167,8 +167,7 @@ describe('oneIdentityIntegrationHandler', () => { await jest.runAllTimersAsync(); await promise; - // Verify retry logs - expect(logger.logError).toHaveBeenNthCalledWith( + expect(logger.logWarn).toHaveBeenNthCalledWith( 1, 'discoverOIMPersonsWithRetry: incomplete - retrying', expect.objectContaining({ @@ -178,7 +177,7 @@ describe('oneIdentityIntegrationHandler', () => { }) ); - expect(logger.logError).toHaveBeenNthCalledWith( + expect(logger.logWarn).toHaveBeenNthCalledWith( 2, 'discoverOIMPersonsWithRetry: incomplete - retrying', expect.objectContaining({ @@ -220,7 +219,7 @@ describe('oneIdentityIntegrationHandler', () => { expect(mockOneIdentity.getPersons).toHaveBeenCalledTimes(3); // Verify intermediate retry logs - expect(logger.logError).toHaveBeenNthCalledWith( + expect(logger.logWarn).toHaveBeenNthCalledWith( 1, 'discoverOIMPersonsWithRetry: incomplete - retrying', expect.objectContaining({ @@ -232,7 +231,7 @@ describe('oneIdentityIntegrationHandler', () => { }) ); - expect(logger.logError).toHaveBeenNthCalledWith( + expect(logger.logWarn).toHaveBeenNthCalledWith( 2, 'discoverOIMPersonsWithRetry: incomplete - retrying', expect.objectContaining({ @@ -245,8 +244,7 @@ describe('oneIdentityIntegrationHandler', () => { ); // Verify final error log after max retries exhausted - expect(logger.logError).toHaveBeenNthCalledWith( - 3, + expect(logger.logError).toHaveBeenCalledWith( 'discoverOIMPersonsWithRetry: failed after max retries', expect.objectContaining({ attempt: 3, diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index 7219dafa..ab183fd3 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -86,7 +86,7 @@ async function discoverPersonsWithRetry( if (attempts < MAX_RETRIES) { const delayMs = RETRY_DELAYS_MS[attempts - 1]; - logger.logError('discoverOIMPersonsWithRetry: incomplete - retrying', { + logger.logWarn('discoverOIMPersonsWithRetry: incomplete - retrying', { attempt: attempts, maxRetries: MAX_RETRIES, delayMs, From 2079cced78a3fe8c3f61679ad1632e35ee145025 Mon Sep 17 00:00:00 2001 From: janosbabik Date: Thu, 12 Mar 2026 12:12:33 +0100 Subject: [PATCH 175/176] feat: enhance retry logic to include total attempts in One Identity integration --- ...osalAndMembersToOneIdentityHandler.spec.ts | 43 ++++++++++++++++--- ...cProposalAndMembersToOneIdentityHandler.ts | 4 +- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index 895d314e..53cb8a56 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -45,7 +45,9 @@ const setupMocks = (data: { ); if (data.hasPersonSiteAccessToProposalConfig) { mockOneIdentity.hasPersonSiteAccessToProposal.mockImplementation( - async (uidPerson: string, _proposalUid: string) => { + async (uidPerson: string, proposalUid: string) => { + void proposalUid; + return data.hasPersonSiteAccessToProposalConfig?.[uidPerson] ?? false; } ); @@ -134,8 +136,9 @@ describe('oneIdentityIntegrationHandler', () => { expect(logger.logError).toHaveBeenCalledWith( 'discoverOIMPersonsWithRetry: failed after max retries', expect.objectContaining({ - attempt: 3, + attempt: 4, maxRetries: 3, + totalAttempts: 4, missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], foundCount: 1, expectedCount: 3, @@ -149,10 +152,11 @@ describe('oneIdentityIntegrationHandler', () => { getProposalPersonConnections: [], }); - // First two attempts return incomplete results, third attempt returns all users + // First three attempts return incomplete results, fourth attempt returns all users mockOneIdentity.getPersons .mockResolvedValueOnce(['proposer-oidc-sub']) .mockResolvedValueOnce(['proposer-oidc-sub', 'member-oidc-sub']) + .mockResolvedValueOnce(['proposer-oidc-sub', 'member-oidc-sub']) .mockResolvedValueOnce([ 'proposer-oidc-sub', 'member-oidc-sub', @@ -187,11 +191,22 @@ describe('oneIdentityIntegrationHandler', () => { }) ); + expect(logger.logWarn).toHaveBeenNthCalledWith( + 3, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 3, + delayMs: 60000, + foundCount: 2, + expectedCount: 3, + }) + ); + // Verify success log on final attempt expect(logger.logInfo).toHaveBeenCalledWith( 'discoverOIMPersonsWithRetry: success', expect.objectContaining({ - attempt: 3, + attempt: 4, foundCount: 3, }) ); @@ -215,8 +230,8 @@ describe('oneIdentityIntegrationHandler', () => { await jest.runAllTimersAsync(); await promise; - // Verify that getPersons was called 3 times (one per retry attempt) - expect(mockOneIdentity.getPersons).toHaveBeenCalledTimes(3); + // Verify that getPersons was called 4 times (initial attempt plus 3 retries) + expect(mockOneIdentity.getPersons).toHaveBeenCalledTimes(4); // Verify intermediate retry logs expect(logger.logWarn).toHaveBeenNthCalledWith( @@ -243,12 +258,26 @@ describe('oneIdentityIntegrationHandler', () => { }) ); + expect(logger.logWarn).toHaveBeenNthCalledWith( + 3, + 'discoverOIMPersonsWithRetry: incomplete - retrying', + expect.objectContaining({ + attempt: 3, + maxRetries: 3, + delayMs: 60000, + missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], + foundCount: 1, + expectedCount: 3, + }) + ); + // Verify final error log after max retries exhausted expect(logger.logError).toHaveBeenCalledWith( 'discoverOIMPersonsWithRetry: failed after max retries', expect.objectContaining({ - attempt: 3, + attempt: 4, maxRetries: 3, + totalAttempts: 4, missingCentralAccounts: ['member-oidc-sub', 'data-access-oidc-sub'], foundCount: 1, expectedCount: 3, diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts index ab183fd3..034b383d 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.ts @@ -71,6 +71,7 @@ async function discoverPersonsWithRetry( centralAccounts: string[] ): Promise { const MAX_RETRIES = 3; + const MAX_ATTEMPTS = MAX_RETRIES + 1; const RETRY_DELAYS_MS = [20000, 40000, 60000]; // Progressive delays: 20s, 40s, 60s let attempts = 0; @@ -84,7 +85,7 @@ async function discoverPersonsWithRetry( (account) => !uidPersons.includes(account) ); - if (attempts < MAX_RETRIES) { + if (attempts < MAX_ATTEMPTS) { const delayMs = RETRY_DELAYS_MS[attempts - 1]; logger.logWarn('discoverOIMPersonsWithRetry: incomplete - retrying', { attempt: attempts, @@ -104,6 +105,7 @@ async function discoverPersonsWithRetry( { attempt: attempts, maxRetries: MAX_RETRIES, + totalAttempts: MAX_ATTEMPTS, missingCentralAccounts, foundCount: uidPersons.length, expectedCount: centralAccounts.length, From 1a28e291f1aa978764519f4d7751d981ab71d2f2 Mon Sep 17 00:00:00 2001 From: janosbabik <143906591+janosbabik@users.noreply.github.com> Date: Mon, 16 Mar 2026 10:57:29 +0100 Subject: [PATCH 176/176] feat: update visitor handling in proposal and visit synchronisation logic (#637) --- ...osalAndMembersToOneIdentityHandler.spec.ts | 54 +++++++++++++++ .../syncVisitToOneIdentityHandler.spec.ts | 67 +++++++++++++++++++ .../syncVisitToOneIdentityHandler.ts | 2 +- .../collectUsersFromProposalMessage.spec.ts | 23 ++++++- .../utils/collectUsersFromProposalMessage.ts | 3 +- 5 files changed, 145 insertions(+), 4 deletions(-) diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts index 53cb8a56..ffc8451b 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncProposalAndMembersToOneIdentityHandler.spec.ts @@ -450,6 +450,60 @@ describe('oneIdentityIntegrationHandler', () => { expect(mockOneIdentity.logout).toHaveBeenCalled(); }); + it('should keep visitor connections when the visitor is still on the proposal', async () => { + const proposalMessageWithVisitor = { + ...proposalMessage, + visitors: [{ oidcSub: 'visitor-oidc-sub' } as ProposalUser], + } as ProposalMessageData; + + setupMocks({ + getProposal: 'proposal-UID_ESet', + getProposalPersonConnections: [ + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'proposer-uid', + }, + { + UID_ESet: 'proposal-UID_ESet', + UID_Person: 'visitor-uid', + }, + ], + getPersons: [ + 'proposer-uid', + 'member-uid', + 'data-access-uid', + 'visitor-uid', + ], + }); + + await syncProposalAndMembersToOneIdentityHandler( + proposalMessageWithVisitor, + Event.PROPOSAL_UPDATED + ); + + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalledWith('proposal-UID_ESet', 'visitor-uid'); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledTimes(2); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'member-uid' + ); + expect(mockOneIdentity.connectPersonToProposal).toHaveBeenCalledWith( + 'proposal-UID_ESet', + 'data-access-uid' + ); + expect(logger.logInfo).toHaveBeenCalledWith('Connections updated', { + uidESet: 'proposal-UID_ESet', + uidPersons: [ + 'proposer-uid', + 'member-uid', + 'data-access-uid', + 'visitor-uid', + ], + }); + }); + it('should remove one old connection and keep another due to site access', async () => { setupMocks({ getProposal: 'proposal-UID_ESet', diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts index ce60cc3c..daae36a4 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.spec.ts @@ -63,6 +63,23 @@ const visitMessageVisitorNotMember: VisitMessage = { } as ProposalMessageData, }; +const visitMessageVisitorOnlyInVisitors: VisitMessage = { + ...visitMessage, + proposal: { + ...visitMessage.proposal, + dataAccessUsers: [], + visitors: [ + { + id: 524, + firstName: 'Visitor', + lastName: 'Only', + email: 'visitor@example.com', + oidcSub: 'visitor-oidc-sub', + }, + ], + } as ProposalMessageData, +}; + describe('syncVisitToOneIdentityHandler', () => { beforeEach(() => { jest.clearAllMocks(); @@ -459,6 +476,56 @@ describe('syncVisitToOneIdentityHandler', () => { expect(mockOneIdentity.logout).toHaveBeenCalled(); }); + it('should skip removing proposal connection if visitor is still in the visitors list', async () => { + const mockPerson = { + UID_Person: 'visitor-uid', + CCC_EmployeeSubType: IdentityType.ESSSCIENCEUSER, + } as Person; + const mockPersonWantsOrgs = [ + { + UID_PersonWantsOrg: 'site-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SITE_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'proposal-short-code', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + { + UID_PersonWantsOrg: 'system-access-uid', + UID_PersonOrdered: 'visitor-uid', + DisplayOrg: PersonWantsOrgRole.SYSTEM_ACCESS, + ValidFrom: '2023-01-01T00:00:00.000Z', + ValidUntil: '2023-01-10T00:00:00.000Z', + CustomProperty04: 'site-access-uid', + OrderState: OrderState.GRANTED, + } as PersonWantsOrg, + ]; + + mockOneIdentity.getPerson.mockResolvedValueOnce(mockPerson); + mockOneIdentity.getProposal.mockResolvedValueOnce(mockUidESet); + mockOneIdentity.getPersonWantsOrg.mockResolvedValueOnce( + mockPersonWantsOrgs + ); + + await syncVisitToOneIdentityHandler( + visitMessageVisitorOnlyInVisitors, + Event.VISIT_DELETED + ); + + expect( + mockOneIdentity.removeConnectionBetweenPersonAndProposal + ).not.toHaveBeenCalled(); + expect(logger.logInfo).toHaveBeenCalledWith( + 'Visitor is a proposal member, skipping removal', + { + uidPerson: mockPerson.UID_Person, + uidESet: mockUidESet, + } + ); + expect(mockOneIdentity.logout).toHaveBeenCalled(); + }); + it('should throw an error if proposal is not found in One Identity on delete', async () => { const mockPerson = { UID_Person: 'visitor-uid', diff --git a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts index 781f1d7b..1b58ac96 100644 --- a/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts +++ b/src/queue/consumers/oneidentity/consumerCallbacks/syncVisitToOneIdentityHandler.ts @@ -218,7 +218,7 @@ async function removeProposalConnection( ); if (isMember) { - // [proposer, members, dataAccessUsers] should always have access to the proposal + // [proposer, members, dataAccessUsers, visitors] should always have access to the proposal logger.logInfo('Visitor is a proposal member, skipping removal', { uidPerson, uidESet, diff --git a/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts b/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts index 690c9866..0de84c4d 100644 --- a/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts +++ b/src/queue/consumers/utils/collectUsersFromProposalMessage.spec.ts @@ -24,20 +24,22 @@ describe('collectUsersFromProposalMessage', () => { ...overrides, }); - it('returns members, proposer, and data access users in order', () => { + it('returns members, proposer, data access users, and visitors in order', () => { const member = createUser(1, 'member'); const proposer = createUser(2, 'proposer'); const dataAccessUser = createUser(3, 'data'); + const visitor = createUser(4, 'visitor'); const message = createBaseMessage({ members: [member], proposer, dataAccessUsers: [dataAccessUser], + visitors: [visitor], }); const result = collectUsersFromProposalMessage(message); - expect(result).toEqual([member, proposer, dataAccessUser]); + expect(result).toEqual([member, proposer, dataAccessUser, visitor]); }); it('filters out undefined entries', () => { @@ -69,4 +71,21 @@ describe('collectUsersFromProposalMessage', () => { expect(result).toEqual([member, proposer]); }); + + it('handles missing visitors by treating it as empty', () => { + const member = createUser(1, 'member'); + const proposer = createUser(2, 'proposer'); + + const message = { + ...createBaseMessage({ + members: [member], + proposer, + dataAccessUsers: [], + }), + } as ProposalMessageData; + + const result = collectUsersFromProposalMessage(message); + + expect(result).toEqual([member, proposer]); + }); }); diff --git a/src/queue/consumers/utils/collectUsersFromProposalMessage.ts b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts index f2dfa3ce..18bf16ed 100644 --- a/src/queue/consumers/utils/collectUsersFromProposalMessage.ts +++ b/src/queue/consumers/utils/collectUsersFromProposalMessage.ts @@ -5,8 +5,9 @@ export function collectUsersFromProposalMessage({ members, proposer, dataAccessUsers = [], + visitors = [], }: ProposalMessageData): ProposalUser[] { - return [...members, proposer, ...dataAccessUsers].filter( + return [...members, proposer, ...dataAccessUsers, ...visitors].filter( (user): user is ProposalUser => user !== undefined ); }