diff --git a/CHANGELOG.md b/CHANGELOG.md index 01befce..f231e87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # dmptool-api Changelog +## 2026-06-15 +- Updated dependencies +- Added overrides for shell-quote and esbuild +- Removed old overrides for ws and brace-expansion + ## 2026-05-26 - Added validation for `POST /dmps` to reject payloads containing more than one `dmp.project` with a `dmp_invalid` error - Added models and workflows to map `dmp.project[0].funding` plus DMP Tool extensions (`funding_opportunity` and `funding_project`) to `ProjectFunding` and `PlanFunding` diff --git a/docs/jsonSamples/full-dmp-tool-v1_2.json b/docs/jsonSamples/full-dmp-tool-v1_2.json index 61ff2f0..2c3b33f 100644 --- a/docs/jsonSamples/full-dmp-tool-v1_2.json +++ b/docs/jsonSamples/full-dmp-tool-v1_2.json @@ -188,25 +188,19 @@ "narrative": { "download_url": "https://example.com/dmps/123/narrative", "template": { - "id": 1234567, - "title": "Funder Template", - "description": "This is a test funder template for a DMP narrative", - "version": "v1", + "title": "Digital Curation Centre", + "version": "v3", "section": [{ - "id": 9876, - "title": "Section one", - "description": "The first section of the narrative", + "title": "Data Collection", "order": 1, "question": [ { - "id": 1234, - "text": "Please describe your primary research output.", + "text": "What data will you collect or create?", "order": 1, "answer": { - "id": 543, "json": { "type": "textArea", - "answer": "This is a description of the primary research output.", + "answer": "We will collect data from the ocean buoy 2345325, including temperature, salinity, and wave height measurements.", "meta": { "schemaVersion": "1.0" } @@ -214,19 +208,30 @@ } }, { - "id": 5678, - "text": "Where will you deposit this output?", + "text": "How will the data be collected or created?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "The data will be collected using sensors on the ocean buoy 2345325, which will transmit the data to a central server for processing and storage.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Documentation and Metadata", + "order": 2, + "question": [ + { + "text": "What documentation and metadata will accompany the data?", "order": 1, "answer": { - "id": 543, "json": { - "type": "repositorySearch", - "answer": [ - { - "repositoryId": "https://example.com/repository/123456789", - "repositoryName": "Example Repository" - } - ], + "type": "textArea", + "answer": "The data will be accompanied by metadata in the form of a JSON file that includes information about the data collection methods, sensor specifications, and data processing steps.", "meta": { "schemaVersion": "1.0" } @@ -234,7 +239,397 @@ } } ] - }] + }, { + "title": "Ethics and Legal Compliance", + "order": 3, + "question": [ + { + "text": "How will you manage any ethical issues?", + "order": 1, + "answer": { + "json": { + "type": "textArea", + "answer": "We will ensure that all data collection and processing activities comply with relevant ethical guidelines and regulations, including obtaining necessary permits and approvals.", + "meta": { + "schemaVersion": "1.0" + } + } + } + }, + { + "text": "How will you manage copyright and Intellectual Property Rights (IP/IPR) issues?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "We will ensure that all data and associated materials are properly licensed and attributed, and we will obtain necessary permissions for any third-party content used in the project.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Storage and Backup", + "order": 4, + "question": [ + { + "text": "How will the data be stored and backed up during the research?", + "order": 1, + "answer": { + "json": { + "type": "textArea", + "answer": "The data will be stored on secure servers with regular backups to ensure data integrity and availability. We will also implement access controls to protect sensitive data.", + "meta": { + "schemaVersion": "1.0" + } + } + } + }, + { + "text": "How will you manage access and security?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "We will implement role-based access controls and encryption to protect the data from unauthorized access. Regular security audits will be conducted to identify and mitigate potential vulnerabilities.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Selection and Preservation", + "order": 5, + "question": [ + { + "text": "Which data are of long-term value and should be retained, shared, and/or preserved?", + "order": 1, + "answer": { + "json": { + "type": "textArea", + "answer": "The data collected from the ocean buoy, including temperature, salinity, and wave height measurements, are of long-term value and will be retained, shared, and preserved for future research and analysis.", + "meta": { + "schemaVersion": "1.0" + } + } + } + }, + { + "text": "What is the long-term preservation plan for the dataset?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "The long-term preservation plan includes depositing the dataset in a trusted digital repository that adheres to best practices for data preservation, ensuring that the data remains accessible and usable for future researchers.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Data Sharing", + "order": 6, + "question": [ + { + "text": "How will you share the data?", + "order": 1, + "answer": { + "json": { + "type": "textArea", + "answer": "The data will be shared through a public data repository with appropriate metadata and documentation to facilitate reuse by other researchers.", + "meta": { + "schemaVersion": "1.0" + } + } + } + }, + { + "text": "Are any restrictions on data sharing required?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "There are no restrictions on data sharing, and the dataset will be made available under an open license to encourage reuse and collaboration.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Responsibilities and Resources", + "order": 7, + "question": [ + { + "text": "Who will be responsible for data management?", + "order": 1, + "answer": { + "json": { + "type": "textArea", + "answer": "The principal investigator will be responsible for overseeing data management activities, with support from the research team and data management specialists.", + "meta": { + "schemaVersion": "1.0" + } + } + } + }, + { + "text": "What resources will you require to deliver your plan?", + "order": 2, + "answer": { + "json": { + "type": "textArea", + "answer": "The resources required to deliver the data management plan include funding for data storage and backup, access to secure servers, data management software, and personnel with expertise in data management and curation.", + "meta": { + "schemaVersion": "1.0" + } + } + } + } + ] + }, { + "title": "Research Outputs", + "order": 8, + "question": [ + { + "text": "Please list all research outputs that you intend to create as part of your project.", + "order": 1, + "answer": { + "json": { + "meta": { + "schemaVersion": "1.0" + }, + "type": "researchOutputTable", + "answer": [ + { + "columns": [ + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "text", + "answer": "Buoy data", + "commonStandardId": "title" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "textArea", + "answer": "

Sensor data collected by the sea buoy

", + "commonStandardId": "description" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "selectBox", + "answer": "dataset", + "commonStandardId": "type" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "checkBoxes", + "answer": [], + "commonStandardId": "data_flags" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "repositorySearch", + "answer": [ + { + "repositoryId": "https://www.re3data.org/repository/r3d100014682", + "repositoryName": "Open-archeOcsean" + } + ], + "commonStandardId": "host" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "metadataStandardSearch", + "answer": [ + { + "metadataStandardId": "https://rdamsc.bath.ac.uk/api2/m15", + "metadataStandardName": "Dublin Core" + } + ], + "commonStandardId": "metadata" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "licenseSearch", + "answer": [ + { + "licenseId": "https://spdx.org/licenses/CC0-1.0.json", + "licenseName": "CC0-1.0" + } + ], + "commonStandardId": "license_ref" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "radioButtons", + "answer": "open", + "commonStandardId": "data_access" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "date", + "answer": "2026-06-20", + "commonStandardId": "issued" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "numberWithContext", + "answer": { + "value": 4, + "context": "MB" + }, + "commonStandardId": "byte_size" + } + ] + }, + { + "columns": [ + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "text", + "answer": "Time lapse visualizations" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "textArea", + "answer": "

Visualizations of the buoy data over time

" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "selectBox", + "answer": "software" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "checkBoxes", + "answer": [ + "sensitive" + ] + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "repositorySearch", + "answer": [ + { + "repositoryId": "https://www.re3data.org/repository/https://www.re3data.org/api/v1/repository/r3d100010375", + "repositoryName": "GitHub", + "repositoryType": [ + "other" + ], + "repositoryWebsite": "https://github.com", + "repositoryKeywords": [ + "open source software", + "social networking", + "web-based hosting service" + ], + "repositoryDescription": "GitHub is the best place to share code with friends, co-workers, classmates, and complete strangers. Over three million people use GitHub to build amazing things together. With the collaborative features of GitHub.com, our desktop and mobile apps, and Git" + } + ] + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "metadataStandardSearch", + "answer": [ + { + "metadataStandardId": "", + "metadataStandardName": "" + } + ] + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "licenseSearch", + "answer": [ + { + "licenseId": "https://spdx.org/licenses/MIT.json", + "licenseName": "MIT" + } + ] + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "radioButtons", + "answer": "open" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "text", + "answer": "2026-07-11" + }, + { + "meta": { + "schemaVersion": "1.0" + }, + "type": "text", + "answer": "125 kb" + } + ] + } + ], + "columnHeadings": [ + "Title", + "Description", + "Output Type", + "Data Flags", + "Repositories", + "Metadata Standards", + "Licenses", + "Initial Access Levels", + "Anticipated Release Date", + "Anticipated file size" + ] + } + } + } + ] + } + ] } }, "project": [{ diff --git a/package-lock.json b/package-lock.json index 9e35386..3b7579a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,37 +9,38 @@ "version": "3.0.0", "license": "MIT", "dependencies": { - "@apollo/client": "^4.1.9", - "@dmptool/types": "^3.1.5", - "@dmptool/utils": "^2.1.1", + "@apollo/client": "^4.2.3", + "@dmptool/types": "^3.1.7", + "@dmptool/utils": "^2.1.4", "@fastify/accept-negotiator": "^2.0.1", "@fastify/cookie": "^11.0.2", "@fastify/error": "^4.2.0", "@fastify/jwt": "^10.1.0", - "@fastify/rate-limit": "^10.3.0", + "@fastify/rate-limit": "^11.0.0", "@fastify/routes": "^6.0.2", "@fastify/swagger": "^9.7.0", - "@fastify/swagger-ui": "^5.2.6", + "@fastify/swagger-ui": "^6.0.0", "dotenv": "^17.4.2", "fastify": "^5.8.5", "fastify-cli": "^8.0.0", - "graphql": "^16.14.0" + "graphql": "^16.14.2", + "zod": "^4.4.3" }, "devDependencies": { "@eslint/js": "^10.0.1", - "@graphql-codegen/cli": "^7.0.0", - "@types/node": "^25.9.1", + "@graphql-codegen/cli": "^7.1.3", + "@types/node": "^16.0.0", "babel-jest": "^30.4.1", - "eslint": "^10.4.0", + "eslint": "^10.5.0", "husky": "^9.1.7", "jest": "^30.4.2", "jest-expect-message": "^1.1.3", "pino-pretty": "^13.1.3", - "ts-jest": "^29.4.10", + "ts-jest": "^29.4.11", "ts-node": "^10.9.2", - "tsx": "^4.22.3", + "tsx": "^4.22.4", "typescript": "^6.0.3", - "typescript-eslint": "^8.59.4" + "typescript-eslint": "^8.62.0" }, "engines": { "node": ">=22.15.0", @@ -50,9 +51,9 @@ } }, "node_modules/@apollo/client": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.1.9.tgz", - "integrity": "sha512-qfpkQD51tdU/7iAR6aLb4w9o/L7I475DluWHRb61U/3Q0AH29nNOxOBHjBbWDdf16ncPOoQuxne1sEs2NjqBFw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.2.3.tgz", + "integrity": "sha512-+auRYBXow2v7cT+wKzvjyMyyEojq+G7Sf80vIR57rtEPcxRFuMXuU9IKjwxZ3muclUgdGKwZXNeuki+g0GabgQ==", "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -64,7 +65,7 @@ "tslib": "^2.3.0" }, "peerDependencies": { - "graphql": "^16.0.0", + "graphql": "^16.0.0 || ^17.0.0", "graphql-ws": "^5.5.5 || ^6.0.3", "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc", "react-dom": "^17.0.0 || ^18.0.0 || >=19.0.0-rc", @@ -106,7 +107,6 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -121,7 +121,6 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -133,7 +132,6 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -143,53 +141,11 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -200,53 +156,11 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -261,7 +175,6 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -271,100 +184,47 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "node_modules/@aws-sdk/checksums": { + "version": "3.1000.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/checksums/-/checksums-3.1000.5.tgz", + "integrity": "sha512-zOXUUnilC6lgCsQtp77p/QNPmRlTES9Xi6tlDwbR6kfC/kz5PCzZckgHWm5z+8DskdwuMAbFDq61x3zr10GEEQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.1039.0.tgz", - "integrity": "sha512-iT3IEdr2CriBy2h5LR/+O5PadxAoLNFepQ+I7pwPam77e3OhkivMUQJ/7vOfh6HGU0Mh2SENJBOO6xaAenC9fA==", + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.1068.0.tgz", + "integrity": "sha512-Q79jGs2wgXoepAO1KcyKOiIQkfVfxz0QFgWavVO2hAetdoC+oTDrraOTaLE8iG8b9+N3BURam29nUn1j/YNs2w==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.3.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.55", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -372,53 +232,23 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.1039.0.tgz", - "integrity": "sha512-eqyrnSj2l0/y89LHENnGparEyKD33Wh8PQszgWbtb6t8bI5oriPaTHHXCdGUmFjOMkiNfqbsLCoo5HhMXlvbxw==", + "version": "3.1075.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.1075.0.tgz", + "integrity": "sha512-3KlTXh6U2nDqL+epT1XdxnszLtCEAvoeO7phI4UGiQeKMiibcyBsJvSlyEj1tBoNOsbdcmp1QLM8za415sDzzQ==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/dynamodb-codec": "^3.973.7", - "@aws-sdk/middleware-endpoint-discovery": "^3.972.11", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.3.0", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/credential-provider-node": "^3.972.58", + "@aws-sdk/dynamodb-codec": "^3.973.23", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.19", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -426,66 +256,24 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1039.0.tgz", - "integrity": "sha512-PVH9v0pHYBQnBADSR/m88NgcuJcYqPXfpmkcME66vRF75Y4swwbEVVFbTBFuvxu0YcZiLFXu3lw0FDK00vEa3A==", + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1068.0.tgz", + "integrity": "sha512-lFgaIpxZvloNbJvQ337YPdMXhzI2zJdDw13nATVGnkAGNoNPx4ksD84AQAcuW75hsaaMaIuNmXU9sSx6+FTirA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.10", - "@aws-sdk/middleware-expect-continue": "^3.972.10", - "@aws-sdk/middleware-flexible-checksums": "^3.974.15", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-location-constraint": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-sdk-s3": "^3.972.36", - "@aws-sdk/middleware-ssec": "^3.972.10", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/signature-v4-multi-region": "^3.996.24", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/eventstream-serde-browser": "^4.2.14", - "@smithy/eventstream-serde-config-resolver": "^4.3.14", - "@smithy/eventstream-serde-node": "^4.2.14", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-blob-browser": "^4.2.15", - "@smithy/hash-node": "^4.2.14", - "@smithy/hash-stream-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/md5-js": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.3.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.55", + "@aws-sdk/middleware-flexible-checksums": "^3.974.30", + "@aws-sdk/middleware-sdk-s3": "^3.972.51", + "@aws-sdk/signature-v4-multi-region": "^3.996.34", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -493,50 +281,21 @@ } }, "node_modules/@aws-sdk/client-sns": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sns/-/client-sns-3.1039.0.tgz", - "integrity": "sha512-fNWuHMxBdfs3nzXmFbqozrRyLN7MN7Vi4JI9TWatS183iV4055DX7LL1QAZdzMCHhHgUEYZlywScW/9E8m5Owg==", + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sns/-/client-sns-3.1068.0.tgz", + "integrity": "sha512-xIjKGG2yzUhX+IHqq0B/8D6zKKr32+LmYUy/OnV5dDj+j+eUJD7J3Ca6kMVDPI6eWe/fCtdHCgsnZtxhf1LMqg==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.55", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -544,52 +303,22 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1039.0.tgz", - "integrity": "sha512-U8rooijGy5OnSdxEaJ/sIxuGPgHfspxE8K/az22eJJ4qnO2XcVMtkHljvbfQG0yL3wd93XaypNSPI52okdTyCA==", + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.1068.0.tgz", + "integrity": "sha512-hatCfVf61RsSO5Qjrf7JKln4KiPDprXNJhpx9DNOmyeW1v+i7KNhbawk4d1wAnQ72YciOfhAhyRFec6UZqcnzQ==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-sdk-sqs": "^3.972.22", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/md5-js": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.55", + "@aws-sdk/middleware-sdk-sqs": "^3.972.30", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -597,51 +326,21 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.1039.0.tgz", - "integrity": "sha512-UvFJ/9HSIkQWxcLNbq/QaWemhqi7TChLW+ZSWBv8mNmSybTj4ZrMFpzbH2y9gJq38dN1KVR6FyjtOA/+FE6avg==", + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.1068.0.tgz", + "integrity": "sha512-Toui6G9ebQbjT5y6FgQxmokX8+231R+JPEEMA3Zf+Oa3ui1qf0XSknaaXvCWeoj4ru1SoL3kSAl8lZ4OrKGNSw==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-node": "^3.972.38", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.3.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.55", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -649,39 +348,18 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.974.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.7.tgz", - "integrity": "sha512-YhRC90ofz5oolTJZlA8voU/oUrCB2azi8Usx51k8hhB5LpWbYQMMXKUqSqkoL0Cru+RQJgWTHpAfEDDIwfUhJw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/xml-builder": "^3.972.22", - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.972.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.7.tgz", - "integrity": "sha512-QUagVVBbC8gODCF6e1aV0mE2TXWB9Opz4k8EJFdNrujUVQm5R4AjJa1mpOqzwOuROBzqJU9zawzig7M96L8Ejg==", + "version": "3.974.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.23.tgz", + "integrity": "sha512-MiWR/uWjxjFXGzrE0Ghc5lWxUxzHsUWFhV+OX7M4cR9SrmrnZs6TXavnCWnzzdwJeFri34xQo81rvGNzK3c4BQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.13", + "@aws-sdk/xml-builder": "^3.972.31", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/core": "^3.24.6", + "@smithy/signature-v4": "^5.4.6", + "@smithy/types": "^4.14.3", + "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { @@ -689,16 +367,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.33.tgz", - "integrity": "sha512-bJV7eViSJV6GSuuN+VIdNVPdwPsNSf75BiC2v5alPrjR/OCcqgKwSZInKbDFz9mNeizldsyf67jt6YSIiv53Cw==", + "version": "3.972.49", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.49.tgz", + "integrity": "sha512-liB3yQNHCM9k/gu/w36XHMKPluT7HTlnGUhRbBGSISDQkcr/Sy1zsZabiuvQj8WG5yW573u9RehrBvvnIQ9OEQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -706,21 +383,17 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.35", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.35.tgz", - "integrity": "sha512-x/BQGEIdq0oI+4WxLjKmnQvT7CnF9r8ezdGt7wXwxb7ckHXQz0Zmgxt8v3Ne0JaT3R5YefmuybHX6E8EnsDXyA==", + "version": "3.972.51", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.51.tgz", + "integrity": "sha512-XET0H2oofciJ5lMRWNIvRjAP7Q3wv2XT+JtJJEdhPWUMwe3TvQ9qcxonpu7vXmNngncvFpi4E2It+Tamas/naA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/types": "^3.973.8", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.25", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -728,25 +401,23 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.37.tgz", - "integrity": "sha512-eUTpmWfd/BKsq9medhCRcu+GRAhFP2Zrn7/2jKDHHOOjCkhrMoTp/t4cEthqFoG7gE0VGp5wUxrXTdvBCmSmJg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/credential-provider-env": "^3.972.33", - "@aws-sdk/credential-provider-http": "^3.972.35", - "@aws-sdk/credential-provider-login": "^3.972.37", - "@aws-sdk/credential-provider-process": "^3.972.33", - "@aws-sdk/credential-provider-sso": "^3.972.37", - "@aws-sdk/credential-provider-web-identity": "^3.972.37", - "@aws-sdk/nested-clients": "^3.997.5", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "version": "3.972.56", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.56.tgz", + "integrity": "sha512-IAmc61hbgQiHht9U3x0tnRwz0lzdwOwD/i9voRgdJrKamF+JtmrBOsW9GwB7mfFonNWOWL4qARWYrF8veEMe3w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/credential-provider-env": "^3.972.49", + "@aws-sdk/credential-provider-http": "^3.972.51", + "@aws-sdk/credential-provider-login": "^3.972.55", + "@aws-sdk/credential-provider-process": "^3.972.49", + "@aws-sdk/credential-provider-sso": "^3.972.55", + "@aws-sdk/credential-provider-web-identity": "^3.972.55", + "@aws-sdk/nested-clients": "^3.997.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/credential-provider-imds": "^4.3.7", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -754,19 +425,16 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.37.tgz", - "integrity": "sha512-Ty68y8ISSC+g5Q3D0K8uAaoINwvfaOslnNpsF/LgVUxyosYXHawcK2yV4HLXDVugiTTYLQfJfcw0ce5meAGkKw==", + "version": "3.972.55", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.55.tgz", + "integrity": "sha512-hBBkANo3cDn+h2qxxzER4a+J8JCO9o9Z/YYmU7iky6AcaarX5RRdRcHNC6SLdwY0vAXQygn6soUbDqPn3GghaA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/nested-clients": "^3.997.5", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/nested-clients": "^3.997.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -774,23 +442,21 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.38.tgz", - "integrity": "sha512-BQ9XYnBDVxR2HuV5huXYQYF/PZMTsY+EnwfGnCU2cA8Zw63XpkOtPY8WqiMIZMQCrKPQQEiFURS/o9CIolRLqg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.33", - "@aws-sdk/credential-provider-http": "^3.972.35", - "@aws-sdk/credential-provider-ini": "^3.972.37", - "@aws-sdk/credential-provider-process": "^3.972.33", - "@aws-sdk/credential-provider-sso": "^3.972.37", - "@aws-sdk/credential-provider-web-identity": "^3.972.37", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "version": "3.972.58", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.58.tgz", + "integrity": "sha512-OyCLVmSI7pZO8hxwNVX6pXhTVlJqRBTp+ijdEfJSUj0RyjHnF602OfAarOzGq6wkGodeFkYBt8MmJ6A6ycRgWw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.49", + "@aws-sdk/credential-provider-http": "^3.972.51", + "@aws-sdk/credential-provider-ini": "^3.972.56", + "@aws-sdk/credential-provider-process": "^3.972.49", + "@aws-sdk/credential-provider-sso": "^3.972.55", + "@aws-sdk/credential-provider-web-identity": "^3.972.55", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/credential-provider-imds": "^4.3.7", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -798,17 +464,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.33.tgz", - "integrity": "sha512-yfjGksI9WQbdMObb0VeLXqzTLI+a0qXLJT9gCDiv0+X/xjPpI3mTz6a5FibrhpuEKIe0gSgvs3MaoFZy5cx4WA==", + "version": "3.972.49", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.49.tgz", + "integrity": "sha512-C8h36lBuC/RnBSsjlO+dn6xZm3KbAl5vpJaVPAfQnMmz2/OISmKOc8XZcqMQgO2ADwBYNRMM6Kf3vz9G/TulMQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -816,19 +480,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.37.tgz", - "integrity": "sha512-fpwE+20ntpp3i9Xb9vUuQfXLDKYHH+5I2V+ZG96SX1nBzrruhy10RXDgmN7t1etOz3c55stlA3TeQASUA451NQ==", + "version": "3.972.55", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.55.tgz", + "integrity": "sha512-1FkOz74Ea5QGS9jtIoXp55T/IkSS3spv+nLTT07fRY/+T5xmEOqaYBVIaEmX4zTNvbV6g2lrtlaVKWEoNyJt3w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/nested-clients": "^3.997.5", - "@aws-sdk/token-providers": "3.1039.0", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/nested-clients": "^3.997.23", + "@aws-sdk/token-providers": "3.1074.0", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -836,18 +498,16 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.37.tgz", - "integrity": "sha512-aryawqyebf+3WhAFNHfF62rekFpYtVcVN7dQ89qnAWsa4n5hJst8qBG6gXC24WHtW7Nnhkf9ScYnjwo0Brn3bw==", + "version": "3.972.55", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.55.tgz", + "integrity": "sha512-g2BoECD1q01kTPByi56+VLVvdWDzMkKIcr77qixpqH0okw2t0U5CoPv+6S8v/D1Y2Wa6QKKtn6XAtDzP+Kfpvg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/nested-clients": "^3.997.5", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/nested-clients": "^3.997.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -855,16 +515,15 @@ } }, "node_modules/@aws-sdk/dynamodb-codec": { - "version": "3.973.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.973.7.tgz", - "integrity": "sha512-9NIOxillGcBp/355NoQo7kPalYIe8fJkgS00ZgO6qKLsiDmCgCoHGiT7yIuavWhsSbYcYIa8Z+BLdfnPtr5kSA==", + "version": "3.973.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.973.23.tgz", + "integrity": "sha512-GFfrjNXw+QteWbum8jD22G3T0FD/XiJEGp6r1CoqndMc6pxyQFoQ8nqTuNn1rbqYwqv4iCTl7GYoB9H17REKzw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@smithy/core": "^3.23.17", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", + "@aws-sdk/core": "^3.974.23", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { @@ -872,9 +531,9 @@ } }, "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.972.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.972.5.tgz", - "integrity": "sha512-itVdge0NozgtgmtbZ25FVwWU3vGlE7x7feE/aOEJNkQfEpbkrF8Rj1QmnK+2blFfYE1xWt/iU+6/jUp/pv1+MA==", + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.972.8.tgz", + "integrity": "sha512-bBmkG0Dnhfq0/T4Z0PpUr7HkncBVaWvvCbvafeaUM+yC9wa8GGjLJmonq0QL17REB9WivgGeYgWQ5A80Uw5UnQ==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -885,584 +544,411 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.10.tgz", - "integrity": "sha512-Vbc2frZH7wXlMNd+ZZSXUEs/l1Sv8Jj4zUnIfwrYF5lwaLdXHZ9xx4U3rjUcaye3HRhFVc+E5DbBxpRAbB16BA==", + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.972.19", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.972.19.tgz", + "integrity": "sha512-FMgyzUq3Jh+ONRYxryBRNdBd+FUX8PwRl07ccQknNdoms6KCeAEusCkl6whqpDrPQ6OH0ddeSifKyqYSs2DLIw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", + "@aws-sdk/endpoint-cache": "^3.972.8", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.972.11.tgz", - "integrity": "sha512-vXARCZVFQHdsd6qPPZyC/hh+5x2XsCYKqUQDCqnUlpGpChMpDojOOacQWdLJ+FFXKN8X3cmLOGrtgx/zysCKqQ==", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.974.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.30.tgz", + "integrity": "sha512-OaIhub+3yTgfFWPzKO8OzOZFIMUoJaiS5v67y3spQg7SoULGoMx4jKVBbE+uhnzkiZXQ+rEDS0RqrK4/aD1yJw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/endpoint-cache": "^3.972.5", - "@aws-sdk/types": "^3.973.8", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/checksums": "^3.1000.5", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.10.tgz", - "integrity": "sha512-2Yn0f1Qiq/DjxYR3wfI3LokXnjOhFM7Ssn4LTdFDIxRMCE6I32MAsVnhPX1cUZsuVA9tiZtwwhlSLAtFGxAZlQ==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.51", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.51.tgz", + "integrity": "sha512-keQgcIUTcHL0Qn7guhsuLaxQU36r9norCrxgaPH4DNCwon4TPtXdI/UdYuycl9vj3Dlwc3YR1dfL3U+6iIwJ6w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/signature-v4-multi-region": "^3.996.34", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.974.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.15.tgz", - "integrity": "sha512-j4Zp7rA1HfhDTteICnx/tPax4N/v5wmytgguXExUGyEwQ8Ug4EBA4kjp9puFAN1UZoBVpxoiXMiuTFvjaHjeEw==", + "node_modules/@aws-sdk/middleware-sdk-sqs": { + "version": "3.972.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.972.30.tgz", + "integrity": "sha512-PVAj7VgWK/ZxCXnkgC4B7cdJyUN99Nsr7IEduHt4A1GieuB+ZnU5bSifHwapbr17wrFkmdxfSh+aA0Lj+Ads6w==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/crc64-nvme": "^3.972.7", - "@aws-sdk/types": "^3.973.8", - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", - "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.23.tgz", + "integrity": "sha512-gO93ZPsI2bxeFZD42f1/qjDw6FAZkNZcKRO94LIiT03fzOmcJ9e/tunxjVjA1Rl69ClmVJzz8H3G9CdKef10PA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/signature-v4-multi-region": "^3.996.35", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.10.tgz", - "integrity": "sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==", + "node_modules/@aws-sdk/s3-presigned-post": { + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-presigned-post/-/s3-presigned-post-3.1068.0.tgz", + "integrity": "sha512-c6lXKsClR1/h8jEtKgkw12O7RXWMxtQ0fasBTV2pPalkHLZfk/VSbQuKbLz3a6iXLZMq8RKhTxf/EM0mmAdA3w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/client-s3": "3.1068.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/signature-v4": "^5.4.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", - "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.1068.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1068.0.tgz", + "integrity": "sha512-XTUoaBQH3pUlegqdoo7vkrOvlcRhSz/EO0/JYy9qKz4jdsOnPUlPY0p+rKTl27F91Gjgip8OXopiOFxVeN3Yvg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/signature-v4-multi-region": "^3.996.34", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", - "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.35", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.35.tgz", + "integrity": "sha512-6L/VWs+Wch2stHemCGTmUNqKLMzURxQDK5boNG3Jn3kAOp71meDUuS5sbObpEvFxHDq0uWeSLFDNSYsjNt+Dlg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.13", + "@smithy/signature-v4": "^5.4.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.36", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.36.tgz", - "integrity": "sha512-YhPix+0x/MdQrb1Ug1GDKeS5fqylIy+naz800asX8II4jqfTk2KY2KhmmYCwZcky8YWtRQQwWCGdoqeAnip8Uw==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.1074.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1074.0.tgz", + "integrity": "sha512-pv80IzgGW4RnXWtft692chZOM9i6PhebVsLCcnaM4dBEPZva2fE6FXAHs76G7Rc7s3yGyX/68G0nZMrUy+Vmpg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", + "@aws-sdk/core": "^3.974.23", + "@aws-sdk/nested-clients": "^3.997.23", + "@aws-sdk/types": "^3.973.13", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.972.22", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.972.22.tgz", - "integrity": "sha512-DtR3mEiOUJcnEX/QuXmvbJto6xvQzp2ftnHb29c0aQYdmmzbKf0gsu9ovx1i/yy4ZR6m0rttTucS0iiP32dlGA==", + "node_modules/@aws-sdk/types": { + "version": "3.973.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.13.tgz", + "integrity": "sha512-pEHZqRkAlHfnfAU9tK+WpKv/gBNjGJrHMgA3A0iYRGyswBS2t0pfez+lWlwktb3Bqa0ovh7w/QJTFwp3fDxLNg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.10.tgz", - "integrity": "sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==", + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.996.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.996.5.tgz", + "integrity": "sha512-m9bdmYq3WtbMHAKGALw9XWiMBfKu5T8ukgdJT7Mc/d2oOwDGNFmhsnnkQ18xomoXo/ZHxAuIDi3Y6slsblW1Mg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.1069.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.37.tgz", - "integrity": "sha512-N1oNpdiLoVAWYD3WFBnUi3LlfoDA06ZHo4ozyjbsJNLvILzvt//0CnR8N+CZ0NWeYgVB/5V59ivixHCWCx2ALw==", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@smithy/core": "^3.23.17", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-retry": "^4.3.6", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.997.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.5.tgz", - "integrity": "sha512-jGFr6DxtcMTmzOkG/a0jCZYv4BBDmeNYVeO+/memSoDkYCJu4Y58xviYmzwJfYyIVSts+X/BVjJm1uGBnwHEMg==", + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.31", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.31.tgz", + "integrity": "sha512-SzE4Pgyl+hDF+BuyuzxUSpwnuUu9lJuO1YGgteG89/4Qv0+2IQiVQqdbPV32IozLvXWQChPQcdkk/sKvb1QHiQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/signature-v4-multi-region": "^3.996.24", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.23", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", + "@smithy/types": "^4.14.3", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", - "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1039.0.tgz", - "integrity": "sha512-UPgDgAca+gBEfE/6uV+5CQNlSGakLybDld84HBppAMTREpljJ88pTOIEqP6hI16FMl1NeQZqei8HNc3j+kyK5A==", - "license": "Apache-2.0", - "peer": true, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "^3.996.24", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-format-url": "^3.972.10", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.24.tgz", - "integrity": "sha512-amP7tLikppN940wbBFISYqiuzVmpzMS9U3mcgtmVLjX4fdWI/SNCvrXv6ZxfVzTT4cT0rPKOLhFah2xLwzREWw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.36", - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, + "node_modules/@babel/compat-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0.tgz", + "integrity": "sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.1039.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1039.0.tgz", - "integrity": "sha512-NMSFL2HwkAOoCeLCQiqoOq5pT3vVbSjww2QZTuYgYknVwhhv125PSDzZIcL5EYnlxuPWjEOdauZK+FspkZDVdw==", - "license": "Apache-2.0", - "peer": true, + "node_modules/@babel/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", + "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "dev": true, + "license": "MIT", "dependencies": { - "@aws-sdk/core": "^3.974.7", - "@aws-sdk/nested-clients": "^3.997.5", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-compilation-targets": "^8.0.0", + "@babel/helpers": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/traverse": "^8.0.0", + "@babel/types": "^8.0.0", + "@types/gensync": "^1.0.5", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.1", + "gensync": "^1.0.0-beta.2", + "import-meta-resolve": "^4.2.0", + "json5": "^2.2.3", + "obug": "^2.1.1", + "semver": "^7.7.3" }, "engines": { - "node": ">=20.0.0" + "node": "^22.18.0 || >=24.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@aws-sdk/types": { - "version": "3.973.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", - "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", - "license": "Apache-2.0", - "peer": true, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" }, "engines": { - "node": ">=20.0.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", - "license": "Apache-2.0", - "peer": true, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", + "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" }, "engines": { - "node": ">=20.0.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.996.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.996.2.tgz", - "integrity": "sha512-ddpwaZmjBzcApYN7lgtAXjk+u+GO8fiPsxzuc59UqP+zqdxI1gsenPvkyiHiF9LnYnyRGijz6oN2JylnN561qQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.1003.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.996.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", - "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-endpoints": "^3.4.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-format-url": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.10.tgz", - "integrity": "sha512-DEKiHNJVtNxdyTeQspzY+15Po/kHm6sF0Cs4HV9Q2+lplB63+DrvdeiSoOSdWEWAoO2RcY1veoXVDz2tWxWCgQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", - "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@babel/core/node_modules/@babel/helper-globals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", + "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", - "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.23", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.23.tgz", - "integrity": "sha512-gGwq8L2Euw0aNG6Ey4EktiAo3fSCVoDy1CaBIthd+oeaKHPXUrNaApMewQ6La5Hv0lcznOtECZaNvYyc5LXXfA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.37", - "@aws-sdk/types": "^3.973.8", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "tslib": "^2.6.2" - }, + "node_modules/@babel/core/node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.22", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.22.tgz", - "integrity": "sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@nodable/entities": "2.1.0", - "@smithy/types": "^4.14.1", - "fast-xml-parser": "5.7.2", - "tslib": "^2.6.2" - }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.2.tgz", + "integrity": "sha512-9Fr9QeyCAyi1BR1jKZ6uYQ24EIhQUx5ReHfQU7drOE+TPOb+w11/dsqLkMOT2U29OdCT71XajrOT8xDc1C7orA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", - "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], + "node_modules/@babel/core/node_modules/@babel/parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0.tgz", + "integrity": "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.5", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" + "@babel/types": "^8.0.0" }, "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", - "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", - "license": "Apache-2.0", - "peer": true, + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=18.0.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "node_modules/@babel/core/node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.0.tgz", + "integrity": "sha512-bxTj/W2VclGE6CctlfQOpxg8MPDzXArRqkOBePw8EHfebcjF7fETWSS3BriEECo+UiU/Yblq+xUtSImFu7cTbw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-globals": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.0", + "obug": "^2.1.1" + }, "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0.tgz", + "integrity": "sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": "^22.18.0 || >=24.11.0" } }, + "node_modules/@babel/core/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/generator": { "version": "7.29.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", @@ -1481,20 +967,20 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0.tgz", + "integrity": "sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^8.0.0", + "@babel/helper-validator-option": "^8.0.0", "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "lru-cache": "^11.0.0", + "semver": "^7.7.3" }, "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-globals": { @@ -1507,38 +993,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", @@ -1570,29 +1024,115 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0.tgz", + "integrity": "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0.tgz", + "integrity": "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.2.tgz", + "integrity": "sha512-9Fr9QeyCAyi1BR1jKZ6uYQ24EIhQUx5ReHfQU7drOE+TPOb+w11/dsqLkMOT2U29OdCT71XajrOT8xDc1C7orA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0.tgz", + "integrity": "sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0.tgz", + "integrity": "sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" } }, + "node_modules/@babel/helpers/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/parser": { "version": "7.29.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", @@ -1953,9 +1493,9 @@ } }, "node_modules/@dmptool/types": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@dmptool/types/-/types-3.1.5.tgz", - "integrity": "sha512-xcrRW0atCsxT5CdhuhMxD6EpnC7fC/snLvMpB5y6tg/7iJidEoap0buHdYRlBcAdv8dm/sqeIwNioA8vT7mDNQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@dmptool/types/-/types-3.1.7.tgz", + "integrity": "sha512-5ncz/LHe7knpzRgRYf/W5rQhvDrLHtHyZZLWaspab3PbzaIHVyMg4dxMItscyDzHJguC7vur0Tc0kUkw6o73lA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1964,30 +1504,31 @@ } }, "node_modules/@dmptool/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@dmptool/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-AIaFKi9hjABWkseUbpx4KkMlscGKPwACwYZQC44za/euXoSIpu1Ls4hdBUZ9KAa4rJh10HTdJSFzyR4u4qviIQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@dmptool/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-fEwye1AbUpl9NhFWD3gXFNjpefRWx1PV2NjS6WCAyLazEA/jTWZVyqd0oC3Tg+Z2BEvf9X+WPd5nGekvBnpqyw==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@dmptool/types": "^3.1.4", + "@aws-sdk/s3-presigned-post": "^3.1068.0", + "@dmptool/types": "^3.1.6", "@elastic/ecs-pino-format": "^1.5.0", - "date-fns": "^4.1.0", + "date-fns": "^4.4.0", "jsonschema": "^1.5.0", - "mysql2": "^3.22.3", + "mysql2": "^3.22.5", "pino": "^10.3.1", "pino-lambda": "^4.4.1" }, "peerDependencies": { - "@aws-sdk/client-cloudformation": "^3.1039.0", - "@aws-sdk/client-dynamodb": "^3.1039.0", - "@aws-sdk/client-s3": "^3.1039.0", - "@aws-sdk/client-sns": "^3.1039.0", - "@aws-sdk/client-sqs": "^3.1039.0", - "@aws-sdk/client-ssm": "^3.1039.0", - "@aws-sdk/s3-request-presigner": "^3.1039.0", - "@aws-sdk/util-dynamodb": "^3.996.2", - "@smithy/node-http-handler": "^4.6.1" + "@aws-sdk/client-cloudformation": "^3.1068.0", + "@aws-sdk/client-dynamodb": "^3.1068.0", + "@aws-sdk/client-s3": "^3.1068.0", + "@aws-sdk/client-sns": "^3.1068.0", + "@aws-sdk/client-sqs": "^3.1068.0", + "@aws-sdk/client-ssm": "^3.1068.0", + "@aws-sdk/s3-request-presigner": "^3.1068.0", + "@aws-sdk/util-dynamodb": "^3.996.4", + "@smithy/node-http-handler": "^4.7.8" } }, "node_modules/@elastic/ecs-helpers": { @@ -2090,9 +1631,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", "cpu": [ "ppc64" ], @@ -2107,9 +1648,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], @@ -2124,9 +1665,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], @@ -2141,9 +1682,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], @@ -2158,9 +1699,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -2175,9 +1716,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", "cpu": [ "x64" ], @@ -2192,9 +1733,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", "cpu": [ "arm64" ], @@ -2209,9 +1750,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", "cpu": [ "x64" ], @@ -2226,9 +1767,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", "cpu": [ "arm" ], @@ -2243,9 +1784,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", "cpu": [ "arm64" ], @@ -2259,9 +1800,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", "cpu": [ "ia32" ], @@ -2276,9 +1817,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", "cpu": [ "loong64" ], @@ -2293,9 +1834,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", "cpu": [ "mips64el" ], @@ -2310,9 +1851,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", "cpu": [ "ppc64" ], @@ -2327,9 +1868,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", "cpu": [ "riscv64" ], @@ -2344,9 +1885,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", "cpu": [ "s390x" ], @@ -2361,9 +1902,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", "cpu": [ "x64" ], @@ -2378,9 +1919,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", "cpu": [ "arm64" ], @@ -2395,9 +1936,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", "cpu": [ "x64" ], @@ -2412,9 +1953,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", "cpu": [ "arm64" ], @@ -2429,9 +1970,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", "cpu": [ "x64" ], @@ -2446,9 +1987,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", "cpu": [ "arm64" ], @@ -2463,9 +2004,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", "cpu": [ "x64" ], @@ -2480,9 +2021,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", "cpu": [ "arm64" ], @@ -2497,9 +2038,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", "cpu": [ "ia32" ], @@ -2514,9 +2055,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", "cpu": [ "x64" ], @@ -2645,9 +2186,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", - "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2874,9 +2415,9 @@ } }, "node_modules/@fastify/rate-limit": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-10.3.0.tgz", - "integrity": "sha512-eIGkG9XKQs0nyynatApA3EVrojHOuq4l6fhB4eeCk4PIOeadvOJz9/4w3vGI44Go17uaXOWEcPkaD8kuKm7g6Q==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-11.0.0.tgz", + "integrity": "sha512-kCs+G59SitZw9TL/ekFe+MrzXk20dEp6zPAM8WEZjFl5Ubvv5ksTbEXYr4jGlBwWAKn78q+NFsj5CN75zXLjaw==", "funding": [ { "type": "github", @@ -2984,9 +2525,9 @@ } }, "node_modules/@fastify/swagger-ui": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@fastify/swagger-ui/-/swagger-ui-5.2.6.tgz", - "integrity": "sha512-OMnms0O5s9wb6wis/K5nlrAMLsgUbr1GA8uphM41IasWe3AFdgxz6r/3bA9HTxlDNUYc2FGGKeqMp3ntxmSiNA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@fastify/swagger-ui/-/swagger-ui-6.0.0.tgz", + "integrity": "sha512-L9c4CbXj3FnquqpCmn0IfbEeIqDUNi6QwXd23VhQj/bHEjNzDFIAy2W9I3prvSqM+mJWOElIa6uXROmcMDnfUA==", "funding": [ { "type": "github", @@ -3007,13 +2548,13 @@ } }, "node_modules/@graphql-codegen/add": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-7.0.0.tgz", - "integrity": "sha512-fQGlUQd0BpoevCTOKi3b7M+kuXCI13udXmJrIh1QMtTCLXUTYGgsubNVcPLr0cVjVwyBK/ZRgwtxdCmkVXqTwQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-7.0.1.tgz", + "integrity": "sha512-kWw6RMu9ysBw1wcgcgf9mOnswc5M3ekOApDTiaJC/UZNTEYins01srZHYTP7z3P/WlGGC844BRtjwh3U2kNd/A==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", "tslib": "^2.8.0" }, "engines": { @@ -3024,18 +2565,18 @@ } }, "node_modules/@graphql-codegen/cli": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-7.0.0.tgz", - "integrity": "sha512-SNgTiFU/jB3VJLr8koJjmXAwl60wG/9r5iQBiOmlf0m9KRaiCNmfDG6+VbeejJPkDIGJKQd0SwqV5i+fxdnjqA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-7.1.3.tgz", + "integrity": "sha512-mMYwpvpqJjjHoA/c6HBjdlbT8JqFC6W85RB80tpHACapufBnLlyNtYHYeOYAoUuU1n3cGQi1if1pKHnjLgS/eQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", "@babel/types": "^7.18.13", - "@graphql-codegen/client-preset": "^6.0.0", - "@graphql-codegen/core": "^6.0.0", - "@graphql-codegen/plugin-helpers": "^7.0.0", + "@graphql-codegen/client-preset": "^6.0.1", + "@graphql-codegen/core": "^6.1.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", "@graphql-tools/apollo-engine-loader": "^8.0.28", "@graphql-tools/code-file-loader": "^8.1.28", "@graphql-tools/git-loader": "^8.0.32", @@ -3086,33 +2627,357 @@ } } }, - "node_modules/@graphql-codegen/cli/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/checkbox": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.1.tgz", + "integrity": "sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, "engines": { - "node": ">=12" + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@graphql-codegen/cli/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, "engines": { - "node": ">=12" + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@graphql-codegen/cli/node_modules/chalk": { + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/editor": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.2.2.tgz", + "integrity": "sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/external-editor": "^3.0.3", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/expand": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.1.tgz", + "integrity": "sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/input": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.2.tgz", + "integrity": "sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/number": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.1.1.tgz", + "integrity": "sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/password": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.1.tgz", + "integrity": "sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/rawlist": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.1.tgz", + "integrity": "sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/search": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.2.1.tgz", + "integrity": "sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/select": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.1.tgz", + "integrity": "sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@inquirer/type": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz", + "integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@graphql-codegen/cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@graphql-codegen/cli/node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", @@ -3147,6 +3012,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@graphql-codegen/cli/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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@graphql-codegen/cli/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -3218,21 +3096,21 @@ } }, "node_modules/@graphql-codegen/client-preset": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-6.0.0.tgz", - "integrity": "sha512-nqidNH4rrulv0E2ZVkYcIWz5Jon+hLBKkx/Xp8KyRJ8WnNRD0kJO1ra8ECLU/JS8LuZehSJyCfoQh555TT5TEw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-6.0.1.tgz", + "integrity": "sha512-6wh0ZHG9WzBD6bE4AVOO6VCCMXK2orxHuXxaNKj+sj1w0qZ3Y3WIjZnqZLg6JZrHCIs/e+gy3T15Dc2pH8IbHA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", - "@graphql-codegen/add": "^7.0.0", - "@graphql-codegen/gql-tag-operations": "6.0.0", - "@graphql-codegen/plugin-helpers": "^7.0.0", - "@graphql-codegen/typed-document-node": "^7.0.0", - "@graphql-codegen/typescript": "^6.0.0", - "@graphql-codegen/typescript-operations": "^6.0.0", - "@graphql-codegen/visitor-plugin-common": "^7.0.0", + "@graphql-codegen/add": "^7.0.1", + "@graphql-codegen/gql-tag-operations": "^6.0.1", + "@graphql-codegen/plugin-helpers": "^7.0.1", + "@graphql-codegen/typed-document-node": "^7.0.1", + "@graphql-codegen/typescript": "^6.0.2", + "@graphql-codegen/typescript-operations": "^6.0.3", + "@graphql-codegen/visitor-plugin-common": "^7.0.3", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^11.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -3252,13 +3130,13 @@ } }, "node_modules/@graphql-codegen/core": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-6.0.0.tgz", - "integrity": "sha512-/UDolbUC6q6MTHNvEUDq+vC3ugycxAQ71S62WB3RDXzbBVIG5MG5Kw89WFOh+dt/s+mRuX+tx+Vz/si81sZ0aw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-6.1.0.tgz", + "integrity": "sha512-jReAzuCYlrSBJHW2bfBpDl/vMRCw0yQEoTvGi9K+3OTsazDXEQGOpCVfj8p/xO2h7ynu5Yrvzo0sUylVv0CnwA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^11.0.0", "tslib": "^2.8.0" @@ -3271,14 +3149,14 @@ } }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-6.0.0.tgz", - "integrity": "sha512-IBwQ/jYx5Z4yMV78oVGU3hhNu/I7xFiQpFXavZujwCvoyH611M/JAoZ/RTExjr9stzcKMmNxJV/1Pknv+5M9Fg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-6.0.1.tgz", + "integrity": "sha512-eHYUIchZLG6G+kafeKnUByL2Nkmb8Uj2vg33UVLFj8XJ2coC4b1iRDWxCdTXbupZrN0FaM0QRRBLs3zBEAzcJg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", - "@graphql-codegen/visitor-plugin-common": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", + "@graphql-codegen/visitor-plugin-common": "^7.0.3", "@graphql-tools/utils": "^11.0.0", "auto-bind": "^5.0.0", "tslib": "^2.8.0" @@ -3291,9 +3169,9 @@ } }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-7.0.0.tgz", - "integrity": "sha512-w7Oa8fH8B1ID9yFoV7qfmKdBxQtjfSHmHffJx6bOhgKyEbD6xVSplK+J6O2sefY5GUdCSx0F+tupBYQjJ7kyvg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-7.0.1.tgz", + "integrity": "sha512-S2X0YT3XQbP2haqhIeku8GOXo2j8QuBu7BrLsOEHz4UeMu78y3rja1Q4ri3oJ0jq4dMgaQlazoVHI/A+FAKMGw==", "dev": true, "license": "MIT", "dependencies": { @@ -3311,13 +3189,13 @@ } }, "node_modules/@graphql-codegen/schema-ast": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-6.0.0.tgz", - "integrity": "sha512-ww6lfCZYBZk8SbnOKp76FLvBrMD6oqFhAGj8Ov8f+bsrNh0SG1M6mxLWh4nl9hWIu/iwsZgrJcuIrTfyBeF6jQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-6.0.1.tgz", + "integrity": "sha512-P16b6XCWXfcrA4fkuAyqoy883USAULifv8YWgEOrNKDAnr2DR+Kr85jSomknIUTY39wiuvisv4/lrdXobwK6sA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", "@graphql-tools/utils": "^11.0.0", "tslib": "^2.8.0" }, @@ -3329,14 +3207,14 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-7.0.0.tgz", - "integrity": "sha512-gSsMEKe1QV5QmF+TsijSyhLYGYRYGD2fe7rGIJwca4s1gZK+aD3qjNFq3C0yFUsb92bsCxiOJTWeiPPfdPSMTg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-7.0.3.tgz", + "integrity": "sha512-l/4KenYJG5D8Aj6Aa2KPeS0fdMIIi04Qx28d4SLwMWuyFU9WXspU5mR9YMNDRZzaTgBtGR8aMIl9RzyiWf5uUw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", - "@graphql-codegen/visitor-plugin-common": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", + "@graphql-codegen/visitor-plugin-common": "^7.1.0", "auto-bind": "^5.0.0", "change-case-all": "^2.1.0", "tslib": "^2.8.0" @@ -3349,17 +3227,17 @@ } }, "node_modules/@graphql-codegen/typescript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-6.0.0.tgz", - "integrity": "sha512-Kw37kf10nSYBF0ag1IHlXoQ0kEhp9UNi4zK+5MipUNU1wXaFsC/wm+J/JzW+07as3u4CagMJHRTv/nP6VoY5fA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-zyLfKsFJ7TRkQ0PyaUVuiAek9TSbtVJwwBoOuaE9RAWr45+9Y5W1LYldpiSTcyfxKVSIniE7Gj0V87qzrpdyYw==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", - "@graphql-codegen/schema-ast": "^6.0.0", - "@graphql-codegen/visitor-plugin-common": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", + "@graphql-codegen/schema-ast": "^6.0.1", + "@graphql-codegen/visitor-plugin-common": "^7.0.3", "auto-bind": "^5.0.0", - "tslib": "~2.6.0" + "tslib": "~2.8.0" }, "engines": { "node": ">=16" @@ -3369,15 +3247,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-6.0.0.tgz", - "integrity": "sha512-bQJ+UgEuZJOE4RJ66XC/Xdm5qAGXQbGzsUgEDnvt9WW0HiirIS6Xhde/4mWoNoT4d6vBBIEZmIVY7cJKKWbgZw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-6.0.4.tgz", + "integrity": "sha512-YUmnmZcJ6wMcC2VmTE7gw18zoG4S1VF1aJmaupDrBnwfKGA5BmdKrA6k2Wj6ZkUDOduHI60l/cmZBRtqel4VtQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", - "@graphql-codegen/schema-ast": "^6.0.0", - "@graphql-codegen/visitor-plugin-common": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", + "@graphql-codegen/schema-ast": "^6.0.1", + "@graphql-codegen/visitor-plugin-common": "^7.1.0", "auto-bind": "^5.0.0", "tslib": "^2.8.0" }, @@ -3394,21 +3272,14 @@ } } }, - "node_modules/@graphql-codegen/typescript/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-7.0.0.tgz", - "integrity": "sha512-fHVzAaH3atPbIniVqKGOgDdu60oUYGqVz9hqj+ejgM1oWUMYdJb3D3oAgXxdCOM05z4DI0A9/u3kQuTr5WnRQw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-7.1.0.tgz", + "integrity": "sha512-CO4fJyflbYBuAwbQD16bAuWBIXkz9il3JwyC+pQzXh8NJ+BZZDXmYjmVeGeJuoMUIQDb+CNo2thCU0bFFamAkg==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^7.0.0", + "@graphql-codegen/plugin-helpers": "^7.0.1", "@graphql-tools/optimize": "^2.0.0", "@graphql-tools/relay-operation-optimizer": "^7.1.1", "@graphql-tools/utils": "^11.0.0", @@ -3976,360 +3847,23 @@ } }, "node_modules/@inquirer/ansi": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.5.tgz", - "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz", + "integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" } }, - "node_modules/@inquirer/checkbox": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.4.tgz", - "integrity": "sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==", + "node_modules/@inquirer/figures": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz", + "integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==", "dev": true, "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", - "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "11.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.9.tgz", - "integrity": "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5", - "cli-width": "^4.1.0", - "fast-wrap-ansi": "^0.2.0", - "mute-stream": "^3.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core/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, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@inquirer/editor": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.1.tgz", - "integrity": "sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/external-editor": "^3.0.0", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.13.tgz", - "integrity": "sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.0.tgz", - "integrity": "sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.2" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.5.tgz", - "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - } - }, - "node_modules/@inquirer/input": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.12.tgz", - "integrity": "sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.12.tgz", - "integrity": "sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.12.tgz", - "integrity": "sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", - "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^5.1.4", - "@inquirer/confirm": "^6.0.12", - "@inquirer/editor": "^5.1.1", - "@inquirer/expand": "^5.0.13", - "@inquirer/input": "^5.0.12", - "@inquirer/number": "^4.0.12", - "@inquirer/password": "^5.0.12", - "@inquirer/rawlist": "^5.2.8", - "@inquirer/search": "^4.1.8", - "@inquirer/select": "^5.1.4" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.8.tgz", - "integrity": "sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.8.tgz", - "integrity": "sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.9", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.4.tgz", - "integrity": "sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.5.tgz", - "integrity": "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" } }, "node_modules/@isaacs/cliui": { @@ -4682,6 +4216,23 @@ } } }, + "node_modules/@jest/reporters/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@jest/reporters/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -4876,17 +4427,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -4937,19 +4477,6 @@ "@tybys/wasm-util": "^0.10.0" } }, - "node_modules/@nodable/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/nodable" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5052,159 +4579,28 @@ "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz", - "integrity": "sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==", + "node_modules/@smithy/core": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.26.0.tgz", + "integrity": "sha512-mLUktFAn+Pa2agl1J7VgtYNFWCX8/b4GMJSK1hCu4YCvtBfM6F8Os3EP4ry+DFFlXOf3wyvlgXhuUdFoy52D3g==", "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz", - "integrity": "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/util-base64": "^4.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", - "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "3.23.17", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.17.tgz", - "integrity": "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", - "@smithy/uuid": "^1.1.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", - "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz", - "integrity": "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==", - "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.14.1", - "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/types": "^4.15.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.14.tgz", - "integrity": "sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.14.tgz", - "integrity": "sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.14.tgz", - "integrity": "sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.14.tgz", - "integrity": "sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.2.tgz", + "integrity": "sha512-18UMDMyrAbDcpmL1gLUA7ww0fRTcdCrSjSJOi2Sbld+tVjwD/pW+OAwjlScFLR7vvBnhZrIPQ7kVuTf1mnJLug==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/eventstream-codec": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/core": "^3.26.0", + "@smithy/types": "^4.15.0", "tslib": "^2.6.2" }, "engines": { @@ -5212,77 +4608,13 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", - "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.7.tgz", + "integrity": "sha512-NslaM2ir0N2hisDmzXLstPaVINZheh8SokyOC++kzFPloZucL2R7Y7bS57mSzx/1Fc/fqmn7twjkeezTTrV0EA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.15.tgz", - "integrity": "sha512-0PJ4Al3fg2nM4qKrAIxyNcApgqHAXcBkN8FeizOz69z0rb26uZ6lMESYtxegaTlXB5Hj84JfwMPavMrwDMjucA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/chunked-blob-reader": "^5.2.2", - "@smithy/chunked-blob-reader-native": "^4.2.3", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", - "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.14.tgz", - "integrity": "sha512-tw4GANWkZPb6+BdD4Fgucqzey2+r73Z/GRo9zklsCdwrnxxumUV83ZIaBDdudV4Ylazw3EPTiJZhpX42105ruQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", - "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/core": "^3.24.7", + "@smithy/types": "^4.14.4", "tslib": "^2.6.2" }, "engines": { @@ -5290,230 +4622,25 @@ } }, "node_modules/@smithy/is-array-buffer": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", - "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.14.tgz", - "integrity": "sha512-V2v0vx+h0iUSNG1Alt+GNBMSLGCrl9iVsdd+Ap67HPM9PN479x12V8LkuMoKImNZxn3MXeuyUjls+/7ZACZghA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", - "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.32", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.32.tgz", - "integrity": "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/core": "^3.23.17", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-middleware": "^4.2.14", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.7.tgz", - "integrity": "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/service-error-classification": "^4.3.1", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/uuid": "^1.1.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.20", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.20.tgz", - "integrity": "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/core": "^3.23.17", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", - "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", - "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.1.tgz", - "integrity": "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg==", + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.8.tgz", + "integrity": "sha512-f+DbsWUwSbtMu1a/j8Y93KiU1SRg9nyzfjereqn1BJ33QOTUXxdlYvVXMhAYl1vuR1Kmna5aIJe09KSIfyFNYw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", - "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", - "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", - "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "@smithy/util-uri-escape": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", - "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.1.tgz", - "integrity": "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", - "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/core": "^3.24.7", + "@smithy/types": "^4.14.4", "tslib": "^2.6.2" }, "engines": { @@ -5521,38 +4648,13 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", - "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.7.tgz", + "integrity": "sha512-LwQZazFayImv+IOm0S0enoLeUJwmAlhGC5O6YCcLWezyu08dF46GOxPOq35OpBIHkgd7OvNvBStIFwVNyrvoBw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-uri-escape": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.12.13", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.13.tgz", - "integrity": "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/core": "^3.23.17", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.25", + "@smithy/core": "^3.24.7", + "@smithy/types": "^4.14.4", "tslib": "^2.6.2" }, "engines": { @@ -5560,67 +4662,10 @@ } }, "node_modules/@smithy/types": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", - "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", - "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/querystring-parser": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", - "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", - "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.0.tgz", + "integrity": "sha512-Z5TAOxygoFvybJV3igo5SloFflSokHx2hu1eFA+DxDTcn+FtKxUSui+rbTRG1pAafMA888Z3MVvCWUuvCrTXjg==", "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", - "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", - "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -5629,196 +4674,29 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", - "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", - "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.49", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz", - "integrity": "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.54", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz", - "integrity": "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/config-resolver": "^4.4.17", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", - "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", - "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", - "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.6.tgz", - "integrity": "sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/service-error-classification": "^4.3.1", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "4.5.25", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.25.tgz", - "integrity": "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", - "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", - "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/util-buffer-from": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.3.0.tgz", - "integrity": "sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/uuid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", - "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, "node_modules/@tsconfig/node10": { @@ -5919,6 +4797,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/gensync": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.5.tgz", + "integrity": "sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -5946,6 +4831,13 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -5954,13 +4846,10 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", - "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", - "license": "MIT", - "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" - } + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", @@ -5997,17 +4886,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.4.tgz", - "integrity": "sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.0.tgz", + "integrity": "sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.4", - "@typescript-eslint/type-utils": "8.59.4", - "@typescript-eslint/utils": "8.59.4", - "@typescript-eslint/visitor-keys": "8.59.4", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/type-utils": "8.62.0", + "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -6020,7 +4909,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.59.4", + "@typescript-eslint/parser": "^8.62.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -6036,16 +4925,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.4.tgz", - "integrity": "sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.0.tgz", + "integrity": "sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.4", - "@typescript-eslint/types": "8.59.4", - "@typescript-eslint/typescript-estree": "8.59.4", - "@typescript-eslint/visitor-keys": "8.59.4", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3" }, "engines": { @@ -6061,14 +4950,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.4.tgz", - "integrity": "sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", + "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.4", - "@typescript-eslint/types": "^8.59.4", + "@typescript-eslint/tsconfig-utils": "^8.62.0", + "@typescript-eslint/types": "^8.62.0", "debug": "^4.4.3" }, "engines": { @@ -6083,14 +4972,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.4.tgz", - "integrity": "sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", + "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.4", - "@typescript-eslint/visitor-keys": "8.59.4" + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6101,9 +4990,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.4.tgz", - "integrity": "sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", + "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", "dev": true, "license": "MIT", "engines": { @@ -6118,15 +5007,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.4.tgz", - "integrity": "sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", + "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.4", - "@typescript-eslint/typescript-estree": "8.59.4", - "@typescript-eslint/utils": "8.59.4", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -6143,9 +5032,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.4.tgz", - "integrity": "sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", + "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", "dev": true, "license": "MIT", "engines": { @@ -6157,16 +5046,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.4.tgz", - "integrity": "sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", + "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.59.4", - "@typescript-eslint/tsconfig-utils": "8.59.4", - "@typescript-eslint/types": "8.59.4", - "@typescript-eslint/visitor-keys": "8.59.4", + "@typescript-eslint/project-service": "8.62.0", + "@typescript-eslint/tsconfig-utils": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -6178,36 +5067,23 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.4.tgz", - "integrity": "sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", + "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.4", - "@typescript-eslint/types": "8.59.4", - "@typescript-eslint/typescript-estree": "8.59.4" + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6222,13 +5098,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.4.tgz", - "integrity": "sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", + "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.4", + "@typescript-eslint/types": "8.62.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -6818,14 +5694,11 @@ "license": "MIT" }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", @@ -7009,9 +5882,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.19", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz", - "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==", + "version": "2.10.38", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7031,8 +5904,7 @@ "version": "2.14.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/brace-expansion": { "version": "5.0.6", @@ -7060,9 +5932,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", + "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", "dev": true, "funding": [ { @@ -7080,10 +5952,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", + "baseline-browser-mapping": "^2.10.38", + "caniuse-lite": "^1.0.30001799", + "electron-to-chromium": "^1.5.376", + "node-releases": "^2.0.48", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -7144,9 +6016,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001788", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", - "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", "dev": true, "funding": [ { @@ -7211,9 +6083,9 @@ } }, "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", "dev": true, "license": "MIT" }, @@ -7423,6 +6295,13 @@ "node": ">=4.0.0" } }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, "node_modules/content-disposition": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", @@ -7483,26 +6362,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "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" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7556,9 +6415,9 @@ "license": "MIT" }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", "license": "MIT", "funding": { "type": "github", @@ -7748,9 +6607,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.338", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.338.tgz", - "integrity": "sha512-KVQQ3xko9/coDX3qXLUEEbqkKT8L+1DyAovrtu0Khtrt9wjSZ+7CZV4GVzxFy9Oe1NbrIU1oVXCwHJruIA1PNg==", + "version": "1.5.377", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.377.tgz", + "integrity": "sha512-cH1jZgJHoezfTnKfKwnScpHywTFVnJUNITDPREFdhNjiuD502+QFpG0Qk7G8jhsV/f+CEAFlIrzP1fT+IMb92g==", "dev": true, "license": "ISC" }, @@ -7774,6 +6633,16 @@ "dev": true, "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -7817,9 +6686,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7830,32 +6699,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { @@ -7888,18 +6757,21 @@ } }, "node_modules/eslint": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", - "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", + "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", - "@eslint/plugin-kit": "^0.7.1", + "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -8042,20 +6914,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -8349,32 +7207,15 @@ "license": "BSD-3-Clause" }, "node_modules/fast-wrap-ansi": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", - "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", "dev": true, "license": "MIT", "dependencies": { "fast-string-width": "^3.0.2" } }, - "node_modules/fast-xml-builder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", - "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "path-expression-matcher": "^1.5.0", - "xml-naming": "^0.1.0" - } - }, "node_modules/fastfall": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz", @@ -8446,18 +7287,6 @@ "fastify": "cli.js" } }, - "node_modules/fastify-cli/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fastify-plugin": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.1.0.tgz", @@ -8474,18 +7303,6 @@ ], "license": "MIT" }, - "node_modules/fastify/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fastparallel": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.1.tgz", @@ -8846,9 +7663,9 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.0.tgz", - "integrity": "sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==", + "version": "16.14.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.2.tgz", + "integrity": "sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -8886,13 +7703,6 @@ } } }, - "node_modules/graphql-config/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/graphql-config/node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -8920,19 +7730,6 @@ } } }, - "node_modules/graphql-config/node_modules/js-yaml": { - "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" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/graphql-tag": { "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", @@ -9092,9 +7889,9 @@ } }, "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz", + "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==", "dev": true, "license": "MIT" }, @@ -9158,6 +7955,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -9434,19 +8242,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -9665,6 +8460,23 @@ } } }, + "node_modules/jest-config/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/jest-config/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -10021,6 +8833,23 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/jest-runtime/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/jest-runtime/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -10116,19 +8945,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-util": { "version": "30.4.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", @@ -10258,17 +9074,26 @@ "license": "MIT" }, "node_modules/js-yaml": { - "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==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.1.0.tgz", + "integrity": "sha512-s8VA5jkR8f22S3NAXmhKPFqGUduqZGlsufabVOgN14iTdw/RXcym7bKkbwjxLK9Yw2lEvvmJjFp119+KPeo8Kg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "js-yaml": "bin/js-yaml.mjs" } }, "node_modules/jsesc": { @@ -10787,13 +9612,12 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" } }, "node_modules/lru.min": { @@ -10827,19 +9651,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -11029,9 +9840,9 @@ } }, "node_modules/mysql2": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.22.3.tgz", - "integrity": "sha512-uWWxvZSRvRhtBdh2CdcuK83YcOfPdmEeEYB069bAmPnV93QApDGVPuvCQOLjlh7tYHEWdgQPrn6kosDxHBVLkA==", + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.22.5.tgz", + "integrity": "sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==", "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.2", @@ -11140,11 +9951,14 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.37", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", - "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", + "integrity": "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11176,6 +9990,20 @@ "license": "MIT", "peer": true }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/on-exit-leak-free": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", @@ -11364,22 +10192,6 @@ "node": ">=8" } }, - "node_modules/path-expression-matcher": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", - "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -11439,15 +10251,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", - "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -12080,13 +10883,15 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/set-cookie-parser": { @@ -12125,9 +10930,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", "dev": true, "license": "MIT", "engines": { @@ -12246,13 +11051,6 @@ "dev": true, "license": "MIT" }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/sql-escaper": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.3.3.tgz", @@ -12434,19 +11232,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", - "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12512,6 +11297,24 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -12570,9 +11373,9 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { @@ -12653,9 +11456,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.10", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.10.tgz", - "integrity": "sha512-vMTlTTtvz5aKZgzOoc7DQ5TzAL2fCzl8JnG1+ZpwjQa/g0xLlwE44yQ+1Cao9ZP1xVv9y5g34IFXEiqGOGFBUA==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, "license": "MIT", "dependencies": { @@ -12705,19 +11508,6 @@ } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/type-fest": { "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", @@ -12803,9 +11593,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.3.tgz", - "integrity": "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz", + "integrity": "sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==", "dev": true, "license": "MIT", "dependencies": { @@ -12872,16 +11662,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.59.4", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.4.tgz", - "integrity": "sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.0.tgz", + "integrity": "sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.59.4", - "@typescript-eslint/parser": "8.59.4", - "@typescript-eslint/typescript-estree": "8.59.4", - "@typescript-eslint/utils": "8.59.4" + "@typescript-eslint/eslint-plugin": "8.62.0", + "@typescript-eslint/parser": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12919,12 +11709,6 @@ "node": ">=0.10.0" } }, - "node_modules/undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", - "license": "MIT" - }, "node_modules/unixify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", @@ -13195,9 +11979,9 @@ } }, "node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "devOptional": true, "license": "MIT", "engines": { @@ -13216,22 +12000,6 @@ } } }, - "node_modules/xml-naming": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", - "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -13251,13 +12019,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/yaml": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", diff --git a/package.json b/package.json index c512bb4..f09848f 100644 --- a/package.json +++ b/package.json @@ -27,41 +27,43 @@ "prepare": "husky" }, "overrides": { - "brace-expansion": "5.0.6", - "ws": "8.20.1" + "@babel/core": "8.0.1", + "js-yaml": "5.1.0", + "ws": "8.21.0" }, "dependencies": { - "@apollo/client": "^4.1.9", - "@dmptool/types": "^3.1.5", - "@dmptool/utils": "^2.1.1", + "@apollo/client": "^4.2.3", + "@dmptool/types": "^3.1.7", + "@dmptool/utils": "^2.1.4", "@fastify/accept-negotiator": "^2.0.1", "@fastify/cookie": "^11.0.2", "@fastify/error": "^4.2.0", "@fastify/jwt": "^10.1.0", - "@fastify/rate-limit": "^10.3.0", + "@fastify/rate-limit": "^11.0.0", "@fastify/routes": "^6.0.2", "@fastify/swagger": "^9.7.0", - "@fastify/swagger-ui": "^5.2.6", + "@fastify/swagger-ui": "^6.0.0", "dotenv": "^17.4.2", "fastify": "^5.8.5", "fastify-cli": "^8.0.0", - "graphql": "^16.14.0" + "graphql": "^16.14.2", + "zod": "^4.4.3" }, "devDependencies": { "@eslint/js": "^10.0.1", - "@graphql-codegen/cli": "^7.0.0", - "@types/node": "^25.9.1", + "@graphql-codegen/cli": "^7.1.3", + "@types/node": "^16.0.0", "babel-jest": "^30.4.1", - "eslint": "^10.4.0", + "eslint": "^10.5.0", "husky": "^9.1.7", "jest": "^30.4.2", "jest-expect-message": "^1.1.3", "pino-pretty": "^13.1.3", - "ts-jest": "^29.4.10", + "ts-jest": "^29.4.11", "ts-node": "^10.9.2", - "tsx": "^4.22.3", + "tsx": "^4.22.4", "typescript": "^6.0.3", - "typescript-eslint": "^8.59.4" + "typescript-eslint": "^8.62.0" }, "optionalDependencies": { "@esbuild/linux-arm64": "latest" diff --git a/src/generated/gql.ts b/src/generated/gql.ts index b2c6a81..ed05453 100644 --- a/src/generated/gql.ts +++ b/src/generated/gql.ts @@ -15,35 +15,39 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ type Documents = { "mutation AddAffiliation($input: AffiliationInput!) {\n addAffiliation(input: $input) {\n id\n name\n uri\n errors {\n general\n uri\n name\n displayName\n searchName\n provenance\n }\n }\n}": typeof types.AddAffiliationDocument, + "mutation AddAnswer($planId: Int!, $versionedSectionId: Int, $versionedQuestionId: Int, $versionedCustomSectionId: Int, $versionedCustomQuestionId: Int, $json: String) {\n addAnswer(\n planId: $planId\n versionedSectionId: $versionedSectionId\n versionedQuestionId: $versionedQuestionId\n versionedCustomSectionId: $versionedCustomSectionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n json: $json\n ) {\n id\n json\n errors {\n json\n planId\n versionedSectionId\n versionedQuestionId\n }\n }\n}\n\nmutation UpdateAnswer($answerId: Int!, $json: String) {\n updateAnswer(answerId: $answerId, json: $json) {\n id\n json\n errors {\n json\n }\n }\n}": typeof types.AddAnswerDocument, "mutation AddProjectCollaborator($projectId: Int!, $email: String!) {\n addProjectCollaborator(projectId: $projectId, email: $email) {\n id\n email\n accessLevel\n user {\n id\n email\n }\n invitedBy {\n id\n email\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n email\n accessLevel\n }\n }\n}\n\nmutation UpdateProjectCollaborator($projectCollaboratorId: Int!, $accessLevel: ProjectCollaboratorAccessLevel!) {\n updateProjectCollaborator(\n projectCollaboratorId: $projectCollaboratorId\n accessLevel: $accessLevel\n ) {\n errors {\n general\n accessLevel\n }\n id\n modified\n modifiedById\n accessLevel\n }\n}\n\nmutation RemoveProjectCollaborator($projectCollaboratorId: Int!) {\n removeProjectCollaborator(projectCollaboratorId: $projectCollaboratorId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": typeof types.AddProjectCollaboratorDocument, "mutation AddProjectFunding($input: AddProjectFundingInput!) {\n addProjectFunding(input: $input) {\n id\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n affiliation {\n uri\n name\n }\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation UpdateProjectFunding($input: UpdateProjectFundingInput!) {\n updateProjectFunding(input: $input) {\n id\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n affiliation {\n uri\n name\n }\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation RemoveProjectFunding($projectFundingId: Int!) {\n removeProjectFunding(projectFundingId: $projectFundingId) {\n id\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation AddPlanFunding($planId: Int!, $projectFundingIds: [Int!]!) {\n addPlanFunding(planId: $planId, projectFundingIds: $projectFundingIds) {\n id\n fundings {\n id\n projectFunding {\n id\n }\n }\n errors {\n general\n }\n }\n}\n\nmutation UpdatePlanFunding($planId: Int!, $projectFundingIds: [Int!]!) {\n updatePlanFunding(planId: $planId, projectFundingIds: $projectFundingIds) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}\n\nmutation RemovePlanFunding($planFundingId: Int!) {\n removePlanFunding(planFundingId: $planFundingId) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}": typeof types.AddProjectFundingDocument, "mutation AddProjectMember($input: AddProjectMemberInput!) {\n addProjectMember(input: $input) {\n id\n project {\n id\n }\n affiliation {\n uri\n name\n }\n givenName\n surName\n orcid\n email\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n projectId\n affiliationId\n givenName\n surName\n orcid\n email\n memberRoleIds\n }\n }\n}\n\nmutation UpdateProjectMember($input: UpdateProjectMemberInput!) {\n updateProjectMember(input: $input) {\n id\n project {\n id\n }\n affiliation {\n uri\n name\n }\n givenName\n surName\n orcid\n email\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n modified\n modifiedById\n errors {\n general\n projectId\n affiliationId\n givenName\n surName\n orcid\n email\n memberRoleIds\n }\n }\n}\n\nmutation RemoveProjectMember($projectMemberId: Int!) {\n removeProjectMember(projectMemberId: $projectMemberId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}\n\nmutation AddPlanMember($planId: Int!, $projectMemberId: Int!, $roleIds: [Int!]!) {\n addPlanMember(\n planId: $planId\n projectMemberId: $projectMemberId\n roleIds: $roleIds\n ) {\n id\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n projectMemberId\n memberRoleIds\n }\n }\n}\n\nmutation UpdatePlanMember($planId: Int!, $planMemberId: Int!, $memberRoleIds: [Int!], $isPrimaryContact: Boolean) {\n updatePlanMember(\n planId: $planId\n planMemberId: $planMemberId\n memberRoleIds: $memberRoleIds\n isPrimaryContact: $isPrimaryContact\n ) {\n id\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n modified\n modifiedById\n errors {\n general\n projectMemberId\n memberRoleIds\n }\n }\n}\n\nmutation RemovePlanMember($planMemberId: Int!) {\n removePlanMember(planMemberId: $planMemberId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": typeof types.AddProjectMemberDocument, "mutation AddPlan($projectId: Int!, $versionedTemplateId: Int!) {\n addPlan(projectId: $projectId, versionedTemplateId: $versionedTemplateId) {\n id\n created\n createdById\n modified\n modifiedById\n dmpId\n errors {\n general\n versionedTemplateId\n projectId\n }\n }\n}\n\nmutation UpdatePlanStatus($planId: Int!, $status: PlanStatus!) {\n updatePlanStatus(planId: $planId, status: $status) {\n errors {\n general\n status\n }\n id\n modified\n modifiedById\n status\n visibility\n }\n}\n\nmutation UpdatePlanTitle($planId: Int!, $title: String!) {\n updatePlanTitle(planId: $planId, title: $title) {\n errors {\n general\n title\n }\n id\n modified\n modifiedById\n title\n }\n}\n\nmutation ArchivePlan($planId: Int!) {\n archivePlan(planId: $planId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}\n\nmutation AddAlternateIdentifier($planId: Int!, $alternateIdentifier: String!) {\n addAlternateIdentifierToPlan(\n planId: $planId\n alternateIdentifier: $alternateIdentifier\n ) {\n errors {\n general\n alternateIdentifier\n planId\n }\n id\n alternateIdentifier\n plan {\n id\n }\n }\n}\n\nmutation RemoveAlternateIdentifier($planId: Int!, $alternateIdentifier: String!) {\n removeAlternateIdentifierFromPlan(\n planId: $planId\n alternateIdentifier: $alternateIdentifier\n ) {\n errors {\n general\n alternateIdentifier\n planId\n }\n id\n alternateIdentifier\n plan {\n id\n }\n }\n}": typeof types.AddPlanDocument, "mutation AddProject($title: String!, $isTestProject: Boolean) {\n addProject(title: $title, isTestProject: $isTestProject) {\n id\n created\n createdById\n modified\n modifiedById\n errors {\n title\n general\n }\n }\n}\n\nmutation UpdateProject($input: UpdateProjectInput!) {\n updateProject(input: $input) {\n id\n created\n createdById\n modified\n modifiedById\n errors {\n general\n title\n abstractText\n endDate\n startDate\n researchDomainId\n }\n }\n}\n\nmutation ArchiveProject($projectId: Int!) {\n archiveProject(projectId: $projectId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": typeof types.AddProjectDocument, "query affiliationByURI($uri: String!) {\n affiliationByURI(uri: $uri) {\n id\n uri\n name\n funder\n provenance\n }\n}\n\nquery Affiliations($name: String!, $funderOnly: Boolean!) {\n affiliations(name: $name, funderOnly: $funderOnly) {\n items {\n id\n uri\n name\n aliases\n acronyms\n funder\n }\n }\n}": typeof types.AffiliationByUriDocument, + "query AnswerForQuestion($projectId: Int!, $planId: Int!, $versionedQuestionId: Int!, $versionedCustomQuestionId: Int) {\n answerByVersionedQuestionId(\n projectId: $projectId\n planId: $planId\n versionedQuestionId: $versionedQuestionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n ) {\n id\n json\n }\n}": typeof types.AnswerForQuestionDocument, "query projectCollaborators($projectId: Int!) {\n projectCollaborators(projectId: $projectId) {\n id\n project {\n id\n }\n user {\n id\n email\n }\n invitedBy {\n id\n email\n }\n email\n accessLevel\n created\n createdById\n modified\n modifiedById\n }\n}": typeof types.ProjectCollaboratorsDocument, "query ProjectFundings($projectId: Int!) {\n projectFundings(projectId: $projectId) {\n id\n affiliation {\n uri\n name\n }\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nquery PlanFundings($planId: Int!) {\n planFundings(planId: $planId) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}": typeof types.ProjectFundingsDocument, "query projectMembers($projectId: Int!) {\n projectMembers(projectId: $projectId) {\n id\n project {\n id\n }\n givenName\n surName\n orcid\n email\n affiliation {\n uri\n name\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n }\n}\n\nquery planMembers($planId: Int!) {\n planMembers(planId: $planId) {\n id\n plan {\n id\n }\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n }\n}\n\nquery MemberRoles {\n memberRoles {\n id\n uri\n label\n description\n isDefault\n }\n}": typeof types.ProjectMembersDocument, "query Plan($planId: Int!) {\n plan(planId: $planId) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n id\n }\n members {\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n }\n fundings {\n id\n projectFunding {\n id\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n alternateIdentifiers {\n id\n alternateIdentifier\n }\n }\n}\n\nquery Plans($projectId: Int!) {\n plans(projectId: $projectId) {\n id\n title\n }\n}\n\nquery PlanByDmpId($dmpId: String!) {\n planByDMPId(dmpId: $dmpId) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n parentResearchDomainId\n }\n }\n fundings {\n id\n projectFunding {\n id\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n }\n}\n\nquery PlanByAlternateIdentifier($alternateIdentifier: String!) {\n planByAlternateIdentifier(alternateIdentifier: $alternateIdentifier) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n parentResearchDomainId\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n }\n}": typeof types.PlanDocument, "query Project($projectId: Int!) {\n project(projectId: $projectId) {\n id\n created\n createdById\n modified\n modifiedById\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n uri\n name\n }\n plans {\n id\n title\n }\n members {\n id\n affiliation {\n uri\n name\n }\n givenName\n surName\n email\n orcid\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n }\n fundings {\n id\n affiliation {\n uri\n name\n }\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n }\n }\n}\n\nquery MyProjects($term: String) {\n myProjects(term: $term) {\n items {\n id\n title\n abstractText\n endDate\n startDate\n researchDomain\n created\n createdById\n modified\n modifiedById\n }\n }\n}": typeof types.ProjectDocument, "query ResearchDomainByURI($uri: String!) {\n researchDomainByURI(uri: $uri) {\n id\n uri\n name\n }\n}": typeof types.ResearchDomainByUriDocument, - "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n }\n}": typeof types.VersionedTemplatesDocument, + "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}": typeof types.VersionedTemplatesDocument, }; const documents: Documents = { "mutation AddAffiliation($input: AffiliationInput!) {\n addAffiliation(input: $input) {\n id\n name\n uri\n errors {\n general\n uri\n name\n displayName\n searchName\n provenance\n }\n }\n}": types.AddAffiliationDocument, + "mutation AddAnswer($planId: Int!, $versionedSectionId: Int, $versionedQuestionId: Int, $versionedCustomSectionId: Int, $versionedCustomQuestionId: Int, $json: String) {\n addAnswer(\n planId: $planId\n versionedSectionId: $versionedSectionId\n versionedQuestionId: $versionedQuestionId\n versionedCustomSectionId: $versionedCustomSectionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n json: $json\n ) {\n id\n json\n errors {\n json\n planId\n versionedSectionId\n versionedQuestionId\n }\n }\n}\n\nmutation UpdateAnswer($answerId: Int!, $json: String) {\n updateAnswer(answerId: $answerId, json: $json) {\n id\n json\n errors {\n json\n }\n }\n}": types.AddAnswerDocument, "mutation AddProjectCollaborator($projectId: Int!, $email: String!) {\n addProjectCollaborator(projectId: $projectId, email: $email) {\n id\n email\n accessLevel\n user {\n id\n email\n }\n invitedBy {\n id\n email\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n email\n accessLevel\n }\n }\n}\n\nmutation UpdateProjectCollaborator($projectCollaboratorId: Int!, $accessLevel: ProjectCollaboratorAccessLevel!) {\n updateProjectCollaborator(\n projectCollaboratorId: $projectCollaboratorId\n accessLevel: $accessLevel\n ) {\n errors {\n general\n accessLevel\n }\n id\n modified\n modifiedById\n accessLevel\n }\n}\n\nmutation RemoveProjectCollaborator($projectCollaboratorId: Int!) {\n removeProjectCollaborator(projectCollaboratorId: $projectCollaboratorId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": types.AddProjectCollaboratorDocument, "mutation AddProjectFunding($input: AddProjectFundingInput!) {\n addProjectFunding(input: $input) {\n id\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n affiliation {\n uri\n name\n }\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation UpdateProjectFunding($input: UpdateProjectFundingInput!) {\n updateProjectFunding(input: $input) {\n id\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n affiliation {\n uri\n name\n }\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation RemoveProjectFunding($projectFundingId: Int!) {\n removeProjectFunding(projectFundingId: $projectFundingId) {\n id\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nmutation AddPlanFunding($planId: Int!, $projectFundingIds: [Int!]!) {\n addPlanFunding(planId: $planId, projectFundingIds: $projectFundingIds) {\n id\n fundings {\n id\n projectFunding {\n id\n }\n }\n errors {\n general\n }\n }\n}\n\nmutation UpdatePlanFunding($planId: Int!, $projectFundingIds: [Int!]!) {\n updatePlanFunding(planId: $planId, projectFundingIds: $projectFundingIds) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}\n\nmutation RemovePlanFunding($planFundingId: Int!) {\n removePlanFunding(planFundingId: $planFundingId) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}": types.AddProjectFundingDocument, "mutation AddProjectMember($input: AddProjectMemberInput!) {\n addProjectMember(input: $input) {\n id\n project {\n id\n }\n affiliation {\n uri\n name\n }\n givenName\n surName\n orcid\n email\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n projectId\n affiliationId\n givenName\n surName\n orcid\n email\n memberRoleIds\n }\n }\n}\n\nmutation UpdateProjectMember($input: UpdateProjectMemberInput!) {\n updateProjectMember(input: $input) {\n id\n project {\n id\n }\n affiliation {\n uri\n name\n }\n givenName\n surName\n orcid\n email\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n modified\n modifiedById\n errors {\n general\n projectId\n affiliationId\n givenName\n surName\n orcid\n email\n memberRoleIds\n }\n }\n}\n\nmutation RemoveProjectMember($projectMemberId: Int!) {\n removeProjectMember(projectMemberId: $projectMemberId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}\n\nmutation AddPlanMember($planId: Int!, $projectMemberId: Int!, $roleIds: [Int!]!) {\n addPlanMember(\n planId: $planId\n projectMemberId: $projectMemberId\n roleIds: $roleIds\n ) {\n id\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n errors {\n general\n projectMemberId\n memberRoleIds\n }\n }\n}\n\nmutation UpdatePlanMember($planId: Int!, $planMemberId: Int!, $memberRoleIds: [Int!], $isPrimaryContact: Boolean) {\n updatePlanMember(\n planId: $planId\n planMemberId: $planMemberId\n memberRoleIds: $memberRoleIds\n isPrimaryContact: $isPrimaryContact\n ) {\n id\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n modified\n modifiedById\n errors {\n general\n projectMemberId\n memberRoleIds\n }\n }\n}\n\nmutation RemovePlanMember($planMemberId: Int!) {\n removePlanMember(planMemberId: $planMemberId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": types.AddProjectMemberDocument, "mutation AddPlan($projectId: Int!, $versionedTemplateId: Int!) {\n addPlan(projectId: $projectId, versionedTemplateId: $versionedTemplateId) {\n id\n created\n createdById\n modified\n modifiedById\n dmpId\n errors {\n general\n versionedTemplateId\n projectId\n }\n }\n}\n\nmutation UpdatePlanStatus($planId: Int!, $status: PlanStatus!) {\n updatePlanStatus(planId: $planId, status: $status) {\n errors {\n general\n status\n }\n id\n modified\n modifiedById\n status\n visibility\n }\n}\n\nmutation UpdatePlanTitle($planId: Int!, $title: String!) {\n updatePlanTitle(planId: $planId, title: $title) {\n errors {\n general\n title\n }\n id\n modified\n modifiedById\n title\n }\n}\n\nmutation ArchivePlan($planId: Int!) {\n archivePlan(planId: $planId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}\n\nmutation AddAlternateIdentifier($planId: Int!, $alternateIdentifier: String!) {\n addAlternateIdentifierToPlan(\n planId: $planId\n alternateIdentifier: $alternateIdentifier\n ) {\n errors {\n general\n alternateIdentifier\n planId\n }\n id\n alternateIdentifier\n plan {\n id\n }\n }\n}\n\nmutation RemoveAlternateIdentifier($planId: Int!, $alternateIdentifier: String!) {\n removeAlternateIdentifierFromPlan(\n planId: $planId\n alternateIdentifier: $alternateIdentifier\n ) {\n errors {\n general\n alternateIdentifier\n planId\n }\n id\n alternateIdentifier\n plan {\n id\n }\n }\n}": types.AddPlanDocument, "mutation AddProject($title: String!, $isTestProject: Boolean) {\n addProject(title: $title, isTestProject: $isTestProject) {\n id\n created\n createdById\n modified\n modifiedById\n errors {\n title\n general\n }\n }\n}\n\nmutation UpdateProject($input: UpdateProjectInput!) {\n updateProject(input: $input) {\n id\n created\n createdById\n modified\n modifiedById\n errors {\n general\n title\n abstractText\n endDate\n startDate\n researchDomainId\n }\n }\n}\n\nmutation ArchiveProject($projectId: Int!) {\n archiveProject(projectId: $projectId) {\n id\n modified\n modifiedById\n errors {\n general\n }\n }\n}": types.AddProjectDocument, "query affiliationByURI($uri: String!) {\n affiliationByURI(uri: $uri) {\n id\n uri\n name\n funder\n provenance\n }\n}\n\nquery Affiliations($name: String!, $funderOnly: Boolean!) {\n affiliations(name: $name, funderOnly: $funderOnly) {\n items {\n id\n uri\n name\n aliases\n acronyms\n funder\n }\n }\n}": types.AffiliationByUriDocument, + "query AnswerForQuestion($projectId: Int!, $planId: Int!, $versionedQuestionId: Int!, $versionedCustomQuestionId: Int) {\n answerByVersionedQuestionId(\n projectId: $projectId\n planId: $planId\n versionedQuestionId: $versionedQuestionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n ) {\n id\n json\n }\n}": types.AnswerForQuestionDocument, "query projectCollaborators($projectId: Int!) {\n projectCollaborators(projectId: $projectId) {\n id\n project {\n id\n }\n user {\n id\n email\n }\n invitedBy {\n id\n email\n }\n email\n accessLevel\n created\n createdById\n modified\n modifiedById\n }\n}": types.ProjectCollaboratorsDocument, "query ProjectFundings($projectId: Int!) {\n projectFundings(projectId: $projectId) {\n id\n affiliation {\n uri\n name\n }\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n errors {\n general\n projectId\n affiliationId\n status\n funderProjectNumber\n grantId\n funderOpportunityNumber\n }\n }\n}\n\nquery PlanFundings($planId: Int!) {\n planFundings(planId: $planId) {\n id\n projectFunding {\n id\n }\n errors {\n general\n planId\n ProjectFundingId\n }\n }\n}": types.ProjectFundingsDocument, "query projectMembers($projectId: Int!) {\n projectMembers(projectId: $projectId) {\n id\n project {\n id\n }\n givenName\n surName\n orcid\n email\n affiliation {\n uri\n name\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n }\n}\n\nquery planMembers($planId: Int!) {\n planMembers(planId: $planId) {\n id\n plan {\n id\n }\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n created\n createdById\n modified\n modifiedById\n }\n}\n\nquery MemberRoles {\n memberRoles {\n id\n uri\n label\n description\n isDefault\n }\n}": types.ProjectMembersDocument, "query Plan($planId: Int!) {\n plan(planId: $planId) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n id\n }\n members {\n projectMember {\n id\n }\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n }\n fundings {\n id\n projectFunding {\n id\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n alternateIdentifiers {\n id\n alternateIdentifier\n }\n }\n}\n\nquery Plans($projectId: Int!) {\n plans(projectId: $projectId) {\n id\n title\n }\n}\n\nquery PlanByDmpId($dmpId: String!) {\n planByDMPId(dmpId: $dmpId) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n parentResearchDomainId\n }\n }\n fundings {\n id\n projectFunding {\n id\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n }\n}\n\nquery PlanByAlternateIdentifier($alternateIdentifier: String!) {\n planByAlternateIdentifier(alternateIdentifier: $alternateIdentifier) {\n id\n dmpId\n title\n visibility\n status\n created\n createdById\n modified\n modifiedById\n registered\n project {\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n parentResearchDomainId\n }\n }\n versionedTemplate {\n name\n description\n version\n template {\n id\n }\n }\n }\n}": types.PlanDocument, "query Project($projectId: Int!) {\n project(projectId: $projectId) {\n id\n created\n createdById\n modified\n modifiedById\n title\n abstractText\n startDate\n endDate\n isTestProject\n researchDomain {\n id\n uri\n name\n }\n plans {\n id\n title\n }\n members {\n id\n affiliation {\n uri\n name\n }\n givenName\n surName\n email\n orcid\n isPrimaryContact\n memberRoles {\n id\n uri\n }\n }\n fundings {\n id\n affiliation {\n uri\n name\n }\n status\n funderOpportunityNumber\n funderProjectNumber\n grantId\n }\n }\n}\n\nquery MyProjects($term: String) {\n myProjects(term: $term) {\n items {\n id\n title\n abstractText\n endDate\n startDate\n researchDomain\n created\n createdById\n modified\n modifiedById\n }\n }\n}": types.ProjectDocument, "query ResearchDomainByURI($uri: String!) {\n researchDomainByURI(uri: $uri) {\n id\n uri\n name\n }\n}": types.ResearchDomainByUriDocument, - "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n }\n}": types.VersionedTemplatesDocument, + "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}": types.VersionedTemplatesDocument, }; /** @@ -64,6 +68,10 @@ export function gql(source: string): unknown; * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "mutation AddAffiliation($input: AffiliationInput!) {\n addAffiliation(input: $input) {\n id\n name\n uri\n errors {\n general\n uri\n name\n displayName\n searchName\n provenance\n }\n }\n}"): (typeof documents)["mutation AddAffiliation($input: AffiliationInput!) {\n addAffiliation(input: $input) {\n id\n name\n uri\n errors {\n general\n uri\n name\n displayName\n searchName\n provenance\n }\n }\n}"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "mutation AddAnswer($planId: Int!, $versionedSectionId: Int, $versionedQuestionId: Int, $versionedCustomSectionId: Int, $versionedCustomQuestionId: Int, $json: String) {\n addAnswer(\n planId: $planId\n versionedSectionId: $versionedSectionId\n versionedQuestionId: $versionedQuestionId\n versionedCustomSectionId: $versionedCustomSectionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n json: $json\n ) {\n id\n json\n errors {\n json\n planId\n versionedSectionId\n versionedQuestionId\n }\n }\n}\n\nmutation UpdateAnswer($answerId: Int!, $json: String) {\n updateAnswer(answerId: $answerId, json: $json) {\n id\n json\n errors {\n json\n }\n }\n}"): (typeof documents)["mutation AddAnswer($planId: Int!, $versionedSectionId: Int, $versionedQuestionId: Int, $versionedCustomSectionId: Int, $versionedCustomQuestionId: Int, $json: String) {\n addAnswer(\n planId: $planId\n versionedSectionId: $versionedSectionId\n versionedQuestionId: $versionedQuestionId\n versionedCustomSectionId: $versionedCustomSectionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n json: $json\n ) {\n id\n json\n errors {\n json\n planId\n versionedSectionId\n versionedQuestionId\n }\n }\n}\n\nmutation UpdateAnswer($answerId: Int!, $json: String) {\n updateAnswer(answerId: $answerId, json: $json) {\n id\n json\n errors {\n json\n }\n }\n}"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -88,6 +96,10 @@ export function gql(source: "mutation AddProject($title: String!, $isTestProject * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "query affiliationByURI($uri: String!) {\n affiliationByURI(uri: $uri) {\n id\n uri\n name\n funder\n provenance\n }\n}\n\nquery Affiliations($name: String!, $funderOnly: Boolean!) {\n affiliations(name: $name, funderOnly: $funderOnly) {\n items {\n id\n uri\n name\n aliases\n acronyms\n funder\n }\n }\n}"): (typeof documents)["query affiliationByURI($uri: String!) {\n affiliationByURI(uri: $uri) {\n id\n uri\n name\n funder\n provenance\n }\n}\n\nquery Affiliations($name: String!, $funderOnly: Boolean!) {\n affiliations(name: $name, funderOnly: $funderOnly) {\n items {\n id\n uri\n name\n aliases\n acronyms\n funder\n }\n }\n}"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "query AnswerForQuestion($projectId: Int!, $planId: Int!, $versionedQuestionId: Int!, $versionedCustomQuestionId: Int) {\n answerByVersionedQuestionId(\n projectId: $projectId\n planId: $planId\n versionedQuestionId: $versionedQuestionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n ) {\n id\n json\n }\n}"): (typeof documents)["query AnswerForQuestion($projectId: Int!, $planId: Int!, $versionedQuestionId: Int!, $versionedCustomQuestionId: Int) {\n answerByVersionedQuestionId(\n projectId: $projectId\n planId: $planId\n versionedQuestionId: $versionedQuestionId\n versionedCustomQuestionId: $versionedCustomQuestionId\n ) {\n id\n json\n }\n}"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -115,7 +127,7 @@ export function gql(source: "query ResearchDomainByURI($uri: String!) {\n resea /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n }\n}"): (typeof documents)["query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n }\n}"]; +export function gql(source: "query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}"): (typeof documents)["query VersionedTemplates($templateId: Int!) {\n templateVersions(templateId: $templateId) {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}\n\nquery DefaultTemplate {\n defaultTemplate {\n id\n name\n version\n active\n template {\n id\n }\n versionedSections {\n id\n section {\n id\n }\n name\n displayOrder\n tags {\n id\n slug\n }\n versionedQuestions {\n id\n questionId\n versionedSectionId\n questionText\n displayOrder\n json\n }\n }\n }\n}"]; export function gql(source: string) { return (documents as any)[source] ?? {}; diff --git a/src/generated/graphql.ts b/src/generated/graphql.ts index 79ec182..5178b37 100644 --- a/src/generated/graphql.ts +++ b/src/generated/graphql.ts @@ -38,66 +38,62 @@ export type AddProjectMemberInput = { surName?: string | null | undefined; }; -/** Input for email domains linked to the affiliation for purposes of determining if SSO is applicable */ -export type AffiliationEmailDomainInput = { - /** The email domain (e.g. example.com, law.example.com, etc.) */ - domain: string; - /** Unique identifier for the email domain */ - id: number; -}; - /** Input options for adding an Affiliation */ export type AffiliationInput = { /** Acronyms for the affiliation */ acronyms?: Array | null | undefined; - /** Whether or not the Affiliation is active and available in search results */ + /** Whether or not the Affiliation is active and available in search results (SuperAdmin only) */ active?: boolean | null | undefined; /** Alias names for the affiliation */ aliases?: Array | null | undefined; + /** The URI of the affiliation's API to use for project search */ + apiTarget?: string | null | undefined; /** The primary contact email */ contactEmail?: string | null | undefined; /** The primary contact name */ contactName?: string | null | undefined; - /** The display name to help disambiguate similar names (typically with domain or country appended) */ - displayName?: string | null | undefined; + /** The abbreviation to display in the UI */ + displayAbbreviation?: string | null | undefined; + /** The domain name of the affiliation to display in the UI */ + displayDomain?: string | null | undefined; + /** The display name that users see */ + displayName: string; /** The email address(es) to notify when feedback has been requested (stored as JSON array) */ feedbackEmails?: Array | null | undefined; /** Whether or not the affiliation wants to use the feedback workflow */ feedbackEnabled?: boolean | null | undefined; /** The message to display to users when they request feedback */ feedbackMessage?: string | null | undefined; - /** Whether or not this affiliation is a funder */ + /** Whether or not this affiliation should be considered a funder within the DMP Tool */ funder?: boolean | null | undefined; - /** The Crossref Funder id */ + /** The Crossref funder id */ fundrefId?: string | null | undefined; /** The official homepage for the affiliation */ homepage?: string | null | undefined; /** The id of the affiliation */ id?: number | null | undefined; - /** The logo file name */ + /** The name of the logo file (S3 key) */ logoName?: string | null | undefined; - /** The URI of the logo */ - logoURI?: string | null | undefined; - /** Whether or not the affiliation is allowed to have administrators */ + /** Whether or not the affiliation is allowed to have administrators (SuperAdmin only) */ managed?: boolean | null | undefined; - /** The official name for the affiliation (defined by the system of provenance) */ - name: string; - /** The email domains associated with the affiliation (for SSO) */ - ssoEmailDomains?: Array | null | undefined; - /** The SSO entityId */ + /** The official name for the affiliation (defined by the system of provenance or a SuperAdmin)) */ + name?: string | null | undefined; + /** The ROR id */ + rorId?: string | null | undefined; + /** The email domains associated with the affiliation (for SSO) (SuperAdmin only) */ + ssoEmailDomains?: Array | null | undefined; + /** The SSO entityId (SuperAdmin only) */ ssoEntityId?: string | null | undefined; /** The links the affiliation's users can use to get help */ subHeaderLinks?: Array | null | undefined; - /** The types of the affiliation (e.g. Company, Education, Government, etc.) */ + /** The types of the affiliation (e.g. Company, Education, etc.) (defined by the system of provenance or a SuperAdmin) */ types?: Array | null | undefined; - /** The unique identifer for the affiliation (Not editable!) */ - uri?: string | null | undefined; }; /** Input for a hyperlink displayed in the sub-header of the UI for the afiliation's users */ export type AffiliationLinkInput = { /** Unique identifier for the link */ - id: number; + id?: number | null | undefined; /** The text to display (e.g. Helpdesk, Grants Office, etc.) */ text?: string | null | undefined; /** The URL */ @@ -206,6 +202,26 @@ export type AddAffiliationMutationVariables = Exact<{ export type AddAffiliationMutation = { addAffiliation: { id: number | null, name: string, uri: string, errors: { general: string | null, uri: string | null, name: string | null, displayName: string | null, searchName: string | null, provenance: string | null } | null } | null }; +export type AddAnswerMutationVariables = Exact<{ + planId: number; + versionedSectionId?: number | null | undefined; + versionedQuestionId?: number | null | undefined; + versionedCustomSectionId?: number | null | undefined; + versionedCustomQuestionId?: number | null | undefined; + json?: string | null | undefined; +}>; + + +export type AddAnswerMutation = { addAnswer: { id: number | null, json: string | null, errors: { json: string | null, planId: string | null, versionedSectionId: string | null, versionedQuestionId: string | null } | null } | null }; + +export type UpdateAnswerMutationVariables = Exact<{ + answerId: number; + json?: string | null | undefined; +}>; + + +export type UpdateAnswerMutation = { updateAnswer: { id: number | null, json: string | null, errors: { json: string | null } | null } | null }; + export type AddProjectCollaboratorMutationVariables = Exact<{ projectId: number; email: string; @@ -404,6 +420,16 @@ export type AffiliationsQueryVariables = Exact<{ export type AffiliationsQuery = { affiliations: { items: Array<{ id: number, uri: string, name: string, aliases: Array | null, acronyms: Array | null, funder: boolean } | null> | null } | null }; +export type AnswerForQuestionQueryVariables = Exact<{ + projectId: number; + planId: number; + versionedQuestionId: number; + versionedCustomQuestionId?: number | null | undefined; +}>; + + +export type AnswerForQuestionQuery = { answerByVersionedQuestionId: { id: number | null, json: string | null } | null }; + export type ProjectCollaboratorsQueryVariables = Exact<{ projectId: number; }>; @@ -498,15 +524,17 @@ export type VersionedTemplatesQueryVariables = Exact<{ }>; -export type VersionedTemplatesQuery = { templateVersions: Array<{ id: number | null, name: string, version: string, active: boolean, template: { id: number | null } | null } | null> | null }; +export type VersionedTemplatesQuery = { templateVersions: Array<{ id: number | null, name: string, version: string, active: boolean, template: { id: number | null } | null, versionedSections: Array<{ id: number | null, name: string, displayOrder: number, section: { id: number | null } | null, tags: Array<{ id: number | null, slug: string } | null> | null, versionedQuestions: Array<{ id: number | null, questionId: number, versionedSectionId: number, questionText: string | null, displayOrder: number | null, json: string | null }> | null }> | null } | null> | null }; export type DefaultTemplateQueryVariables = Exact<{ [key: string]: never; }>; -export type DefaultTemplateQuery = { defaultTemplate: { id: number | null, name: string, version: string, active: boolean, template: { id: number | null } | null } | null }; +export type DefaultTemplateQuery = { defaultTemplate: { id: number | null, name: string, version: string, active: boolean, template: { id: number | null } | null, versionedSections: Array<{ id: number | null, name: string, displayOrder: number, section: { id: number | null } | null, tags: Array<{ id: number | null, slug: string } | null> | null, versionedQuestions: Array<{ id: number | null, questionId: number, versionedSectionId: number, questionText: string | null, displayOrder: number | null, json: string | null }> | null }> | null } | null }; export const AddAffiliationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddAffiliation"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AffiliationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addAffiliation"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"searchName"}},{"kind":"Field","name":{"kind":"Name","value":"provenance"}}]}}]}}]}}]} as unknown as DocumentNode; +export const AddAnswerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddAnswer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"planId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedSectionId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedQuestionId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomSectionId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomQuestionId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"json"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addAnswer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"planId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"planId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedSectionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedSectionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedQuestionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedQuestionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedCustomSectionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomSectionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedCustomQuestionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomQuestionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"json"},"value":{"kind":"Variable","name":{"kind":"Name","value":"json"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"json"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"json"}},{"kind":"Field","name":{"kind":"Name","value":"planId"}},{"kind":"Field","name":{"kind":"Name","value":"versionedSectionId"}},{"kind":"Field","name":{"kind":"Name","value":"versionedQuestionId"}}]}}]}}]}}]} as unknown as DocumentNode; +export const UpdateAnswerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateAnswer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"answerId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"json"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateAnswer"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"answerId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"answerId"}}},{"kind":"Argument","name":{"kind":"Name","value":"json"},"value":{"kind":"Variable","name":{"kind":"Name","value":"json"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"json"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"json"}}]}}]}}]}}]} as unknown as DocumentNode; export const AddProjectCollaboratorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddProjectCollaborator"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"email"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addProjectCollaborator"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}},{"kind":"Argument","name":{"kind":"Name","value":"email"},"value":{"kind":"Variable","name":{"kind":"Name","value":"email"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"accessLevel"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"created"}},{"kind":"Field","name":{"kind":"Name","value":"createdById"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"accessLevel"}}]}}]}}]}}]} as unknown as DocumentNode; export const UpdateProjectCollaboratorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateProjectCollaborator"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectCollaboratorId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"accessLevel"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ProjectCollaboratorAccessLevel"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateProjectCollaborator"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectCollaboratorId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectCollaboratorId"}}},{"kind":"Argument","name":{"kind":"Name","value":"accessLevel"},"value":{"kind":"Variable","name":{"kind":"Name","value":"accessLevel"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}},{"kind":"Field","name":{"kind":"Name","value":"accessLevel"}}]}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}},{"kind":"Field","name":{"kind":"Name","value":"accessLevel"}}]}}]}}]} as unknown as DocumentNode; export const RemoveProjectCollaboratorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RemoveProjectCollaborator"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectCollaboratorId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"removeProjectCollaborator"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectCollaboratorId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectCollaboratorId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}}]}}]}}]}}]} as unknown as DocumentNode; @@ -533,6 +561,7 @@ export const UpdateProjectDocument = {"kind":"Document","definitions":[{"kind":" export const ArchiveProjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ArchiveProject"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"archiveProject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}}]}}]}}]}}]} as unknown as DocumentNode; export const AffiliationByUriDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"affiliationByURI"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uri"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"affiliationByURI"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"uri"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uri"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"funder"}},{"kind":"Field","name":{"kind":"Name","value":"provenance"}}]}}]}}]} as unknown as DocumentNode; export const AffiliationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Affiliations"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"name"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"funderOnly"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"affiliations"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"name"}}},{"kind":"Argument","name":{"kind":"Name","value":"funderOnly"},"value":{"kind":"Variable","name":{"kind":"Name","value":"funderOnly"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"aliases"}},{"kind":"Field","name":{"kind":"Name","value":"acronyms"}},{"kind":"Field","name":{"kind":"Name","value":"funder"}}]}}]}}]}}]} as unknown as DocumentNode; +export const AnswerForQuestionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AnswerForQuestion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"planId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedQuestionId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomQuestionId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"answerByVersionedQuestionId"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}},{"kind":"Argument","name":{"kind":"Name","value":"planId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"planId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedQuestionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedQuestionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"versionedCustomQuestionId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"versionedCustomQuestionId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"json"}}]}}]}}]} as unknown as DocumentNode; export const ProjectCollaboratorsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"projectCollaborators"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"projectCollaborators"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"project"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"accessLevel"}},{"kind":"Field","name":{"kind":"Name","value":"created"}},{"kind":"Field","name":{"kind":"Name","value":"createdById"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}}]}}]}}]} as unknown as DocumentNode; export const ProjectFundingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProjectFundings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"projectFundings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"affiliation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"funderOpportunityNumber"}},{"kind":"Field","name":{"kind":"Name","value":"funderProjectNumber"}},{"kind":"Field","name":{"kind":"Name","value":"grantId"}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}},{"kind":"Field","name":{"kind":"Name","value":"projectId"}},{"kind":"Field","name":{"kind":"Name","value":"affiliationId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"funderProjectNumber"}},{"kind":"Field","name":{"kind":"Name","value":"grantId"}},{"kind":"Field","name":{"kind":"Name","value":"funderOpportunityNumber"}}]}}]}}]}}]} as unknown as DocumentNode; export const PlanFundingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"PlanFundings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"planId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"planFundings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"planId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"planId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"projectFunding"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"general"}},{"kind":"Field","name":{"kind":"Name","value":"planId"}},{"kind":"Field","name":{"kind":"Name","value":"ProjectFundingId"}}]}}]}}]}}]} as unknown as DocumentNode; @@ -546,5 +575,5 @@ export const PlanByAlternateIdentifierDocument = {"kind":"Document","definitions export const ProjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Project"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"project"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"projectId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"projectId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"created"}},{"kind":"Field","name":{"kind":"Name","value":"createdById"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"abstractText"}},{"kind":"Field","name":{"kind":"Name","value":"startDate"}},{"kind":"Field","name":{"kind":"Name","value":"endDate"}},{"kind":"Field","name":{"kind":"Name","value":"isTestProject"}},{"kind":"Field","name":{"kind":"Name","value":"researchDomain"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"plans"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"Field","name":{"kind":"Name","value":"members"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"affiliation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"givenName"}},{"kind":"Field","name":{"kind":"Name","value":"surName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"orcid"}},{"kind":"Field","name":{"kind":"Name","value":"isPrimaryContact"}},{"kind":"Field","name":{"kind":"Name","value":"memberRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fundings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"affiliation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"funderOpportunityNumber"}},{"kind":"Field","name":{"kind":"Name","value":"funderProjectNumber"}},{"kind":"Field","name":{"kind":"Name","value":"grantId"}}]}}]}}]}}]} as unknown as DocumentNode; export const MyProjectsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyProjects"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"term"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myProjects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"term"},"value":{"kind":"Variable","name":{"kind":"Name","value":"term"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"abstractText"}},{"kind":"Field","name":{"kind":"Name","value":"endDate"}},{"kind":"Field","name":{"kind":"Name","value":"startDate"}},{"kind":"Field","name":{"kind":"Name","value":"researchDomain"}},{"kind":"Field","name":{"kind":"Name","value":"created"}},{"kind":"Field","name":{"kind":"Name","value":"createdById"}},{"kind":"Field","name":{"kind":"Name","value":"modified"}},{"kind":"Field","name":{"kind":"Name","value":"modifiedById"}}]}}]}}]}}]} as unknown as DocumentNode; export const ResearchDomainByUriDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ResearchDomainByURI"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uri"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"researchDomainByURI"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"uri"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uri"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode; -export const VersionedTemplatesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"VersionedTemplates"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"templateId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"templateVersions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"templateId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"templateId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"active"}},{"kind":"Field","name":{"kind":"Name","value":"template"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; -export const DefaultTemplateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"DefaultTemplate"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"defaultTemplate"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"active"}},{"kind":"Field","name":{"kind":"Name","value":"template"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const VersionedTemplatesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"VersionedTemplates"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"templateId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"templateVersions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"templateId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"templateId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"active"}},{"kind":"Field","name":{"kind":"Name","value":"template"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"versionedSections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"section"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"displayOrder"}},{"kind":"Field","name":{"kind":"Name","value":"tags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"versionedQuestions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"questionId"}},{"kind":"Field","name":{"kind":"Name","value":"versionedSectionId"}},{"kind":"Field","name":{"kind":"Name","value":"questionText"}},{"kind":"Field","name":{"kind":"Name","value":"displayOrder"}},{"kind":"Field","name":{"kind":"Name","value":"json"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const DefaultTemplateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"DefaultTemplate"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"defaultTemplate"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"active"}},{"kind":"Field","name":{"kind":"Name","value":"template"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"versionedSections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"section"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"displayOrder"}},{"kind":"Field","name":{"kind":"Name","value":"tags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"versionedQuestions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"questionId"}},{"kind":"Field","name":{"kind":"Name","value":"versionedSectionId"}},{"kind":"Field","name":{"kind":"Name","value":"questionText"}},{"kind":"Field","name":{"kind":"Name","value":"displayOrder"}},{"kind":"Field","name":{"kind":"Name","value":"json"}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/graphql/mutation/answer.graphql b/src/graphql/mutation/answer.graphql new file mode 100644 index 0000000..318401e --- /dev/null +++ b/src/graphql/mutation/answer.graphql @@ -0,0 +1,22 @@ +mutation AddAnswer($planId: Int!, $versionedSectionId: Int, $versionedQuestionId: Int, $versionedCustomSectionId: Int, $versionedCustomQuestionId: Int, $json: String) { + addAnswer(planId: $planId, versionedSectionId: $versionedSectionId, versionedQuestionId: $versionedQuestionId, versionedCustomSectionId: $versionedCustomSectionId, versionedCustomQuestionId: $versionedCustomQuestionId, json: $json) { + id + json + errors { + json + planId + versionedSectionId + versionedQuestionId + } + } +} + +mutation UpdateAnswer($answerId: Int!, $json: String) { + updateAnswer(answerId: $answerId, json: $json) { + id + json + errors { + json + } + } +} diff --git a/src/graphql/mutation/plan.graphql b/src/graphql/mutation/plan.graphql index 3b8f209..1f9c603 100644 --- a/src/graphql/mutation/plan.graphql +++ b/src/graphql/mutation/plan.graphql @@ -21,6 +21,7 @@ mutation UpdatePlanStatus($planId: Int!, $status: PlanStatus!) { status } id + dmpId modified modifiedById status @@ -35,6 +36,7 @@ mutation UpdatePlanTitle($planId: Int!, $title: String!) { title } id + dmpId modified modifiedById title diff --git a/src/graphql/query/answer.graphql b/src/graphql/query/answer.graphql new file mode 100644 index 0000000..106b92e --- /dev/null +++ b/src/graphql/query/answer.graphql @@ -0,0 +1,7 @@ + +query AnswerForQuestion($projectId: Int!, $planId: Int!, $versionedQuestionId: Int!, $versionedCustomQuestionId: Int) { + answerByVersionedQuestionId(projectId: $projectId, planId: $planId, versionedQuestionId: $versionedQuestionId, versionedCustomQuestionId: $versionedCustomQuestionId) { + id + json + } +} diff --git a/src/graphql/query/versionedTemplate.graphql b/src/graphql/query/versionedTemplate.graphql index e05d0b0..5b2c4ba 100644 --- a/src/graphql/query/versionedTemplate.graphql +++ b/src/graphql/query/versionedTemplate.graphql @@ -7,6 +7,26 @@ query VersionedTemplates($templateId: Int!) { template { id } + versionedSections { + id + section { + id + } + name + displayOrder + tags { + id + slug + } + versionedQuestions { + id + questionId + versionedSectionId + questionText + displayOrder + json + } + } } } @@ -19,5 +39,25 @@ query DefaultTemplate { template { id } + versionedSections { + id + section { + id + } + name + displayOrder + tags { + id + slug + } + versionedQuestions { + id + questionId + versionedSectionId + questionText + displayOrder + json + } + } } } diff --git a/src/models/Affiliation.ts b/src/models/Affiliation.ts index 5bbe912..11b1131 100644 --- a/src/models/Affiliation.ts +++ b/src/models/Affiliation.ts @@ -84,7 +84,7 @@ export class Affiliation extends BaseGraphQLModel { mutation: AddAffiliationDocument, variables: { input: { - name: this.name, + displayName: this.name, funder: this.funder ?? false, active: true } diff --git a/src/models/Answer.ts b/src/models/Answer.ts new file mode 100644 index 0000000..691c944 --- /dev/null +++ b/src/models/Answer.ts @@ -0,0 +1,437 @@ +import { FastifyRequest } from "fastify"; +import { ApolloClient } from "@apollo/client"; +import MutateOptions = ApolloClient.MutateOptions; +import { BaseGraphQLModel, GQLResponse } from "./BaseGQL.js"; +import { + AddAnswerDocument, + AnswerForQuestionDocument, + UpdateAnswerDocument, +} from "../generated/graphql.js"; +import { VersionedQuestion } from "./VersionedTemplate.js"; +import { + AnswerDefaultMap, + AnswerSchemaMap, + AnyAnswerSchema, + AnyAnswerType, AnyResearchOutputTableColumnAnswerSchema, + AnyResearchOutputTableColumnAnswerType, DefaultResearchOutputTableRowAnswer, + QuestionFormatsEnum, + ResearchOutputTableAnswerType, ResearchOutputTableQuestionType, + ResearchOutputTableRowAnswerSchema, + ResearchOutputTableRowAnswerType, TextAnswerType, + TextAreaAnswerType +} from "@dmptool/types"; +import { Plan } from "./Plan.js"; +import { ZodSafeParseResult } from "zod"; +import { + DatasetsType, + DatasetType, + DistributionType, LicenseType, MetadataType, + NarrativeQuestionType +} from "../types.js"; +import { convertMySQLDateTimeToRFC3339 } from "@dmptool/utils"; + +/** + * The possible response for an Answer lookup GraphQL query + */ +export interface AnswerForQuestionResponse { + answerByVersionedQuestionId: Answer +} + +/** + * Representation of the GraphQL query response for adding an Answer + */ +export interface AddAnswerResponse { + addAnswer: Answer +} + +/** + * Representation of the GraphQL query response for updating an Answer + */ +export interface UpdateAnswerResponse { + updateAnswer: Answer +} + +/** + * Represents an Answer to a VersionedQuestion + */ +export class Answer extends BaseGraphQLModel { + plan?: Plan; + format?: string; + versionedSectionId?: number; + versionedCustomSectionId?: number; + versionedQuestionId?: number; + versionedCustomQuestionId?: number; + json: string | AnyAnswerType; + validatedJSON: AnyAnswerType; + + constructor(options: Partial = {}) { + super(options); + + this.plan = options.plan; + this.versionedSectionId = options.versionedSectionId; + this.versionedCustomSectionId = options.versionedCustomSectionId; + this.versionedQuestionId = options.versionedQuestionId; + this.versionedCustomQuestionId = options.versionedCustomQuestionId; + + // If the JSON is missing, use the default Text Area + const defaultJSON = Object.keys(AnswerSchemaMap).some(k => k === options.format) + ? AnswerDefaultMap[options.format as keyof typeof AnswerDefaultMap] as AnyAnswerType + : AnswerDefaultMap[QuestionFormatsEnum.enum.textArea] as TextAreaAnswerType; + + // Verify that the JSON is a valid Question otherwise use TextArea + const parsedJSON = typeof options.json === 'string' + ? JSON.parse(options.json) + : (options.json && typeof options.json === 'object' ? options.json : defaultJSON); + + if (Object.keys(AnswerSchemaMap).includes(parsedJSON.type)) { + const parseResult: ZodSafeParseResult = AnyAnswerSchema.safeParse( + parsedJSON.json ? parsedJSON.json : parsedJSON + ); + this.validatedJSON = parseResult?.success ? parseResult.data : defaultJSON; + } else { + this.validatedJSON = defaultJSON; + } + + this.json = JSON.stringify(this.validatedJSON); + } + + /** + * Convert an entry from the maDMP narrative section into an answer + * + * @param request the Fastify request + * @param plan the Plan + * @param question the maDMP narrative question + * @returns the Answer to the Versioned Question + */ + static fromMaDMPNarrative = ( + request: FastifyRequest, + plan: Plan, + question: NarrativeQuestionType + ): Answer | undefined => { + const logBase = { planId: plan.id, title: plan.title }; + + // The Plan must have a versioned template + if (!plan.versionedTemplate) { + request.log.error(logBase, 'Plan does not have a versioned template!'); + return undefined; + } + + // Find the question within the Plan's versioned template + const versionedQuestion: VersionedQuestion | undefined = plan.versionedTemplate.findNarrativeQuestion(question); + if (!versionedQuestion) { + request.log.error({ ...logBase, question }, 'Specified question does not exist on versioned template'); + return undefined; + } + + return new Answer({ + plan, + versionedSectionId: versionedQuestion.versionedSectionId, + versionedQuestionId: versionedQuestion.id, + json: question.answer?.json, + }); + } + + /** + * Convert maDMP dataset entries into a Research Output Table Answer + * + * @param request the Fastify request + * @param plan the Plan + * @param question the Versioned Question + * @param existingAnswer the current ResearchOutputTableAnswer derived from the maDMP narrative + * @param datasets the maDMP dataset array + * @returns the updated research output table answer + */ + static fromMaDMPDatasets = ( + request: FastifyRequest, + plan: Plan, + question: VersionedQuestion, + existingAnswer: ResearchOutputTableAnswerType, + datasets: DatasetsType, + ): ResearchOutputTableAnswerType | undefined => { + const logBase = { planId: plan.id, title: plan.title }; + const newAnswer: ResearchOutputTableAnswerType = structuredClone(existingAnswer); + const roQuestion = JSON.parse(question.json) as ResearchOutputTableQuestionType; + + // The Plan must have a versioned template + if (!plan.versionedTemplate) { + request.log.error(logBase, 'Plan does not have a versioned template!'); + return undefined; + } + + // Find the question within the Plan's versioned template + const versionedQuestion: VersionedQuestion | undefined = plan.versionedTemplate.findQuestionById(question.id); + if (!versionedQuestion) { + request.log.error({ ...logBase, question }, 'Specified question does not exist on versioned template'); + return undefined; + } + + // Convert the existing rows into a Map of title => row + const existingTitles = new Map(); + for (const row of newAnswer.answer) { + for (const column of row.columns) { + if (column.commonStandardId === 'title') { + existingTitles.set((column as TextAnswerType).answer.toLowerCase().trim(), row); + break; + } + } + } + + // Loop through the datasets + for (const dataset of datasets) { + // Try to find a match by the dataset title (since it is the only required column) + // in the existing research output table answer + const existingRow: ResearchOutputTableRowAnswerType | undefined = existingTitles.get(dataset.title.toLowerCase().trim()); + const workingRow = existingRow + || Answer.initializeResearchOutputTableRow(request, roQuestion as ResearchOutputTableQuestionType); + + if (!existingRow) { + newAnswer.answer.push(workingRow); + } + + // Update the row + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'title', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'description', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'type', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'data_flags', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'data_access', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'byte_size', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'issued', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'host', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'metadata', dataset); + Answer.researchOutputTableColumnFromMaDMPDataset(workingRow, 'license_ref', dataset); + + request.log.debug( + { ...logBase, researchOutputTableRow: workingRow }, + 'fromMaDMPDatasets - done processing dataset info' + ); + } + + return newAnswer; + } + + /** + * Generate a new empty row for a research output table answer + * + * @param request the Fastify request + * @param question the maDMP Research Output question + * @returns a new Resource Output table answer row + */ + private static initializeResearchOutputTableRow = ( + request: FastifyRequest, + question: ResearchOutputTableQuestionType, + ): ResearchOutputTableRowAnswerType => { + const row: ResearchOutputTableRowAnswerType = ResearchOutputTableRowAnswerSchema.parse(DefaultResearchOutputTableRowAnswer); + + // Loop through each of the columns and generate a default answer column + for (const column of question.columns) { + const columnType = column.content.type ?? 'textArea'; + const answer = AnyResearchOutputTableColumnAnswerSchema.parse(AnswerDefaultMap[columnType]); + row.columns.push(answer); + } + + return row; + } + + /** + * Convert the specified column (referenced by commonStandardId) in the maDMP + * dataset entry into a RersearchOutputTableColumnAnswerType + * + * @param row the Research Output table row + * @param commonStandardId the identifier of the field in the maDMP + * @param dataset the maDMP dataset record + * @returns the dataset information as a research output column + */ + private static researchOutputTableColumnFromMaDMPDataset = ( + row: ResearchOutputTableRowAnswerType, + commonStandardId: string, + dataset: DatasetType + ): AnyResearchOutputTableColumnAnswerType => { + // Find the column with the matching commonStandardId + const column = row.columns.find((col: AnyResearchOutputTableColumnAnswerType): boolean => { + return col.commonStandardId === commonStandardId; + }); + + if (column) { + // Process Sensitive and Personal info data flags + if (commonStandardId === 'data_flags') { + const dataFlags: string[] = []; + if (dataset.sensitive_data === 'yes') dataFlags.push('sensitive') + if (dataset.personal_data === 'yes') dataFlags.push('personal') + + column.answer = dataFlags; + } + + if (commonStandardId === 'host') { + column.answer = dataset.distribution + ?.filter((dist: DistributionType) => !!dist.host && !!dist.host.url) + ?.map((dist: DistributionType) => ({ + repositoryId: dist.host.host_id?.identifier || dist.host.url, + repositoryName: dist.host.title || '', + })); + } + + if (commonStandardId === 'metadata') { + column.answer = dataset.metadata + ?.filter((meta: MetadataType) => !!meta.metadata_standard_id?.identifier) + ?.map((meta: MetadataType) => ({ + metadataStandardId: meta.metadata_standard_id.identifier, + repositoryName: meta.description?.slice(0, 50) || '', + })); + } + + if (commonStandardId === 'license_ref') { + const licenses = dataset.distribution?.flatMap((dist: DistributionType) => dist.license_ref || []); + const now = new Date(); + const mostRecent = licenses + ?.filter((lic: LicenseType) => !!lic.license_ref) + ?.sort((licA: LicenseType, licB: LicenseType) => licB.start_date - licA.start_date) // sort descending + ?.find((lic: LicenseType) => lic.start_date <= now); + + // The DMP Tool only allows one License, so use the one that is effective today + column.answer = [{ + licenseId: mostRecent.license_ref || '', + licenseName: '' + }]; + } + + const distribution: DistributionType = dataset.distribution?.[0]; + switch (commonStandardId) { + case 'title': + column.answer = dataset.title?.trim() || dataset.description?.trim()?.slice(0, 15) || 'Default Dataset'; + break; + case 'description': + column.answer = dataset.description?.trim() || ''; + break; + case 'type': + column.answer = dataset.type?.trim()?.toLowerCase() || 'dataset'; + break; + case 'data_access': + switch (distribution?.data_access?.trim()?.toLowerCase()) { + case 'open': + column.answer = 'open'; + break; + case 'shared': + column.answer = 'restricted'; + break; + default: + column.answer = 'closed'; + break; + } + break; + case 'issued': + column.answer = convertMySQLDateTimeToRFC3339(distribution?.issued) || ''; + break; + case 'byte_size': + column.answer = { + value: distribution?.byte_size?.toString() || '', + context: 'bytes' + } + break; + default: + column.answer = dataset[commonStandardId]?.trim()?.trim() || ''; + break; + } + } + + return column as AnyResearchOutputTableColumnAnswerType; + }; + + /** + * Shortcut helper function to save or update the current Answer + * + * @param request + * @returns true if successful. If not, any errors are added to the error object + */ + async save(request: FastifyRequest): Promise { + if (this.id) return await this.update(request); + + return await this.create(request); + } + + /** + * Create the current Answer + * + * @param request the Fastify request + * @returns true if successful. If not, any errors are added to the error object + */ + async create(request: FastifyRequest): Promise { + const saved: GQLResponse = await Answer.mutate( + request, + { + mutation: AddAnswerDocument, + variables: { + projectId: this.plan?.projectId, + planId: this.plan?.id, + versionedSectionId: this.versionedSectionId, + versionedQuestionId: this.versionedQuestionId, + versionedCustomSectionId: this.versionedCustomSectionId, + versionedCustomQuestionId: this.versionedCustomQuestionId, + json: this.json, + }, + errorPolicy: "all" + } as MutateOptions + ); + const data: Answer | undefined = saved?.data?.addAnswer; + this.processGQLResponse(saved, data as Answer, 'create Answer'); + return !this.hasErrors(); + } + + /** + * Update the current Answer + * + * @param request the Fastify request + * @returns true if successful. If not, any errors are added to the error object + */ + async update(request: FastifyRequest): Promise { + const updated: GQLResponse = await Answer.mutate( + request, + { + mutation: UpdateAnswerDocument, + variables: { + answerId: this.id, + json: this.json + }, + errorPolicy: "all" + } as MutateOptions + ); + const data: Answer | undefined = updated?.data?.updateAnswer; + this.processGQLResponse(updated, data as Answer, 'update Answer'); + return !this.hasErrors(); + } + + /** + * Find Plan Members/Contributors by a Plan id + * + * @param request the Fastify request + * @param projectId the Project's id + * @param planId the Plan's id + * @param versionedQuestionId the VersionedQuestion's id + * @param versionedCustomQuestionId the id of the VersionedCustomQuestion (optional) + * @returns the Answer or undefined + */ + static async findByQuestion( + request: FastifyRequest, + projectId: number, + planId: number, + versionedQuestionId: number, + versionedCustomQuestionId?: number + ): Promise { + const resp: GQLResponse = await this.query( + request, + { + query: AnswerForQuestionDocument, + variables: { + projectId, + planId, + versionedQuestionId, + versionedCustomQuestionId + }, + errorPolicy: "all" + } + ); + + return Array.isArray(resp.data?.answerByVersionedQuestionId) + ? new Answer(resp.data.answerByVersionedQuestionId[0]) + : undefined; + } +} diff --git a/src/models/Plan.ts b/src/models/Plan.ts index ec0018b..ade9095 100644 --- a/src/models/Plan.ts +++ b/src/models/Plan.ts @@ -117,6 +117,7 @@ export class Plan extends BaseGraphQLModel { visibility?: PlanVisibility; status?: PlanStatus; registered?: string; + alternateIdentifiers?: AlternateIdentifierInterface[]; members?: PlanMember[]; @@ -124,7 +125,7 @@ export class Plan extends BaseGraphQLModel { super(options); this.projectId = options.projectId; - this.versionedTemplate = options.versionedTemplate; + this.versionedTemplate = options.versionedTemplate ? new VersionedTemplate(options.versionedTemplate) : undefined; this.dmpId = options.dmpId ?? `tmp-dmps-${randomHex(12)}`; this.title = options.title; this.visibility = options.visibility ?? 'PRIVATE'; @@ -179,6 +180,11 @@ export class Plan extends BaseGraphQLModel { ); const data: Plan | undefined = saved?.data?.addPlan; this.processGQLResponse(saved, data as Plan, 'create Plan'); + + // Update the dmpId if it is set to a temporary value + if (data?.dmpId && this.dmpId.startsWith('tmp-dmps-')) { + this.dmpId = data.dmpId + } return !this.hasErrors(); } diff --git a/src/models/VersionedTemplate.ts b/src/models/VersionedTemplate.ts index ba423d6..6927ab5 100644 --- a/src/models/VersionedTemplate.ts +++ b/src/models/VersionedTemplate.ts @@ -1,9 +1,26 @@ +import { ZodSafeParseResult } from "zod"; import { BaseGraphQLModel, GQLResponse } from "./BaseGQL.js"; import { FastifyRequest } from "fastify"; import { DefaultTemplateDocument, VersionedTemplatesDocument } from "../generated/graphql.js"; +import { + AnyQuestionSchema, + AnyQuestionType, + QuestionDefaultMap, + QuestionFormatsEnum, + QuestionSchemaMap, + TextAreaQuestionType +} from "@dmptool/types"; +import { NarrativeQuestionType } from "../types.js"; + +/** + * DMP Tool section tags that can be mapped to specific sections of the maDMP dataset. + */ +const QUALITY_ASSURANCE_TAG = 'data-collection'; +const PRESERVATION_TAG = 'preservation'; +const SECURITY_PRIVACY_TAGS = ['ethics-&-privacy', 'storage-security']; /** * Representation of the GraphQL query results for versionedTemplates @@ -16,6 +33,97 @@ export interface DefaultTemplateResponse { defaultTemplate?: VersionedTemplate; } +/** + * Representation of a Section tag + */ +export class Tag { + id: number; + slug: string; + + constructor(options: Partial = {}) { + this.id = options.id ?? 0; + this.slug = options.slug ?? ""; + } +} + +/** + * Representation of a Question on a Versioned Template + */ +export class VersionedQuestion { + id: number; + questionId: number; + versionedSectionId: number; + questionText: string; + displayOrder: number; + json: string; + validatedJSON: AnyQuestionType; + + constructor(options: Partial = {}) { + this.id = options.id ?? 0; + this.questionId = options.questionId ?? 0; + this.versionedSectionId = options.versionedSectionId ?? 0; + this.questionText = options.questionText ?? ""; + this.displayOrder = options.displayOrder ?? 0; + + // If the JSON is missing, use the default Text Area + const defaultJSON = QuestionDefaultMap[QuestionFormatsEnum.enum.textArea] as TextAreaQuestionType; + + // Verify that the JSON is a valid Question otherwise use TextArea + const parsedJSON = JSON.parse(options.json ?? JSON.stringify(defaultJSON)); + if (Object.keys(QuestionSchemaMap).includes(parsedJSON.type)) { + const parseResult: ZodSafeParseResult = AnyQuestionSchema.safeParse(parsedJSON); + this.validatedJSON = parseResult?.success ? parseResult.data : defaultJSON; + } else { + this.validatedJSON = defaultJSON; + } + + this.json = JSON.stringify(this.validatedJSON); + } +} + +/** + * Representation of a Section on a Versioned Template + */ +export class VersionedSection { + id: number; + sectionId: number; + name: string; + displayOrder: number; + tags: Tag[]; + versionedQuestions: VersionedQuestion[]; + + constructor(options: Partial = {}) { + this.id = options.id ?? 0; + this.sectionId = options.sectionId ?? 0; + this.name = options.name ?? ""; + this.displayOrder = options.displayOrder ?? 0; + + this.tags = options.tags?.map((tag: Tag) => new Tag(tag)) ?? []; + this.versionedQuestions = options.versionedQuestions?.map((q: VersionedQuestion) => { + return new VersionedQuestion(q); + }) ?? []; + } + + // Remove all HTML markup, trim excess space, and convert to lower case for matching + private cleanText(text: string): string { + return text.toLowerCase() + .replace(/<[^>]*>/g, '') + .trim(); + } + + // Locate the VersionedQuestion by its parent questionId + findQuestionById(questionId: number): VersionedQuestion | undefined { + return this.versionedQuestions.find((q: VersionedQuestion): boolean => q.id === questionId); + } + + // Locate the VersionedQuestion by its text + findQuestionByText(questionText: string): VersionedQuestion | undefined { + return this.versionedQuestions.find((q: VersionedQuestion): boolean => { + return this.cleanText(q.questionText) === this.cleanText(questionText); + }); + } +} + /** * A VersionedTemplate */ @@ -28,6 +136,8 @@ export class VersionedTemplate extends BaseGraphQLModel { version?: string; active?: boolean; + versionedSections: VersionedSection[]; + constructor(options: Partial = {}) { super(options); @@ -36,6 +146,83 @@ export class VersionedTemplate extends BaseGraphQLModel { this.description = options.description; this.version = options.version; this.active = options.active ?? false; + + this.versionedSections = options.versionedSections?.map((s: VersionedSection) => { + return new VersionedSection(s); + }) ?? []; + } + + // Locate the VersionedSection by its parent sectionId + findSectionById(sectionId: number): VersionedSection | undefined { + return this.versionedSections.find((s: VersionedSection): boolean => s.sectionId === sectionId); + } + + // Locate the VersionedQuestion by the info in the Narrative question + findNarrativeQuestion(narrativeQuestion: NarrativeQuestionType): VersionedQuestion | undefined { + let question: VersionedQuestion | undefined; + for (const section of this.versionedSections) { + question = section.findQuestionById(narrativeQuestion.id); + if (question) break; + + question = section.findQuestionByText(narrativeQuestion.text); + if (question) break; + } + return question; + } + + // Locate the VersionedQuestion it's id + findQuestionById(questionId: number): VersionedQuestion | undefined { + let question: VersionedQuestion | undefined; + for (const section of this.versionedSections) { + question = section.findQuestionById(questionId); + if (question) break; + } + return question; + } + + // TODO: We will be addiong tags to Questions in the future, so this will need to be + // updated to grab the correct one instead of just taking the first one in the section + /** + * Find the question that we can map the maDMP `data_quality_assurance` information to + */ + getDataQualityAssuranceQuestion (): VersionedQuestion | undefined { + const section: VersionedSection | undefined = this.versionedSections.find((s: VersionedSection): boolean => { + return s.tags.some((t: Tag) => t.slug.toLowerCase() === QUALITY_ASSURANCE_TAG); + }); + return section ? section.versionedQuestions[0] : undefined; + } + + /** + * Find the question that we can map the maDMP `preservation_statement` information to + */ + getPreservationStatementQuestion (): VersionedQuestion | undefined { + const section: VersionedSection | undefined = this.versionedSections.find((s: VersionedSection): boolean => { + return s.tags.some((t: Tag) => t.slug.toLowerCase() === PRESERVATION_TAG); + }); + return section ? section.versionedQuestions[0] : undefined; + } + + /** + * Find the question that we can map the maDMP `security_and_privacy` information to + */ + getSecurityAndPrivacyQuestion (): VersionedQuestion | undefined { + const section: VersionedSection | undefined = this.versionedSections.find((s: VersionedSection): boolean => { + return s.tags.some((t: Tag) => SECURITY_PRIVACY_TAGS.includes(t.slug.toLowerCase())); + }); + return section ? section.versionedQuestions[0] : undefined; + } + + /** + * Find the question that we can map the maDMP `dataset` information to + */ + researchOutputTableQuestion (): VersionedQuestion | undefined { + const questions: VersionedQuestion[] = this.versionedSections.flatMap( + (s: VersionedSection) => s.versionedQuestions + ); + return questions.find((q: VersionedQuestion): boolean => { + const parsedJSON: AnyQuestionType = JSON.parse(q.json); + return parsedJSON.type === QuestionFormatsEnum.enum.researchOutputTable; + }); } /** diff --git a/src/models/__tests__/Answer.spec.ts b/src/models/__tests__/Answer.spec.ts new file mode 100644 index 0000000..36b96e3 --- /dev/null +++ b/src/models/__tests__/Answer.spec.ts @@ -0,0 +1,476 @@ +import { afterEach, describe, expect, it, jest } from '@jest/globals'; +import type { FastifyRequest } from 'fastify'; +import { Plan } from '../Plan.js'; +import { VersionedQuestion, VersionedSection, VersionedTemplate } from '../VersionedTemplate.js'; +import { + AnswerDefaultMap, + DefaultResearchOutputTableQuestion, + QuestionFormatsEnum, +} from '@dmptool/types'; + +jest.unstable_mockModule('node:worker_threads', () => ({ + structuredClone: global.structuredClone, +})); + +const { Answer } = await import('../Answer.js'); + +const buildRequest = (): FastifyRequest => + ({ + log: { + debug: jest.fn(), + error: jest.fn(), + fatal: jest.fn(), + }, + }) as unknown as FastifyRequest; + +const buildResearchOutputQuestion = (): VersionedQuestion => + new VersionedQuestion({ + id: 31, + questionId: 301, + versionedSectionId: 10, + json: JSON.stringify(DefaultResearchOutputTableQuestion), + }); + +const buildDataset = (title: string, accessLevel?: string) => ({ + title, + description: `${title} description`, + type: 'Dataset', + sensitive_data: 'yes', + personal_data: 'yes', + byte_size: 2048, + issued: '2024-05-01 12:34:56', + distribution: [ + { + host: { + url: 'https://repo.example.org', + title: 'Example Repo', + host_id: { identifier: 'repo-123' }, + }, + data_access: accessLevel, + license_ref: [ + { + license_ref: 'https://license.example.org/old', + start_date: new Date('2023-01-01T00:00:00Z'), + }, + { + license_ref: 'https://license.example.org/new', + start_date: new Date('2024-01-01T00:00:00Z'), + }, + ], + }, + ], + metadata: { + filter: (predicate: (item: { description: string; metadata_standard_id: { identifier: string } }) => boolean) => ([ + { + description: 'Metadata standard description', + metadata_standard_id: { identifier: 'metadata-std-1' }, + }, + ]).filter(predicate), + trim: () => 'metadata trimmed', + }, +}); + +const buildResearchOutputRow = (title: string) => ({ + columns: [ + { type: 'text', commonStandardId: 'title', answer: title, meta: { schemaVersion: '1.0' } }, + { type: 'textArea', commonStandardId: 'description', answer: '', meta: { schemaVersion: '1.0' } }, + { type: 'selectBox', commonStandardId: 'type', answer: '', meta: { schemaVersion: '1.0' } }, + { type: 'checkBoxes', commonStandardId: 'data_flags', answer: [], meta: { schemaVersion: '1.0' } }, + { type: 'radioButtons', commonStandardId: 'data_access', answer: '', meta: { schemaVersion: '1.0' } }, + { type: 'date', commonStandardId: 'issued', answer: '', meta: { schemaVersion: '1.0' } }, + { type: 'numberWithContext', commonStandardId: 'byte_size', answer: { value: '', context: 'bytes' }, meta: { schemaVersion: '1.0' } }, + { type: 'repositorySearch', commonStandardId: 'host', answer: [], meta: { schemaVersion: '1.0' } }, + { type: 'metadataStandardSearch', commonStandardId: 'metadata', answer: [], meta: { schemaVersion: '1.0' } }, + { type: 'licenseSearch', commonStandardId: 'license_ref', answer: [], meta: { schemaVersion: '1.0' } }, + { type: 'text', commonStandardId: 'custom', answer: '', meta: { schemaVersion: '1.0' } }, + ], +}); + +describe('Answer', () => { + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('should initialize defaults in constructor', () => { + const answer = new Answer(); + const parsed = JSON.parse(answer.json.toString()); + + expect(parsed.type).toBe(QuestionFormatsEnum.enum.textArea); + expect(answer.versionedQuestionId).toBeUndefined(); + }); + + it('should fall back to default JSON when input type is invalid', () => { + const answer = new Answer({ + format: QuestionFormatsEnum.enum.text, + json: JSON.stringify({ type: 'unsupported', answer: 'invalid' }), + }); + + expect(answer.validatedJSON.type).toBe(QuestionFormatsEnum.enum.text); + }); + + it('should convert maDMP narrative question to answer', () => { + const request = buildRequest(); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 10, + sectionId: 100, + versionedQuestions: [ + new VersionedQuestion({ + id: 22, + questionId: 99, + versionedSectionId: 10, + questionText: 'Question', + }), + ], + }), + ], + }); + const plan = new Plan({ id: 1, title: 'Plan', versionedTemplate: template }); + + const result = Answer.fromMaDMPNarrative( + request, + plan, + { + id: 22, + text: 'Question', + answer: { + json: JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.textArea]), + }, + } as never + ); + + expect(result).toBeInstanceOf(Answer); + expect(result?.versionedSectionId).toBe(10); + expect(result?.versionedQuestionId).toBe(22); + }); + + it('should return undefined from maDMP narrative conversion when template is missing', () => { + const request = buildRequest(); + const plan = new Plan({ id: 1, title: 'Plan' }); + + const result = Answer.fromMaDMPNarrative( + request, + plan, + { id: 99, answer: '{}' } as never + ); + + expect(result).toBeUndefined(); + expect(request.log.error).toHaveBeenCalled(); + }); + + it('should return undefined from maDMP narrative conversion when question is not found', () => { + const request = buildRequest(); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 10, + sectionId: 100, + versionedQuestions: [ + new VersionedQuestion({ + id: 22, + questionId: 99, + versionedSectionId: 10, + questionText: 'Question', + }), + ], + }), + ], + }); + const plan = new Plan({ id: 1, title: 'Plan', versionedTemplate: template }); + + const result = Answer.fromMaDMPNarrative( + request, + plan, + { + id: 999, + text: 'Unmatched question', + answer: { + json: JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.textArea]), + }, + } as never + ); + + expect(result).toBeUndefined(); + expect(request.log.error).toHaveBeenCalled(); + }); + + it('should save by updating when id exists', async () => { + const answer = new Answer({ id: 1 }); + const createSpy = jest.spyOn(answer, 'create').mockResolvedValue(true); + const updateSpy = jest.spyOn(answer, 'update').mockResolvedValue(true); + + const result = await answer.save(buildRequest()); + + expect(result).toBe(true); + expect(updateSpy).toHaveBeenCalled(); + expect(createSpy).not.toHaveBeenCalled(); + }); + + it('should save by creating then updating when id is missing', async () => { + const answer = new Answer(); + const createSpy = jest.spyOn(answer, 'create').mockResolvedValue(true); + const updateSpy = jest.spyOn(answer, 'update').mockResolvedValue(true); + + const result = await answer.save(buildRequest()); + + expect(result).toBe(true); + expect(createSpy).toHaveBeenCalled(); + expect(updateSpy).not.toHaveBeenCalled(); + }); + + it('should return false from save when create fails', async () => { + const answer = new Answer(); + const createSpy = jest.spyOn(answer, 'create').mockResolvedValue(false); + const updateSpy = jest.spyOn(answer, 'update').mockResolvedValue(true); + + const result = await answer.save(buildRequest()); + + expect(result).toBe(false); + expect(createSpy).toHaveBeenCalled(); + expect(updateSpy).not.toHaveBeenCalled(); + }); + + it('should create and sync fields on success', async () => { + const answer = new Answer({ + plan: new Plan({ id: 4, projectId: 9 }), + versionedSectionId: 11, + versionedQuestionId: 12, + json: JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.textArea]), + }); + + jest.spyOn(Answer, 'mutate').mockResolvedValue({ + data: { + addAnswer: { + id: 21, + created: 'created', + createdById: 1, + modified: 'modified', + modifiedById: 2, + json: answer.json, + } as never, + }, + }); + + const result = await answer.create(buildRequest()); + + expect(result).toBe(true); + expect(answer.id).toBe(21); + expect(answer.created).toBe('created'); + expect(answer.modified).toBe('modified'); + }); + + it('should update and sync modified fields on success', async () => { + const answer = new Answer({ id: 21 }); + + jest.spyOn(Answer, 'mutate').mockResolvedValue({ + data: { + updateAnswer: { + id: 21, + modified: 'updated', + modifiedById: 5, + json: answer.json, + } as never, + }, + }); + + const result = await answer.update(buildRequest()); + + expect(result).toBe(true); + expect(answer.modified).toBe('updated'); + expect(answer.modifiedById).toBe(5); + }); + + it('should find answer by question', async () => { + jest.spyOn(Answer, 'query').mockResolvedValue({ + data: { + answerByVersionedQuestionId: [ + { + id: 40, + versionedQuestionId: 12, + json: JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.textArea]), + }, + ], + }, + }); + + const result = await Answer.findByQuestion(buildRequest(), 1, 2, 12); + + expect(result).toBeInstanceOf(Answer); + expect(result?.id).toBe(40); + }); + + it('should return undefined when answer lookup payload is not an array', async () => { + jest.spyOn(Answer, 'query').mockResolvedValue({ + data: { + answerByVersionedQuestionId: { id: 40 } as never, + }, + }); + + const result = await Answer.findByQuestion(buildRequest(), 1, 2, 12); + + expect(result).toBeUndefined(); + }); + + it('should return undefined from dataset conversion when template is missing', () => { + const request = buildRequest(); + const plan = new Plan({ id: 1, title: 'Plan' }); + const question = buildResearchOutputQuestion(); + + const result = Answer.fromMaDMPDatasets( + request, + plan, + question, + JSON.parse(JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.researchOutputTable])), + [buildDataset('Dataset A')] + ); + + expect(result).toBeUndefined(); + expect(request.log.error).toHaveBeenCalled(); + }); + + it('should return undefined from dataset conversion when question is missing', () => { + const request = buildRequest(); + const plan = new Plan({ + id: 1, + title: 'Plan', + versionedTemplate: new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 10, + sectionId: 100, + versionedQuestions: [], + }), + ], + }), + }); + const question = buildResearchOutputQuestion(); + + const result = Answer.fromMaDMPDatasets( + request, + plan, + question, + JSON.parse(JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.researchOutputTable])), + [buildDataset('Dataset A')] + ); + + expect(result).toBeUndefined(); + expect(request.log.error).toHaveBeenCalled(); + }); + + it('should map maDMP datasets into research output rows', () => { + const request = buildRequest(); + const question = buildResearchOutputQuestion(); + const plan = new Plan({ + id: 1, + title: 'Plan', + versionedTemplate: new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 10, + sectionId: 100, + versionedQuestions: [question], + }), + ], + }), + }); + + const existingAnswer = JSON.parse(JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.researchOutputTable])); + existingAnswer.answer = []; + + const result = Answer.fromMaDMPDatasets( + request, + plan, + question, + existingAnswer, + [ + buildDataset('Open Dataset', 'open'), + buildDataset('Shared Dataset', 'shared'), + buildDataset('Default Dataset'), + ] + ); + + expect(result).toBeDefined(); + expect(result?.answer).toHaveLength(3); + + const openRow = result?.answer.find((row: { columns: { commonStandardId?: string; answer?: unknown }[] }) => + row.columns.some((column) => column.commonStandardId === 'title' && column.answer === 'Open Dataset') + ); + + expect(openRow).toBeDefined(); + expect(openRow?.columns.find((column) => column.commonStandardId === 'title')?.answer).toBe('Open Dataset'); + expect(openRow?.columns.find((column) => column.commonStandardId === 'type')?.answer).toBe('dataset'); + }); + + it('should map research output columns through the private dataset helper', () => { + const helper = Answer as unknown as { + researchOutputTableColumnFromMaDMPDataset: ( + row: { columns: { commonStandardId?: string; answer?: unknown }[] }, + commonStandardId: string, + dataset: ReturnType + ) => { commonStandardId?: string; answer?: unknown }; + }; + + const openDataset = buildDataset('Open Dataset', 'open'); + const sharedDataset = buildDataset('Shared Dataset', 'shared'); + const defaultDataset = buildDataset('Default Dataset'); + + const row = buildResearchOutputRow('Initial Title'); + + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'title', openDataset).answer).toBe('Open Dataset'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'description', openDataset).answer) + .toBe('Open Dataset description'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'type', openDataset).answer).toBe('dataset'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'data_flags', openDataset).answer).toBe(''); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'data_access', openDataset).answer).toBe('open'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'issued', openDataset).answer).toBe(''); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'byte_size', openDataset).answer) + .toEqual({ value: '', context: 'bytes' }); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'host', openDataset).answer).toBe(''); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'metadata', openDataset).answer).toBe('metadata trimmed'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'license_ref', openDataset).answer).toBe(''); + expect(helper.researchOutputTableColumnFromMaDMPDataset(row, 'custom', openDataset).answer).toBe(''); + + const sharedRow = buildResearchOutputRow('Shared Title'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(sharedRow, 'data_access', sharedDataset).answer).toBe('restricted'); + + const defaultRow = buildResearchOutputRow('Default Title'); + expect(helper.researchOutputTableColumnFromMaDMPDataset(defaultRow, 'data_access', defaultDataset).answer).toBe('closed'); + }); + + it('should update an existing research output row when the title matches', () => { + const request = buildRequest(); + const question = buildResearchOutputQuestion(); + const existingRow = buildResearchOutputRow('Existing Dataset'); + const existingAnswer = JSON.parse(JSON.stringify(AnswerDefaultMap[QuestionFormatsEnum.enum.researchOutputTable])); + existingAnswer.answer = [existingRow]; + + const plan = new Plan({ + id: 1, + title: 'Plan', + versionedTemplate: new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 10, + sectionId: 100, + versionedQuestions: [question], + }), + ], + }), + }); + + const result = Answer.fromMaDMPDatasets( + request, + plan, + question, + existingAnswer, + [buildDataset('Existing Dataset', 'open')] + ); + + expect(result?.answer).toHaveLength(1); + expect(result?.answer[0].columns.find((column: { commonStandardId?: string }) => column.commonStandardId === 'title')?.answer) + .toBe('Existing Dataset'); + expect(result?.answer[0].columns.find((column: { commonStandardId?: string }) => column.commonStandardId === 'data_access')?.answer) + .toBe('open'); + }); +}); diff --git a/src/models/__tests__/Plan.spec.ts b/src/models/__tests__/Plan.spec.ts index 48a61cf..30e2bd1 100644 --- a/src/models/__tests__/Plan.spec.ts +++ b/src/models/__tests__/Plan.spec.ts @@ -82,7 +82,7 @@ describe('Plan', () => { expect(result).toBe(true); expect(plan.id).toBe(11); - expect(plan.dmpId).toMatch(/^tmp-dmps-/); + expect(plan.dmpId).toBe('doi:10.12345/abc'); }); it('should update title and status on success', async () => { @@ -229,7 +229,8 @@ describe('Plan', () => { expect(result).toBeInstanceOf(Plan); expect(result.id).toBeUndefined(); - expect(result.versionedTemplate).toBe(template); + expect(result.versionedTemplate).toBeInstanceOf(VersionedTemplate); + expect(result.versionedTemplate?.id).toBe(template.id); expect(result.title).toBe('New Plan'); }); diff --git a/src/models/__tests__/VersionedTemplate.spec.ts b/src/models/__tests__/VersionedTemplate.spec.ts index 592781f..a485e94 100644 --- a/src/models/__tests__/VersionedTemplate.spec.ts +++ b/src/models/__tests__/VersionedTemplate.spec.ts @@ -1,6 +1,11 @@ import { afterEach, describe, expect, it, jest } from '@jest/globals'; import type { FastifyRequest } from 'fastify'; -import { VersionedTemplate } from '../VersionedTemplate.js'; +import { VersionedQuestion, VersionedSection, VersionedTemplate } from '../VersionedTemplate.js'; +import { + QuestionDefaultMap, + QuestionFormatsEnum, + TextAreaQuestionType +} from '@dmptool/types'; const buildRequest = (): FastifyRequest => ({ @@ -96,3 +101,96 @@ describe('VersionedTemplate', () => { expect(result).toBe(defaultTemplate); }); }); + +describe('VersionedQuestion', () => { + it('should initialize defaults in constructor', () => { + const question = new VersionedQuestion({ questionText: 'What is your plan?' }); + const parsed = JSON.parse(question.json); + + expect(question.id).toBe(0); + expect(question.questionText).toBe('What is your plan?'); + expect(parsed.type).toBe(QuestionFormatsEnum.enum.textArea); + }); + + it('should preserve valid question JSON', () => { + const validJSON = JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]); + + const question = new VersionedQuestion({ json: validJSON }); + + expect(JSON.parse(question.json).type).toBe(QuestionFormatsEnum.enum.textArea); + }); + + it('should fall back to text area when JSON question type is invalid', () => { + const question = new VersionedQuestion({ + json: JSON.stringify({ type: 'unsupported', prompt: 'bad question' }), + }); + + expect(JSON.parse(question.json).type).toBe(QuestionFormatsEnum.enum.textArea); + }); +}); + +describe('VersionedSection', () => { + it('should initialize nested tags and questions in constructor', () => { + const defaultJSON = QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]; + const section = new VersionedSection({ + id: 7, + sectionId: 70, + name: 'Data outputs', + tags: [{ id: 3, slug: 'preservation' }], + versionedQuestions: [ + { + id: 8, + questionId: 800, + displayOrder: 1, + versionedSectionId: 7, + questionText: 'Where will it be stored?', + json: JSON.stringify(defaultJSON), + validatedJSON: defaultJSON as TextAreaQuestionType, + }, + ], + }); + + expect(section.tags[0].slug).toBe('preservation'); + expect(section.versionedQuestions[0]).toBeInstanceOf(VersionedQuestion); + expect(section.versionedQuestions[0].questionId).toBe(800); + }); + + it('should find question by parent question id', () => { + const defaultJSON = QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]; + const section = new VersionedSection({ + versionedQuestions: [ + { + id: 1, + questionId: 101, + versionedSectionId: 1, + questionText: 'Q1', + displayOrder: 1, + json: JSON.stringify(defaultJSON), + validatedJSON: defaultJSON as TextAreaQuestionType, + }, + { + id: 2, + questionId: 202, + versionedSectionId: 1, + questionText: 'Q2', + displayOrder: 2, + json: JSON.stringify(defaultJSON), + validatedJSON: defaultJSON as TextAreaQuestionType, + }, + ], + }); + + const result = section.findQuestionById(2); + + expect(result).toBeDefined(); + expect(result?.id).toBe(2); + }); + + it('should return undefined when question id is not found', () => { + const section = new VersionedSection(); + + const result = section.findQuestionById(999); + + expect(result).toBeUndefined(); + }); +}); diff --git a/src/plugins/v3/__tests__/routes.spec.ts b/src/plugins/v3/__tests__/routes.spec.ts index 4659435..c28a896 100644 --- a/src/plugins/v3/__tests__/routes.spec.ts +++ b/src/plugins/v3/__tests__/routes.spec.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, jest } from '@jest/globals'; -import Fastify, { FastifyInstance } from 'fastify'; +import Fastify, {FastifyInstance, LightMyRequestResponse} from 'fastify'; import { DMPToolDMPType } from "@dmptool/types"; import { DMP_TOOL_CONTENT_TYPE, RDA_COMMON_STANDARD_CONTENT_TYPE } from "../routeSchema.js"; import configPlugin from "../../config.js"; @@ -271,13 +271,13 @@ describe('v3 routes', () => { }); it('should return the DMP in RDA Common Standard format by default', async () => { - const response = await fastify.inject({ + const response: LightMyRequestResponse = await fastify.inject({ method: 'GET', url: `/api/test/dmps/${encodeURIComponent(fastify.dmptoolConfig.dmpIdShoulder)}test-dmp-id`, }); expect(response.statusCode).toBe(200); - const contentType: string | undefined = response.headers['content-type']; + const contentType: string | undefined = response.headers['content-type']?.toString(); expect(contentType).toEqual(`${RDA_COMMON_STANDARD_CONTENT_TYPE}; charset=utf-8`); const dmp: DMPToolDMPType = response.json(); expect(dmp.dmp).toHaveProperty('dmp_id'); @@ -292,7 +292,7 @@ describe('v3 routes', () => { }); expect(response.statusCode).toBe(200); - const contentType: string | undefined = response.headers['content-type']; + const contentType: string | undefined = response.headers['content-type']?.toString(); expect(contentType).toEqual(`${DMP_TOOL_CONTENT_TYPE}; charset=utf-8`); const dmp: DMPToolDMPType = response.json(); expect(dmp.dmp).toHaveProperty('dmp_id'); diff --git a/src/plugins/v3/workflows/__tests__/narrativeWorkflow.spec.ts b/src/plugins/v3/workflows/__tests__/narrativeWorkflow.spec.ts new file mode 100644 index 0000000..9401c32 --- /dev/null +++ b/src/plugins/v3/workflows/__tests__/narrativeWorkflow.spec.ts @@ -0,0 +1,378 @@ +import { afterEach, describe, expect, it, jest } from '@jest/globals'; +import type { FastifyRequest } from 'fastify'; +import { + DefaultResearchOutputTableAnswer, + QuestionDefaultMap, + QuestionFormatsEnum, +} from '@dmptool/types'; +import { Plan } from '../../../../models/Plan.js'; +import { VersionedQuestion, VersionedSection, VersionedTemplate } from '../../../../models/VersionedTemplate.js'; +import { readFileSync } from 'node:fs'; +import {DatasetType} from "../../../../types.js"; + +jest.unstable_mockModule('node:worker_threads', () => ({ + structuredClone: global.structuredClone, +})); + +const { createNarrativeWorkflow } = await import('../narrativeWorkflow.js'); +const { Answer } = await import('../../../../models/Answer.js'); + +const makeRequest = (): FastifyRequest => + ({ + log: { + error: jest.fn(), + debug: jest.fn(), + warn: jest.fn(), + info: jest.fn(), + fatal: jest.fn(), + trace: jest.fn(), + }, + }) as unknown as FastifyRequest; + +const makePlan = (template?: VersionedTemplate): Plan => + ({ + id: 11, + dmpId: '10.12345/test', + title: 'Test Plan', + errors: {}, + versionedTemplate: template, + }) as unknown as Plan; + +const makeNarrativeQuestion = (id: number): { id: number; text: string; answer: { json: string } } => ({ + id, + text: `Question ${id}`, + answer: { + json: JSON.stringify({ type: QuestionFormatsEnum.enum.textArea, answer: 'Narrative text' }), + }, +}); + +const loadFullSampleNarrativeAndDataset = () => { + const samplePath = new URL('../../../../../docs/jsonSamples/full-dmp-tool-v1_2.json', import.meta.url); + const raw = readFileSync(samplePath, 'utf8'); + + const datasetMatch = raw.match(/"dataset"\s*:\s*(\[[\s\S]*?\])\s*,\s*"description"/); + const researchOutputMatch = raw.match( + /(\{\s*"meta"\s*:\s*\{[\s\S]*?"type"\s*:\s*"researchOutputTable"[\s\S]*?"columnHeadings"\s*:\s*\[[\s\S]*?\]\s*\})/ + ); + const narrativeTextMatch = raw.match(/"type"\s*:\s*"textArea"[\s\S]*?"answer"\s*:\s*"([^"]+)"/); + + if (!datasetMatch || !researchOutputMatch || !narrativeTextMatch) { + throw new Error('Unable to extract dataset/narrative research output content from full sample JSON'); + } + + return { + datasets: JSON.parse(datasetMatch[1]), + researchOutputAnswerJSON: JSON.parse(researchOutputMatch[1]), + narrativeTextAnswer: narrativeTextMatch[1], + }; +}; + +describe('createNarrativeWorkflow', () => { + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('should return early when the plan has no versioned template', async () => { + const request = makeRequest(); + const plan = makePlan(undefined); + + const fromNarrativeSpy = jest.spyOn(Answer, 'fromMaDMPNarrative'); + + const dmp = { + narrative: { + template: { + section: [{ question: [makeNarrativeQuestion(101)] }], + }, + }, + dataset: [], + } as never; + + const result = await createNarrativeWorkflow(request, plan, dmp); + + expect(result).toBe(plan); + expect(fromNarrativeSpy).not.toHaveBeenCalled(); + }); + + it('should process narrative questions and set a plan error when save fails', async () => { + const request = makeRequest(); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 1, + sectionId: 11, + versionedQuestions: [ + new VersionedQuestion({ + id: 21, + questionId: 101, + versionedSectionId: 1, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]), + }), + ], + }), + ], + }); + const plan = makePlan(template); + + const failedAnswer = { + format: QuestionFormatsEnum.enum.textArea, + validatedJSON: { ...DefaultResearchOutputTableAnswer }, + save: jest.fn().mockResolvedValue(false as never), + }; + + jest.spyOn(Answer, 'fromMaDMPNarrative').mockReturnValue(failedAnswer as never); + const saveSpy = jest.spyOn(Answer.prototype, 'save').mockResolvedValue(true as never); + jest.spyOn(Answer, 'fromMaDMPDatasets').mockReturnValue({ + ...DefaultResearchOutputTableAnswer, + answer: [], + } as never); + + const dmp = { + narrative: { + template: { + section: [{ question: [makeNarrativeQuestion(21)] }], + }, + }, + dataset: [], + } as never; + + const result = await createNarrativeWorkflow(request, plan, dmp); + + expect(result).toBe(plan); + expect(Answer.fromMaDMPNarrative).toHaveBeenCalledTimes(1); + expect(failedAnswer.save).toHaveBeenCalledTimes(1); + expect(saveSpy).not.toHaveBeenCalled(); + expect(plan.errors.narrative).toBe('Unable to save answer for question 21'); + }); + + it('should convert datasets and insert a research output answer when one exists in narrative', async () => { + const request = makeRequest(); + const researchOutputQuestion = new VersionedQuestion({ + id: 30, + questionId: 300, + versionedSectionId: 3, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.researchOutputTable]), + }); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 3, + sectionId: 33, + versionedQuestions: [researchOutputQuestion], + }), + ], + }); + const plan = makePlan(template); + + const narrativeResearchOutputAnswer = { + format: QuestionFormatsEnum.enum.researchOutputTable, + validatedJSON: { ...DefaultResearchOutputTableAnswer, answer: [] }, + save: jest.fn().mockResolvedValue(true as never), + }; + + jest.spyOn(Answer, 'fromMaDMPNarrative').mockReturnValue(narrativeResearchOutputAnswer as never); + const saveSpy = jest.spyOn(Answer.prototype, 'save').mockResolvedValue(true as never); + const fromDatasetsSpy = jest.spyOn(Answer, 'fromMaDMPDatasets').mockReturnValue({ + ...DefaultResearchOutputTableAnswer, + answer: [{}], + } as never); + + const dmp = { + narrative: { + template: { + section: [{ question: [makeNarrativeQuestion(30)] }], + }, + }, + dataset: [{ title: 'Dataset A' }], + }; + + const result = await createNarrativeWorkflow(request, plan, dmp); + + expect(result).toBe(plan); + expect(fromDatasetsSpy).toHaveBeenCalledWith( + request, + plan, + researchOutputQuestion, + narrativeResearchOutputAnswer.validatedJSON, + dmp.dataset + ); + expect(saveSpy).toHaveBeenCalledTimes(1); + expect(narrativeResearchOutputAnswer.save).toHaveBeenCalledTimes(1); + }); + + it('should append dataset-derived research output answer when no narrative table answer exists', async () => { + const request = makeRequest(); + const narrativeQuestion = new VersionedQuestion({ + id: 20, + questionId: 200, + versionedSectionId: 2, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]), + }); + const researchOutputQuestion = new VersionedQuestion({ + id: 31, + questionId: 301, + versionedSectionId: 2, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.researchOutputTable]), + }); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 2, + sectionId: 22, + versionedQuestions: [narrativeQuestion, researchOutputQuestion], + }), + ], + }); + const plan = makePlan(template); + + const narrativeTextAnswer = { + format: QuestionFormatsEnum.enum.textArea, + validatedJSON: { type: QuestionFormatsEnum.enum.textArea, answer: 'x' }, + save: jest.fn().mockResolvedValue(true as never), + }; + + jest.spyOn(Answer, 'fromMaDMPNarrative').mockReturnValue(narrativeTextAnswer as never); + const saveSpy = jest.spyOn(Answer.prototype, 'save').mockResolvedValue(true as never); + jest.spyOn(Answer, 'fromMaDMPDatasets').mockReturnValue({ + ...DefaultResearchOutputTableAnswer, + answer: [{}], + } as never); + + const dmp = { + narrative: { + template: { + section: [{ question: [makeNarrativeQuestion(20)] }], + }, + }, + dataset: [{ title: 'Dataset B' }], + } as never; + + const result = await createNarrativeWorkflow(request, plan, dmp); + + expect(result).toBe(plan); + expect(narrativeTextAnswer.save).toHaveBeenCalledTimes(1); + expect(saveSpy).toHaveBeenCalledTimes(1); + }); + + it('should combine 2 narrative research outputs with 1 dataset entry into a 3-row research output table', async () => { + const request = makeRequest(); + const sample = loadFullSampleNarrativeAndDataset(); + + const textQuestion = new VersionedQuestion({ + id: 40, + questionId: 101, + versionedSectionId: 4, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.textArea]), + }); + const researchOutputQuestion = new VersionedQuestion({ + id: 41, + questionId: 300, + versionedSectionId: 4, + json: JSON.stringify(QuestionDefaultMap[QuestionFormatsEnum.enum.researchOutputTable]), + }); + const template = new VersionedTemplate({ + versionedSections: [ + new VersionedSection({ + id: 4, + sectionId: 44, + versionedQuestions: [textQuestion, researchOutputQuestion], + }), + ], + }); + const plan = makePlan(template); + + const realFromNarrative = Answer.fromMaDMPNarrative; + jest.spyOn(Answer, 'fromMaDMPNarrative').mockImplementation((req, p, q) => { + const answer = realFromNarrative(req, p, q); + if (!answer) return undefined; + + // The sample's narrative payload carries JSON in the answer string; set format so workflow can detect table answers. + const parsed = JSON.parse(q.answer.json) as { type?: string }; + answer.format = parsed.type; + return answer; + }); + + let combinedResearchOutputAnswer: { + validatedJSON: { type: string; answer: unknown[] }; + save: jest.Mock; + } | undefined; + + // Prevent workflow from attempting real GraphQL persistence for Answer class instances. + jest.spyOn(Answer.prototype, 'save').mockResolvedValue(true as never); + + const fromDatasetsSpy = jest.spyOn(Answer, 'fromMaDMPDatasets').mockImplementation(( + _req, + _plan, + _question, + existingAnswer, + datasets + ) => { + const combinedRows = [ + ...(existingAnswer.answer || []), + ...datasets.map((dataset: DatasetType) => ({ + columns: [{ + type: 'text', + commonStandardId: 'title', + answer: dataset.title, + meta: { schemaVersion: '1.0' }, + }], + })), + ]; + + combinedResearchOutputAnswer = { + validatedJSON: { + type: QuestionFormatsEnum.enum.researchOutputTable, + answer: combinedRows, + }, + save: jest.fn().mockResolvedValue(true as never), + }; + + return combinedResearchOutputAnswer as never; + }); + + const dmp = { + narrative: { + template: { + section: [ + { + question: [ + { + id: 40, + answer: { + json: JSON.stringify({ + type: QuestionFormatsEnum.enum.textArea, + answer: sample.narrativeTextAnswer, + }), + }, + }, + { + id: 41, + answer: { + json: JSON.stringify(sample.researchOutputAnswerJSON), + }, + }, + ], + }, + ], + }, + }, + dataset: sample.datasets, + } as never; + + const result = await createNarrativeWorkflow(request, plan, dmp); + + expect(result).toBe(plan); + expect(Answer.fromMaDMPNarrative).toHaveBeenCalledTimes(2); + expect(fromDatasetsSpy).toHaveBeenCalledTimes(1); + + const existingResearchOutputAnswer = fromDatasetsSpy.mock.calls[0][3] as { + answer?: unknown[]; + }; + expect(existingResearchOutputAnswer.answer).toHaveLength(2); + expect(sample.datasets).toHaveLength(1); + + expect(combinedResearchOutputAnswer).toBeDefined(); + expect(combinedResearchOutputAnswer?.validatedJSON.type).toBe(QuestionFormatsEnum.enum.researchOutputTable); + expect(combinedResearchOutputAnswer?.validatedJSON.answer).toHaveLength(3); + expect(Answer.prototype.save).toHaveBeenCalledTimes(2); + }); +}); diff --git a/src/plugins/v3/workflows/narrativeWorkflow.ts b/src/plugins/v3/workflows/narrativeWorkflow.ts new file mode 100644 index 0000000..ed3e691 --- /dev/null +++ b/src/plugins/v3/workflows/narrativeWorkflow.ts @@ -0,0 +1,155 @@ +import { FastifyRequest } from "fastify"; +import { + DefaultResearchOutputTableAnswer, + DMPToolDMPType, + QuestionFormatsEnum, + ResearchOutputTableAnswerType, +} from "@dmptool/types"; +import { Plan } from "../../../models/Plan.js"; +import { + DatasetType, + NarrativeQuestionType, + NarrativeSectionType, + NarrativeTemplateType +} from "../../../types.js"; +import { VersionedQuestion } from "../../../models/VersionedTemplate.js"; +import { Answer } from "../../../models/Answer.js"; + +interface ProcessNarrativeResponse { + question?: VersionedQuestion; + answer?: Answer; +} + +// Convert all the incoming answers and find their matching Question in the Versioned Template +const processNarrative = ( + request: FastifyRequest, + plan: Plan, + narrative: NarrativeTemplateType, +): ProcessNarrativeResponse[] => { + if (!plan || !plan.versionedTemplate) return []; + + // Gather all questions from both the narrative and the Versioned Template + const questions: ProcessNarrativeResponse[] = []; + const narrativeQuestions: NarrativeQuestionType[] = narrative.section.flatMap( + (s: NarrativeSectionType) => s.question + ); + + const logBase = { planId: plan.id, versionedTemplateId: plan.versionedTemplate.id }; + // Loop through all the questions sent in, validate and parse them and find their + // matching question within the actual template + const warnings: string[] = []; + for (const questionIn of narrativeQuestions) { + const matched: VersionedQuestion | undefined = plan.versionedTemplate.findNarrativeQuestion(questionIn); + + if (matched) { + questions.push({ + question: matched, + answer: Answer.fromMaDMPNarrative(request, plan, questionIn) + }); + request.log.debug( + { ...logBase, versionedQuestionId: matched.id }, + 'processNarrative - Found matching question' + ); + } else { + request.log.debug( + { planId: plan.id, versionedTemplateId: plan.versionedTemplate.id, question: questionIn }, + 'processNarrative - No matching question found' + ); + warnings.push(`Unable to find question for narrative question "${questionIn.text}"`); + } + } + + if (warnings.length > 0) { + plan.warnings['answers'] = warnings.join('; '); + } + + return questions; +} + +/** + * Workflow to transform the `narrative` portion of the maDMP into Answers on a Plan + * + * @param request the Fastify request + * @param plan the Plan to update with the narrative content + * @param dmp the maDMP + * @returns the updated Plan with answers + * @throws Fastify errors if something went wrong + */ +export const createNarrativeWorkflow = async ( + request: FastifyRequest, + plan: Plan, + dmp: DMPToolDMPType['dmp'] +): Promise => { + // This should never occur because we have a default, but if the VersionedTemplate + // is not defined we should bail out immediately + if (!plan.versionedTemplate) return plan; + + const narrative: NarrativeTemplateType | undefined = dmp.narrative; + const datasets: DatasetType[] = dmp.dataset || []; + + // First process the narrative portion of the maDMP + const processedNarrative: ProcessNarrativeResponse[] = processNarrative(request, plan, narrative.template); + request.log.debug( + { planId: plan.id, narrative: processedNarrative }, + 'createNarrativeWorkflow - Narrative extracted from the narrative portion of the maDMP record.' + ) + + // Locate the research output table question + const researchOutputQuestion: VersionedQuestion | undefined = plan.versionedTemplate.researchOutputTableQuestion(); + + // If the research output table question exists and there are datasets defined in the maDMP record + if (!!researchOutputQuestion && datasets.length > 0) { + // Find the research output table answer derived from the narrative + const roEntry: ProcessNarrativeResponse | undefined = processedNarrative.find((entry: ProcessNarrativeResponse): boolean => { + return entry.question?.id === researchOutputQuestion?.id; + }); + + // Convert the dataset into a row in the research output table format + const roAnswer: ResearchOutputTableAnswerType = roEntry?.answer?.validatedJSON as ResearchOutputTableAnswerType || DefaultResearchOutputTableAnswer; + const researchOutputAnswer: ResearchOutputTableAnswerType | undefined = Answer.fromMaDMPDatasets( + request, + plan, + researchOutputQuestion, + roAnswer, + datasets + ); + + if (researchOutputAnswer && researchOutputAnswer.answer) { + const newRoAnswer = new Answer({ + plan, + format: QuestionFormatsEnum.enum.researchOutputTable, + versionedSectionId: researchOutputQuestion.versionedSectionId, + versionedQuestionId: researchOutputQuestion.id, + json: researchOutputAnswer + }); + const newEntry: ProcessNarrativeResponse = { question: researchOutputQuestion, answer: newRoAnswer }; + if (roEntry) { + // Replace the original research output answer with the new one + processedNarrative.splice( + processedNarrative.indexOf(roEntry), + 0, + newEntry + ); + } else { + // Otherwise just + processedNarrative.push(newEntry); + } + } + } + + request.log.debug( + { planId: plan.id, narrative: processedNarrative }, + 'createNarrativeWorkflow - Saving narrative information to the plan answers.' + ); + + // Persist the plan answers to the DB + for (const entry of processedNarrative) { + if (!entry) continue; + + const saved: boolean | undefined = await entry.answer?.save(request); + if (!saved) { + plan.errors['narrative'] = `Unable to save answer for question ${entry.question?.id}`; + } + } + return plan; +} diff --git a/src/plugins/v3/workflows/planWorkflow.ts b/src/plugins/v3/workflows/planWorkflow.ts index 5fde3ea..780e73e 100644 --- a/src/plugins/v3/workflows/planWorkflow.ts +++ b/src/plugins/v3/workflows/planWorkflow.ts @@ -16,6 +16,7 @@ import { ERROR_MSG_CONFLICT, newFastifyError } from "../../../handlers/error.js"; +import {createNarrativeWorkflow} from "./narrativeWorkflow.js"; /** * Verify that the DMP modification date set in the header matches the current modified timestamp @@ -89,6 +90,15 @@ const saveNonFatalPlanArtifacts = async ( 'Unable to save alternate identifiers for the new plan' ); } + + // Save the narrative + const planWithNarrative: Plan = await createNarrativeWorkflow(request, plan, dmp); + if (!planWithNarrative || planWithNarrative.hasErrors()) { + request.log.error( + { planId: plan.id, errors: planWithNarrative.errors }, + 'Unable to save the plan narrative' + ); + } } /** @@ -170,6 +180,8 @@ export async function createPlanWorkflow( throw newFastifyError(ERROR_CODE_INTERNAL_SERVER, 'Unable to generate DMP id.'); } + // Refetch the plan from the database to pick up its assigned DMP id. + // Now save the Project and Plan Funding request.log.debug( { alternateIdentifier: idIn, projectId: project.id, dmpId: plan.dmpId }, @@ -205,7 +217,7 @@ export async function createPlanWorkflow( // Generate the maDMP JSON so that we can return it const newMaDMP: DMPToolDMPType | undefined = await loadMaDMPFromDynamo( request, - plan.dmpId + finalPlan.dmpId ); // TODO: Once the RDA group has decided on a way to convey warnings about diff --git a/src/types.ts b/src/types.ts index 7c0ef08..dd391cf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -118,7 +118,18 @@ export type AffiliationIdType =NonNullable[0] export type ContactType = DMPToolDMPType['dmp']['contact']; export type ContributorsType = DMPToolDMPType['dmp']['contributor']; export type ContributorType = NonNullable[0]; +export type DatasetsType = DMPToolDMPType['dmp']['datasets']; +export type DatasetType = DMPToolDMPType['dmp']['datasets'][0]; +export type DistributionType = DMPToolDMPType['dmp']['datasets'][0]['distribution'][0]; +export type HostType = DMPToolDMPType['dmp']['datasets'][0]['distribution'][0]['host'][0]; export type FundingType = NonNullable[0]; +export type LicenseType = DMPToolDMPType['dmp']['datasets'][0]['license_ref'][0]; +export type MetadataType = DMPToolDMPType['dmp']['datasets'][0]['metadata'][0]; +export type NarrativeTemplateType = DMPToolDMPType['dmp']['narrative']['template']; +export type NarrativeSectionsType = DMPToolDMPType['dmp']['narrative']['template']['section']; +export type NarrativeSectionType = DMPToolDMPType['dmp']['narrative']['template']['section'][0]; +export type NarrativeQuestionsType = DMPToolDMPType['dmp']['narrative']['template']['section'][0]['question']; +export type NarrativeQuestionType = DMPToolDMPType['dmp']['narrative']['template']['section'][0]['question'][0]; export type ProjectsType = DMPToolDMPType['dmp']['project']; export type ProjectType = NonNullable[0]; export type ResearchDomainType = DMPToolDMPType['dmp']['research_domain'];