diff --git a/CHANGELOG.md b/CHANGELOG.md index eaa2bc01c..9a6ef7fa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 1.5.68 +* Multiget now works in chunks. Fixed bug with async decryption +* Made large encrypted batch operations, deletion of orphan search results and made retrieval of lost/fragmented data more robust. + ## 1.5.67 * Remove non-indexable data from index. * Multithreaded cryptography. diff --git a/README.md b/README.md index f6795ea63..095dd793f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # CaSS Competency and Skills Service -- Competency Management -Release Candidate: 1.5.67 [![Build Status](https://travis-ci.org/cassproject/CASS.svg?branch=1.5)](https://travis-ci.org/cassproject/CASS) +Release Candidate: 1.5.69 [![Build Status](https://travis-ci.org/cassproject/CASS.svg?branch=1.5)](https://travis-ci.org/cassproject/CASS) Supported: 1.4 [![Build Status](https://travis-ci.org/cassproject/CASS.svg?branch=1.4)](https://travis-ci.org/cassproject/CASS) Supported: 1.3 [![Build Status](https://travis-ci.org/cassproject/CASS.svg?branch=1.3)](https://travis-ci.org/cassproject/CASS) Supported: 1.2 [![Build Status](https://travis-ci.org/cassproject/CASS.svg?branch=1.2)](https://travis-ci.org/cassproject/CASS) diff --git a/docker-compose-template.yml b/docker-compose-template.yml index fd3bd812a..ce42fc491 100644 --- a/docker-compose-template.yml +++ b/docker-compose-template.yml @@ -1,7 +1,7 @@ version: '3' services: cass: - image: cassproject/cass:node-1.5.67 + image: cassproject/cass:node-1.5.68 container_name: cass networks: - esnet @@ -28,7 +28,7 @@ services: depends_on: - elasticsearch elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:8.15.3 + image: docker.elastic.co/elasticsearch/elasticsearch:8.16.0 container_name: elasticsearch networks: - esnet diff --git a/docker/standalone/Dockerfile b/docker/standalone/Dockerfile index b04d9ed09..1834922c4 100644 --- a/docker/standalone/Dockerfile +++ b/docker/standalone/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.elastic.co/elasticsearch/elasticsearch:8.15.3 +FROM docker.elastic.co/elasticsearch/elasticsearch:8.16.0 USER root RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - diff --git a/package-lock.json b/package-lock.json index 66825eef4..b2a6a42d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,39 @@ { "name": "cass", +<<<<<<< HEAD "version": "1.5.67", +======= + "version": "1.5.69", +>>>>>>> origin/1.5 "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cass", +<<<<<<< HEAD "version": "1.5.67", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-s3": "^3.679.0", "@xmldom/xmldom": "^0.9.5", "aws-sdk": "^2.1691.0", +======= + "version": "1.5.69", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-s3": "^3.693.0", + "@xmldom/xmldom": "^0.8.10", + "aws-sdk": "^2.1692.0", +>>>>>>> origin/1.5 "busboy": "^1.6.0", - "cassproject": "^1.5.66", + "cassproject": "^1.5.68", "check-disk-space": "^3.4.0", +<<<<<<< HEAD "compression": "^1.7.4", "concurrently": "^9.0.1", +======= + "compression": "^1.7.5", +>>>>>>> origin/1.5 "cors": "^2.8.5", "cron": "^3.1.7", "express": "^4.21.1", @@ -26,7 +43,11 @@ "node-object-hash": "^3.0.0", "node-worker-threads-pool": "^1.5.1", "nodemailer": "^6.9.16", +<<<<<<< HEAD "pm2": "^5.4.2", +======= + "pm2": "^5.4.3", +>>>>>>> origin/1.5 "pure-uuid": "^1.8.1", "rdflib": "^2.2.35", "spdy": "^4.0.2", @@ -40,7 +61,7 @@ "chai": "4.5.0", "eslint": "^9.13.0", "eslint-config-google": "^0.14.0", - "mocha": "^10.7.3", + "mocha": "^10.8.2", "nodemon": "^3.1.7", "npm-run-all": "^4.1.5", "nyc": "^17.1.0", @@ -287,13 +308,20 @@ } }, "node_modules/@aws-sdk/client-s3": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.679.0.tgz", "integrity": "sha512-P93tUbJXiDtSPgBfFpnjaijLV38hyPlE3g0XybsPTmSYNV6A9Jt1TUIF6vX+o6LdFuq3FerCiagUjhfDANWkAw==", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.693.0.tgz", + "integrity": "sha512-vgGI2e0Q6pzyhqfrSysi+sk/i+Nl+lMon67oqj/57RcCw9daL1/inpS+ADuwHpiPWkrg+U0bOXnmHjkLeTslJg==", +>>>>>>> origin/1.5 "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", +<<<<<<< HEAD "@aws-sdk/client-sso-oidc": "3.679.0", "@aws-sdk/client-sts": "3.679.0", "@aws-sdk/core": "3.679.0", @@ -337,17 +365,62 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/url-parser": "^3.0.7", +======= + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-bucket-endpoint": "3.693.0", + "@aws-sdk/middleware-expect-continue": "3.693.0", + "@aws-sdk/middleware-flexible-checksums": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-location-constraint": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-sdk-s3": "3.693.0", + "@aws-sdk/middleware-ssec": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/signature-v4-multi-region": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@aws-sdk/xml-builder": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/eventstream-serde-browser": "^3.0.12", + "@smithy/eventstream-serde-config-resolver": "^3.0.9", + "@smithy/eventstream-serde-node": "^3.0.11", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-blob-browser": "^3.1.8", + "@smithy/hash-node": "^3.0.9", + "@smithy/hash-stream-node": "^3.1.8", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/md5-js": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", +>>>>>>> origin/1.5 "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", - "@smithy/util-stream": "^3.1.9", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-stream": "^3.3.0", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.6", + "@smithy/util-waiter": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -355,6 +428,7 @@ } }, "node_modules/@aws-sdk/client-sso": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.679.0.tgz", "integrity": "sha512-/0cAvYnpOZTo/Y961F1kx2fhDDLUYZ0SQQ5/75gh3xVImLj7Zw+vp74ieqFbqWLYGMaq8z1Arr9A8zG95mbLdg==", @@ -387,14 +461,48 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/url-parser": "^3.0.7", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", +>>>>>>> origin/1.5 "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -403,6 +511,7 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.679.0.tgz", "integrity": "sha512-/dBYWcCwbA/id4sFCIVZvf0UsvzHCC68SryxeNQk/PDkY9N4n5yRcMUkZDaEyQCjowc3kY4JOXp2AdUP037nhA==", @@ -436,14 +545,49 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/url-parser": "^3.0.7", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", +>>>>>>> origin/1.5 "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -451,6 +595,7 @@ "node": ">=16.0.0" }, "peerDependencies": { +<<<<<<< HEAD "@aws-sdk/client-sts": "^3.679.0" } }, @@ -489,14 +634,54 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/url-parser": "^3.0.7", +======= + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", +>>>>>>> origin/1.5 "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -505,6 +690,7 @@ } }, "node_modules/@aws-sdk/core": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.679.0.tgz", "integrity": "sha512-CS6PWGX8l4v/xyvX8RtXnBisdCa5+URzKd0L6GvHChype9qKUVxO/Gg6N/y43Hvg7MNWJt9FBPNWIxUB+byJwg==", @@ -518,6 +704,21 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/util-middleware": "^3.0.7", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", +>>>>>>> origin/1.5 "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -526,6 +727,7 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.679.0.tgz", "integrity": "sha512-EdlTYbzMm3G7VUNAMxr9S1nC1qUNqhKlAxFU8E7cKsAe8Bp29CD5HAs3POc56AVo9GC4yRIS+/mtlZSmrckzUA==", @@ -534,6 +736,16 @@ "@aws-sdk/types": "3.679.0", "@smithy/property-provider": "^3.1.7", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.693.0.tgz", + "integrity": "sha512-hMUZaRSF7+iBKZfBHNLihFs9zvpM1CB8MBOTnTp5NGCVkRYF3SB2LH+Kcippe0ats4qCyB1eEoyQX99rERp2iQ==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -541,6 +753,7 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.679.0.tgz", "integrity": "sha512-ZoKLubW5DqqV1/2a3TSn+9sSKg0T8SsYMt1JeirnuLJF0mCoYFUaWMyvxxKuxPoqvUsaycxKru4GkpJ10ltNBw==", @@ -554,6 +767,21 @@ "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", "@smithy/util-stream": "^3.1.9", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -561,6 +789,7 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.679.0.tgz", "integrity": "sha512-Rg7t8RwUzKcumpipG4neZqaeJ6DF+Bco1+FHn5BZB68jpvwvjBjcQUuWkxj18B6ctYHr1fkunnzeKEn/+vy7+w==", @@ -576,12 +805,30 @@ "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { +<<<<<<< HEAD "@aws-sdk/client-sts": "^3.679.0" } }, @@ -601,6 +848,27 @@ "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -608,6 +876,7 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.679.0.tgz", "integrity": "sha512-u/p4TV8kQ0zJWDdZD4+vdQFTMhkDEJFws040Gm113VHa/Xo1SYOjbpvqeuFoz6VmM0bLvoOWjxB9MxnSQbwKpQ==", @@ -617,6 +886,17 @@ "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.693.0.tgz", + "integrity": "sha512-cvxQkrTWHHjeHrPlj7EWXPnFSq8x7vMx+Zn1oTsMpCY445N9KuzjfJTkmNGwU2GT6rSZI9/0MM02aQvl5bBBTQ==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -624,6 +904,7 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.679.0.tgz", "integrity": "sha512-SAtWonhi9asxn0ukEbcE81jkyanKgqpsrtskvYPpO9Z9KOednM4Cqt6h1bfcS9zaHjN2zu815Gv8O7WiV+F/DQ==", @@ -635,6 +916,19 @@ "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -642,6 +936,7 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.679.0.tgz", "integrity": "sha512-a74tLccVznXCaBefWPSysUcLXYJiSkeUmQGtalNgJ1vGkE36W5l/8czFiiowdWdKWz7+x6xf0w+Kjkjlj42Ung==", @@ -650,12 +945,23 @@ "@aws-sdk/types": "3.679.0", "@smithy/property-provider": "^3.1.7", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { +<<<<<<< HEAD "@aws-sdk/client-sts": "^3.679.0" } }, @@ -669,6 +975,21 @@ "@smithy/node-config-provider": "^3.1.8", "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", +======= + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.693.0.tgz", + "integrity": "sha512-cPIa+lxMYiFRHtxKfNIVSFGO6LSgZCk42pu3d7KGwD6hu6vXRD5B2/DD3rPcEH1zgl2j0Kx1oGAV7SRXKHSFag==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, @@ -677,6 +998,7 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.679.0.tgz", "integrity": "sha512-nYsh9PdWrF4EahTRdXHGlNud82RPc508CNGdh1lAGfPU3tNveGfMBX3PcGBtPOse3p9ebNKRWVmUc9eXSjGvHA==", @@ -684,6 +1006,15 @@ "@aws-sdk/types": "3.679.0", "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.693.0.tgz", + "integrity": "sha512-MuK/gsJWpHz6Tv0CqTCS+QNOxLa2RfPh1biVCu/uO3l7kA0TjQ/C+tfgKvLXeH103tuDrOVINK+bt2ENmI3SWg==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -691,6 +1022,7 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.679.0.tgz", "integrity": "sha512-2Nf3rnrcog3GRRdXxc623wkQPH3WXhz8oZ+KHuXBeBKX01zbp7bz22QAZKqw3Oo2lv+LQNEDzIfQYn7leXLZGQ==", @@ -699,11 +1031,23 @@ "@aws-crypto/crc32c": "5.2.0", "@aws-sdk/core": "3.679.0", "@aws-sdk/types": "3.679.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.693.0.tgz", + "integrity": "sha512-xkS6zjuE11ob93H9t65kHzphXcUMnN2SmIm2wycUPg+hi8Q6DJA6U2p//6oXkrr9oHy1QvwtllRd7SAd63sFKQ==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", +>>>>>>> origin/1.5 "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-stream": "^3.3.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -712,6 +1056,7 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.679.0.tgz", "integrity": "sha512-y176HuQ8JRY3hGX8rQzHDSbCl9P5Ny9l16z4xmaiLo+Qfte7ee4Yr3yaAKd7GFoJ3/Mhud2XZ37fR015MfYl2w==", @@ -719,6 +1064,15 @@ "@aws-sdk/types": "3.679.0", "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -726,12 +1080,21 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.679.0.tgz", "integrity": "sha512-SA1C1D3XgoKTGxyNsOqd016ONpk46xJLWDgJUd00Zb21Ox5wYCoY6aDRKiaMRW+1VfCJdezs1Do3XLyIU9KxyA==", "dependencies": { "@aws-sdk/types": "3.679.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.693.0.tgz", + "integrity": "sha512-eDAExTZ9uNIP7vs2JCVCOuWJauGueisBSn+Ovt7UvvuEUp6KOIJqn8oFxWmyUQu2GvbG4OcaTLgbqD95YHTB0Q==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -739,12 +1102,21 @@ } }, "node_modules/@aws-sdk/middleware-logger": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.679.0.tgz", "integrity": "sha512-0vet8InEj7nvIvGKk+ch7bEF5SyZ7Us9U7YTEgXPrBNStKeRUsgwRm0ijPWWd0a3oz2okaEwXsFl7G/vI0XiEA==", "dependencies": { "@aws-sdk/types": "3.679.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -752,6 +1124,7 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.679.0.tgz", "integrity": "sha512-sQoAZFsQiW/LL3DfKMYwBoGjYDEnMbA9WslWN8xneCmBAwKo6IcSksvYs23PP8XMIoBGe2I2J9BSr654XWygTQ==", @@ -759,6 +1132,15 @@ "@aws-sdk/types": "3.679.0", "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -766,6 +1148,7 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.679.0.tgz", "integrity": "sha512-4zcT193F7RkEfqlS6ZdwyNQ0UUp9s66msNXgItugasTbjf7oqfWDas7N+BG8ADB/Ql3wvRUh9I+zdrVkxxw3BQ==", @@ -779,9 +1162,24 @@ "@smithy/signature-v4": "^4.2.0", "@smithy/smithy-client": "^3.4.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.693.0.tgz", + "integrity": "sha512-5A++RBjJ3guyq5pbYs+Oq5hMlA8CK2OWaHx09cxVfhHWl/RoaY8DXrft4gnhoUEBrrubyMw7r9j7RIMLvS58kg==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-stream": "^3.1.9", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-stream": "^3.3.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -790,12 +1188,21 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.679.0.tgz", "integrity": "sha512-4GNUxXbs1M71uFHRiCAZtN0/g23ogI9YjMe5isAuYMHXwDB3MhqF7usKf954mBP6tplvN44vYlbJ84faaLrTtg==", "dependencies": { "@aws-sdk/types": "3.679.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.693.0.tgz", + "integrity": "sha512-Ro5vzI7SRgEeuoMk3fKqFjGv6mG4c7VsSCDwnkiasmafQFBTPvUIpgmu2FXMHqW/OthvoiOzpSrlJ9Bwlx2f8A==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -803,6 +1210,7 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.679.0.tgz", "integrity": "sha512-4hdeXhPDURPqQLPd9jCpUEo9fQITXl3NM3W1MwcJpE0gdUM36uXkQOYsTPeeU/IRCLVjK8Htlh2oCaM9iJrLCA==", @@ -813,6 +1221,18 @@ "@smithy/core": "^2.4.8", "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -820,6 +1240,7 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.679.0.tgz", "integrity": "sha512-Ybx54P8Tg6KKq5ck7uwdjiKif7n/8g1x+V0V9uTjBjRWqaIgiqzXwKWoPj6NCNkE7tJNtqI4JrNxp/3S3HvmRw==", @@ -827,8 +1248,17 @@ "@aws-sdk/types": "3.679.0", "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/util-middleware": "^3.0.9", "tslib": "^2.6.2" }, "engines": { @@ -836,6 +1266,7 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.679.0.tgz", "integrity": "sha512-g1D57e7YBhgXihCWIRBcTUvKquS3FS27xuA24EynY9teiTIq7vHkASxxDnMMMcmKHnCKLI5pkznjk0PuDJ4uJw==", @@ -845,6 +1276,17 @@ "@smithy/protocol-http": "^4.1.4", "@smithy/signature-v4": "^4.2.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.693.0.tgz", + "integrity": "sha512-s7zbbsoVIriTR4ZGaateKuTqz6ddpazAyHvjk7I9kd+NvGNPiuAI18UdbuiiRI6K5HuYKf1ah6mKWFGPG15/kQ==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -852,6 +1294,7 @@ } }, "node_modules/@aws-sdk/token-providers": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.679.0.tgz", "integrity": "sha512-1/+Zso/x2jqgutKixYFQEGli0FELTgah6bm7aB+m2FAWH4Hz7+iMUsazg6nSWm714sG9G3h5u42Dmpvi9X6/hA==", @@ -860,12 +1303,23 @@ "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { +<<<<<<< HEAD "@aws-sdk/client-sso-oidc": "^3.679.0" } }, @@ -873,8 +1327,17 @@ "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.679.0.tgz", "integrity": "sha512-NwVq8YvInxQdJ47+zz4fH3BRRLC6lL+WLkvr242PVBbUOLRyK/lkwHlfiKUoeVIMyK5NF+up6TRg71t/8Bny6Q==", +======= + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.692.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.692.0.tgz", + "integrity": "sha512-RpNvzD7zMEhiKgmlxGzyXaEcg2khvM7wd5sSHVapOcrde1awQSOMGI4zKBQ+wy5TnDfrm170ROz/ERLYtrjPZA==", +>>>>>>> origin/1.5 "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { @@ -882,9 +1345,15 @@ } }, "node_modules/@aws-sdk/util-arn-parser": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.679.0.tgz", "integrity": "sha512-CwzEbU8R8rq9bqUFryO50RFBlkfufV9UfMArHPWlo+lmsC+NlSluHQALoj6Jkq3zf5ppn1CN0c1DDLrEqdQUXg==", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", + "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", +>>>>>>> origin/1.5 "dependencies": { "tslib": "^2.6.2" }, @@ -893,6 +1362,7 @@ } }, "node_modules/@aws-sdk/util-endpoints": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.679.0.tgz", "integrity": "sha512-YL6s4Y/1zC45OvddvgE139fjeWSKKPgLlnfrvhVL7alNyY9n7beR4uhoDpNrt5mI6sn9qiBF17790o+xLAXjjg==", @@ -900,6 +1370,15 @@ "@aws-sdk/types": "3.679.0", "@smithy/types": "^3.5.0", "@smithy/util-endpoints": "^2.1.3", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -907,9 +1386,15 @@ } }, "node_modules/@aws-sdk/util-locate-window": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.679.0.tgz", "integrity": "sha512-zKTd48/ZWrCplkXpYDABI74rQlbR0DNHs8nH95htfSLj9/mWRSwaGptoxwcihaq/77vi/fl2X3y0a1Bo8bt7RA==", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", + "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", +>>>>>>> origin/1.5 "dependencies": { "tslib": "^2.6.2" }, @@ -918,17 +1403,27 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.679.0.tgz", "integrity": "sha512-CusSm2bTBG1kFypcsqU8COhnYc6zltobsqs3nRrvYqYaOqtMnuE46K4XTWpnzKgwDejgZGOE+WYyprtAxrPvmQ==", "dependencies": { "@aws-sdk/types": "3.679.0", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.679.0.tgz", "integrity": "sha512-Bw4uXZ+NU5ed6TNfo4tBbhBSW+2eQxXYjYBGl5gLUNUpg2pDFToQAP6rXBFiwcG52V2ny5oLGiD82SoYuYkAVg==", @@ -937,6 +1432,16 @@ "@aws-sdk/types": "3.679.0", "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", +>>>>>>> origin/1.5 "tslib": "^2.6.2" }, "engines": { @@ -952,11 +1457,17 @@ } }, "node_modules/@aws-sdk/xml-builder": { +<<<<<<< HEAD "version": "3.679.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.679.0.tgz", "integrity": "sha512-nPmhVZb39ty5bcQ7mAwtjezBcsBqTYZ9A2D9v/lE92KCLdu5RhSkPH7O71ZqbZx1mUSg9fAOxHPiG79U5VlpLQ==", +======= + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.693.0.tgz", + "integrity": "sha512-C/rPwJcqnV8VDr2/VtcQnymSpcfEEgH1Jm6V0VmfXNZFv4Qzf1eCS8nsec0gipYgZB+cBBjfXw5dAk6pJ8ubpw==", +>>>>>>> origin/1.5 "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { @@ -964,9 +1475,15 @@ } }, "node_modules/@babel/code-frame": { +<<<<<<< HEAD "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", +======= + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", +>>>>>>> origin/1.5 "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -978,9 +1495,15 @@ } }, "node_modules/@babel/compat-data": { +<<<<<<< HEAD "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", +======= + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", +>>>>>>> origin/1.5 "dev": true, "engines": { "node": ">=6.9.0" @@ -1055,12 +1578,21 @@ } }, "node_modules/@babel/generator": { +<<<<<<< HEAD "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", "dev": true, "dependencies": { "@babel/parser": "^7.26.0", +======= + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.2", +>>>>>>> origin/1.5 "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", @@ -1181,9 +1713,15 @@ } }, "node_modules/@babel/parser": { +<<<<<<< HEAD "version": "7.26.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", +======= + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", +>>>>>>> origin/1.5 "dev": true, "dependencies": { "@babel/types": "^7.26.0" @@ -2031,6 +2569,12 @@ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -2061,11 +2605,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", - "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz", + "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2090,14 +2634,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.10.tgz", - "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz", + "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==", "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", + "@smithy/util-middleware": "^3.0.10", "tslib": "^2.6.2" }, "engines": { @@ -2105,16 +2649,16 @@ } }, "node_modules/@smithy/core": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.1.tgz", - "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.3.tgz", + "integrity": "sha512-96uW8maifUSmehaeW7uydWn7wBc98NEeNI3zN8vqakGpyCQgzyJaA64Z4FCOUmAdCJkhppd/7SZ798Fo4Xx37g==", "dependencies": { - "@smithy/middleware-serde": "^3.0.8", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-stream": "^3.2.1", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-stream": "^3.3.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2123,14 +2667,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz", - "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/property-provider": "^3.1.8", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz", + "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.11", + "@smithy/property-provider": "^3.1.10", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", "tslib": "^2.6.2" }, "engines": { @@ -2138,23 +2682,23 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.7.tgz", - "integrity": "sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.9.tgz", + "integrity": "sha512-F574nX0hhlNOjBnP+noLtsPFqXnWh2L0+nZKCwcu7P7J8k+k+rdIDs+RMnrMwrzhUE4mwMgyN0cYnEn0G8yrnQ==", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "@smithy/util-hex-encoding": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.11.tgz", - "integrity": "sha512-Pd1Wnq3CQ/v2SxRifDUihvpXzirJYbbtXfEnnLV/z0OGCTx/btVX74P86IgrZkjOydOASBGXdPpupYQI+iO/6A==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.13.tgz", + "integrity": "sha512-Nee9m+97o9Qj6/XeLz2g2vANS2SZgAxV4rDBMKGHvFJHU/xz88x2RwCkwsvEwYjSX4BV1NG1JXmxEaDUzZTAtw==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.10", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-serde-universal": "^3.0.12", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2162,11 +2706,11 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.8.tgz", - "integrity": "sha512-zkFIG2i1BLbfoGQnf1qEeMqX0h5qAznzaZmMVNnvPZz9J5AWBPkOMckZWPedGUPcVITacwIdQXoPcdIQq5FRcg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.10.tgz", + "integrity": "sha512-K1M0x7P7qbBUKB0UWIL5KOcyi6zqV5mPJoL0/o01HPJr0CSq3A9FYuJC6e11EX6hR8QTIR++DBiGrYveOu6trw==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2174,12 +2718,12 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.10.tgz", - "integrity": "sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.12.tgz", + "integrity": "sha512-kiZymxXvZ4tnuYsPSMUHe+MMfc4FTeFWJIc0Q5wygJoUQM4rVHNghvd48y7ppuulNMbuYt95ah71pYc2+o4JOA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.10", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-serde-universal": "^3.0.12", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2187,12 +2731,12 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.10.tgz", - "integrity": "sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.12.tgz", + "integrity": "sha512-1i8ifhLJrOZ+pEifTlF0EfZzMLUGQggYQ6WmZ4d5g77zEKf7oZ0kvh1yKWHPjofvOwqrkwRDVuxuYC8wVd662A==", "dependencies": { - "@smithy/eventstream-codec": "^3.1.7", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-codec": "^3.1.9", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2200,34 +2744,34 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", - "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz", + "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==", "dependencies": { - "@smithy/protocol-http": "^4.1.4", - "@smithy/querystring-builder": "^3.0.7", - "@smithy/types": "^3.5.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/querystring-builder": "^3.0.10", + "@smithy/types": "^3.7.1", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.7.tgz", - "integrity": "sha512-4yNlxVNJifPM5ThaA5HKnHkn7JhctFUHvcaz6YXxHlYOSIrzI6VKQPTN8Gs1iN5nqq9iFcwIR9THqchUCouIfg==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.9.tgz", + "integrity": "sha512-wOu78omaUuW5DE+PVWXiRKWRZLecARyP3xcq5SmkXUw9+utgN8HnSnBfrjL2B/4ZxgqPjaAJQkC/+JHf1ITVaQ==", "dependencies": { "@smithy/chunked-blob-reader": "^4.0.0", "@smithy/chunked-blob-reader-native": "^3.0.1", - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.8.tgz", - "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz", + "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2237,11 +2781,11 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.7.tgz", - "integrity": "sha512-xMAsvJ3hLG63lsBVi1Hl6BBSfhd8/Qnp8fC06kjOpJvyyCEXdwHITa5Kvdsk6gaAXLhbZMhQMIGvgUbfnJDP6Q==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.9.tgz", + "integrity": "sha512-3XfHBjSP3oDWxLmlxnt+F+FqXpL3WlXs+XXaB6bV9Wo8BBu87fK1dSEsyH7Z4ZHRmwZ4g9lFMdf08m9hoX1iRA==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2250,11 +2794,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz", - "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz", + "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" } }, @@ -2270,22 +2814,22 @@ } }, "node_modules/@smithy/md5-js": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.8.tgz", - "integrity": "sha512-LwApfTK0OJ/tCyNUXqnWCKoE2b4rDSr4BJlDAVCkiWYeHESr+y+d5zlAanuLW6fnitVJRD/7d9/kN/ZM9Su4mA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.10.tgz", + "integrity": "sha512-m3bv6dApflt3fS2Y1PyWPUtRP7iuBlvikEOGwu0HsCZ0vE7zcIX+dBoh3e+31/rddagw8nj92j0kJg2TfV+SJA==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz", - "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz", + "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==", "dependencies": { - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2293,17 +2837,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz", - "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==", - "dependencies": { - "@smithy/core": "^2.5.1", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.9", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-middleware": "^3.0.8", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.3.tgz", + "integrity": "sha512-Hdl9296i/EMptaX7agrSzJZDiz5Y8XPUeBbctTmMtnCguGpqfU3jVsTUan0VLaOhsnquqWLL8Bl5HrlbVGT1og==", + "dependencies": { + "@smithy/core": "^2.5.3", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.11", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-middleware": "^3.0.10", "tslib": "^2.6.2" }, "engines": { @@ -2311,17 +2855,17 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz", - "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.5", - "@smithy/service-error-classification": "^3.0.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.27.tgz", + "integrity": "sha512-H3J/PjJpLL7Tt+fxDKiOD25sMc94YetlQhCnYeNmina2LZscAdu0ZEZPas/kwePHABaEtqp7hqa5S4UJgMs1Tg==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.7", + "@smithy/service-error-classification": "^3.0.10", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -2342,11 +2886,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz", - "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz", + "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2354,11 +2898,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz", - "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz", + "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2366,13 +2910,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz", - "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==", + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz", + "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==", "dependencies": { - "@smithy/property-provider": "^3.1.8", - "@smithy/shared-ini-file-loader": "^3.1.9", - "@smithy/types": "^3.6.0", + "@smithy/property-provider": "^3.1.10", + "@smithy/shared-ini-file-loader": "^3.1.11", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2380,14 +2924,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", - "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dependencies": { - "@smithy/abort-controller": "^3.1.6", - "@smithy/protocol-http": "^4.1.5", - "@smithy/querystring-builder": "^3.0.8", - "@smithy/types": "^3.6.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz", + "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.8", + "@smithy/protocol-http": "^4.1.7", + "@smithy/querystring-builder": "^3.0.10", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2395,11 +2939,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.8.tgz", - "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz", + "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2407,11 +2951,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", - "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz", + "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2419,11 +2963,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz", - "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz", + "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -2432,11 +2976,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz", - "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz", + "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2444,22 +2988,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz", - "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz", + "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==", "dependencies": { - "@smithy/types": "^3.6.0" + "@smithy/types": "^3.7.1" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz", - "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==", + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz", + "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2467,15 +3011,15 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", - "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz", + "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", + "@smithy/util-middleware": "^3.0.10", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2485,16 +3029,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.2.tgz", - "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==", - "dependencies": { - "@smithy/core": "^2.5.1", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-stream": "^3.2.1", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.4.tgz", + "integrity": "sha512-dPGoJuSZqvirBq+yROapBcHHvFjChoAQT8YPWJ820aPHHiowBlB3RL1Q4kPT1hx0qKgJuf+HhyzKi5Gbof4fNA==", + "dependencies": { + "@smithy/core": "^2.5.3", + "@smithy/middleware-endpoint": "^3.2.3", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "@smithy/util-stream": "^3.3.1", "tslib": "^2.6.2" }, "engines": { @@ -2502,9 +3046,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", - "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", + "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", "dependencies": { "tslib": "^2.6.2" }, @@ -2513,12 +3057,12 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.8.tgz", - "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz", + "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==", "dependencies": { - "@smithy/querystring-parser": "^3.0.8", - "@smithy/types": "^3.6.0", + "@smithy/querystring-parser": "^3.0.10", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" } }, @@ -2578,13 +3122,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz", - "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==", + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.27.tgz", + "integrity": "sha512-GV8NvPy1vAGp7u5iD/xNKUxCorE4nQzlyl057qRac+KwpH5zq8wVq6rE3lPPeuFLyQXofPN6JwxL1N9ojGapiQ==", "dependencies": { - "@smithy/property-provider": "^3.1.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", + "@smithy/property-provider": "^3.1.10", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -2593,16 +3137,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz", - "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==", - "dependencies": { - "@smithy/config-resolver": "^3.0.10", - "@smithy/credential-provider-imds": "^3.2.5", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/property-provider": "^3.1.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.27.tgz", + "integrity": "sha512-7+4wjWfZqZxZVJvDutO+i1GvL6bgOajEkop4FuR6wudFlqBiqwxw3HoH6M9NgeCd37km8ga8NPp2JacQEtAMPg==", + "dependencies": { + "@smithy/config-resolver": "^3.0.12", + "@smithy/credential-provider-imds": "^3.2.7", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/property-provider": "^3.1.10", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2610,12 +3154,12 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz", - "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz", + "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==", "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2634,11 +3178,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.8.tgz", - "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz", + "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2646,12 +3190,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.8.tgz", - "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz", + "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==", "dependencies": { - "@smithy/service-error-classification": "^3.0.8", - "@smithy/types": "^3.6.0", + "@smithy/service-error-classification": "^3.0.10", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2659,13 +3203,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.2.1.tgz", - "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz", + "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==", "dependencies": { - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/types": "^3.6.0", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/types": "^3.7.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -2676,18 +3220,6 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-stream/node_modules/@smithy/fetch-http-handler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", - "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", - "dependencies": { - "@smithy/protocol-http": "^4.1.5", - "@smithy/querystring-builder": "^3.0.8", - "@smithy/types": "^3.6.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, "node_modules/@smithy/util-uri-escape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", @@ -2712,12 +3244,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.7.tgz", - "integrity": "sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz", + "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==", "dependencies": { - "@smithy/abort-controller": "^3.1.6", - "@smithy/types": "^3.6.0", + "@smithy/abort-controller": "^3.1.8", + "@smithy/types": "^3.7.1", "tslib": "^2.6.2" }, "engines": { @@ -2793,9 +3325,15 @@ "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==" }, "node_modules/@types/node": { +<<<<<<< HEAD "version": "22.8.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", +======= + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", +>>>>>>> origin/1.5 "dependencies": { "undici-types": "~6.19.8" } @@ -2844,6 +3382,14 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -3212,9 +3758,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1691.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz", - "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==", + "version": "2.1692.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", + "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "hasInstallScript": true, "dependencies": { "buffer": "4.9.2", @@ -3330,9 +3876,9 @@ } }, "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/bodec": { "version": "0.1.0", @@ -3362,14 +3908,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -3473,9 +4011,9 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -3561,9 +4099,15 @@ } }, "node_modules/caniuse-lite": { +<<<<<<< HEAD "version": "1.0.30001673", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001673.tgz", "integrity": "sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==", +======= + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", +>>>>>>> origin/1.5 "dev": true, "funding": [ { @@ -3586,9 +4130,9 @@ "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "node_modules/cassproject": { - "version": "1.5.66", - "resolved": "https://registry.npmjs.org/cassproject/-/cassproject-1.5.66.tgz", - "integrity": "sha512-VOZQrNdz+uawa/T583a/PxaZZhkjqFkRbH5Y53Q3L/v/GPiNFVGRs8fvhEIALTiSkqpYhJ5Cci249DM8Rr1O3g==", + "version": "1.5.68", + "resolved": "https://registry.npmjs.org/cassproject/-/cassproject-1.5.68.tgz", + "integrity": "sha512-ozyDoUBd3JCPuO6XWR39NQyEXwtK7/+76RAoJGR6P0A53w4fD4YY4gGzJl2ECpU7bfA2I+ad27n4Q7jCvWDigQ==", "dependencies": { "base64-arraybuffer": "^1.0.2", "forge": "^2.3.0", @@ -3597,7 +4141,7 @@ "papaparse": "^5.4.1", "pem-jwk": "^2.0.0", "promise-worker": "^2.0.1", - "rdf-canonize": "^3.4.0", + "rdf-canonize": "^4.0.1", "web-worker": "^1.3.0" } }, @@ -3866,16 +4410,16 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -3982,25 +4526,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -4087,9 +4612,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4440,9 +4965,15 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { +<<<<<<< HEAD "version": "1.5.47", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz", "integrity": "sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==", +======= + "version": "1.5.62", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.62.tgz", + "integrity": "sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==", +>>>>>>> origin/1.5 "dev": true }, "node_modules/emoji-regex": { @@ -4491,9 +5022,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -4510,7 +5041,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -4526,10 +5057,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -4569,9 +5100,9 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", - "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4581,6 +5112,7 @@ "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "globalthis": "^1.0.4", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", @@ -5579,25 +6111,6 @@ } } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/extrareqp2": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/extrareqp2/-/extrareqp2-1.0.0.tgz", @@ -6368,6 +6881,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -7382,6 +7900,17 @@ "node": ">=14" } }, + "node_modules/jsonld/node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -7850,9 +8379,9 @@ } }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, "dependencies": { "ansi-colors": "^4.1.3", @@ -7979,9 +8508,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/n3": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/n3/-/n3-1.22.3.tgz", - "integrity": "sha512-TAFTjk0ErUbvw65sWpvj86ombVMfB63SxsZXQnVC8Ms02rDbOiA26WlP3tilEnuh3LhUa5TPiB0FyoYsPZ/DmA==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.23.0.tgz", + "integrity": "sha512-JEbhFlxFTNsHTHUAGykRoVNRG4Sqsu8Wn+SXq99l9pRQPgqJzvY4CwNp/yxRGwb4oni9BT5sH5kevnbVUIUvkQ==", "dependencies": { "buffer": "^6.0.3", "queue-microtask": "^1.1.2", @@ -8056,25 +8585,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/n3/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/n3/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8123,9 +8633,9 @@ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "engines": { "node": ">= 0.6" } @@ -8732,9 +9242,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "engines": { "node": ">= 0.4" }, @@ -9180,25 +9690,6 @@ "node": ">=10" } }, - "node_modules/pidusage/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -9380,9 +9871,9 @@ } }, "node_modules/pm2": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.4.2.tgz", - "integrity": "sha512-ynVpBwZampRH3YWLwRepZpQ7X3MvpwLIaqIdFEeBYEhaXbHmEx2KqOdxGV4T54wvKBhH3LixvU1j1bK4/sq7Tw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.4.3.tgz", + "integrity": "sha512-4/I1htIHzZk1Y67UgOCo4F1cJtas1kSds31N8zN0PybO230id1nigyjGuGFzUnGmUFPmrJ0On22fO1ChFlp7VQ==", "dependencies": { "@pm2/agent": "~2.0.0", "@pm2/io": "~6.0.1", @@ -9562,26 +10053,6 @@ "node": ">=8" } }, - "node_modules/pm2-sysmonit/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, "node_modules/pm2/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -9653,9 +10124,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "dependencies": { "fromentries": "^1.2.0" @@ -9876,23 +10347,15 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", "dependencies": { "setimmediate": "^1.0.5" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/rdflib": { @@ -10290,9 +10753,23 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safe-regex-test": { "version": "1.0.3", @@ -10699,25 +11176,6 @@ "node": ">= 6" } }, - "node_modules/spdy-transport/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/spdy-transport/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11299,9 +11757,12 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.17.14", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", - "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==" + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz", + "integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } }, "node_modules/swagger-ui-express": { "version": "5.0.1", @@ -11439,9 +11900,9 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/tv4": { "version": "1.3.0", diff --git a/package.json b/package.json index 4317ec8eb..36506b564 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cass", - "version": "1.5.67", + "version": "1.5.69", "description": "Competency and Skills System", "main": "src/main/server.js", "directories": { @@ -15,7 +15,7 @@ "test:deps": "docker compose up -d elasticsearch-cass", "test:nodemon": "nodemon src/main/server.js", "test:logs": "pm2 logs --nostream --lines 1000", - "dev": "npm run dev:deps && npm run dev:nodemon", + "dev": "export SKYREPO_DEBUG=true|| set SKYREPO_DEBUG=true&&npm run dev:deps && npm run dev:nodemon", "dev:docker": "npm run dev:deps && npm run dev:nodemon:docker", "dev:https": "npm run dev:deps && export HTTPS=true|| set HTTPS=true&& npm run dev:nodemon", "dev:clientSideCertificates": "npm run dev:deps && export HTTPS=true|| set HTTPS=true&& export HTTP2=false|| set HTTP2=false&& export HTTPS_REJECT_UNAUTHORIZED=false|| set HTTPS_REJECT_UNAUTHORIZED=false&& export REQUEST_CLIENT_SIDE_CERTIFICATE=true|| set REQUEST_CLIENT_SIDE_CERTIFICATE=true&& npm run dev:nodemon", @@ -102,7 +102,7 @@ "@xmldom/xmldom": "^0.9.5", "aws-sdk": "^2.1691.0", "busboy": "^1.6.0", - "cassproject": "^1.5.66", + "cassproject": "^1.5.68", "check-disk-space": "^3.4.0", "compression": "^1.7.4", "concurrently": "^9.0.1", @@ -129,7 +129,7 @@ "chai": "4.5.0", "eslint": "^9.13.0", "eslint-config-google": "^0.14.0", - "mocha": "^10.7.3", + "mocha": "^10.8.2", "nodemon": "^3.1.7", "npm-run-all": "^4.1.5", "nyc": "^17.1.0", diff --git a/src/main/server/adapter/xapi/xapi.js b/src/main/server/adapter/xapi/xapi.js index 51711cb7f..cc63e9a5d 100644 --- a/src/main/server/adapter/xapi/xapi.js +++ b/src/main/server/adapter/xapi/xapi.js @@ -223,7 +223,7 @@ var xapiStatement = async function (s, accm) { continue; alreadyAligned[a.competency + a.framework] = true; await a.setEvidence([JSON.stringify(s)]); - await a.setAssertionDate(new Date(s.timestamp).getTime()); + await a.setAssertionDate(new Date(s.timestamp).getTime() || new Date().getTime()); await a.setNegative(negative); a.confidence = scaled; if (accm != null) diff --git a/src/main/server/profile/calculator.js b/src/main/server/profile/calculator.js index 45f4409a7..b2ac2b075 100644 --- a/src/main/server/profile/calculator.js +++ b/src/main/server/profile/calculator.js @@ -321,11 +321,13 @@ module.exports = class ProfileCalculator { const vertices = {}; // These are metaVertices const topLevelVertices = {}; // These are metaVertices const inEdges = {}; + this.log("Processing state start."); for (let coprocessor of coprocessors) coprocessor.postProcessStart.call(this,vertices,topLevelVertices, inEdges); // Put information from each vertex into its meta-vertex, // and attach additional data on assertions, goals, & required signatures into meta.state + this.log("Processing vertices."); for (const vertex of this.g.verticies) { for (let coprocessor of coprocessors) coprocessor.postProcessEachVertex.call(this,vertex,vertices,topLevelVertices, inEdges); @@ -336,6 +338,7 @@ module.exports = class ProfileCalculator { // * topLevelVertices // * inEdges.equivalent // * inEdges.narrows + this.log("Processing edges."); for (const edge of this.g.edges) { for (let coprocessor of coprocessors) coprocessor.postProcessEachEdge.call(this,edge,vertices,topLevelVertices, inEdges); @@ -343,6 +346,7 @@ module.exports = class ProfileCalculator { let hash; do { + this.log("Iterating."); hash = hashSortCoerce.hash(topLevelVertices); // Handle relations between competencies, to determine how the competencies relate to goals @@ -360,6 +364,7 @@ module.exports = class ProfileCalculator { let profile = { children: [] }; + this.log("Collapsing data into tree."); for (let coprocessor of coprocessors) coprocessor.postProcessProfileBefore.call(this,profile,vertices,topLevelVertices, inEdges); @@ -391,6 +396,7 @@ module.exports = class ProfileCalculator { profile.children = profile.children.concat(topLevelVertices[vertexKey]); } // Get summary statistics for results + this.log("Profile - per element."); for (const child of profile.children) { for (let coprocessor of coprocessors) coprocessor.postProcessProfileEachElement.call(this,child,inEdges,vertices); @@ -403,6 +409,7 @@ module.exports = class ProfileCalculator { profile.children = newChildren; // Insert profile.timeline (resource alignments for goal competencies and their children) + this.log("Last step."); for (let obj of profile.children) for (let coprocessor of coprocessors) coprocessor.postProcessProfileAfter.call(this,obj,profile); diff --git a/src/main/server/profile/coordinator.js b/src/main/server/profile/coordinator.js index 0dcef6576..7fa83fabb 100644 --- a/src/main/server/profile/coordinator.js +++ b/src/main/server/profile/coordinator.js @@ -109,7 +109,10 @@ module.exports = async ()=>{ size: 1, task: filePath, shareEnv: true, - workerData: workerData + workerData: workerData, + resourceLimits: { + maxOldGenerationSizeMb: process.env.WORKER_MAX_MEMORY || 512 + } }); global.profileFlush = ()=>{ lastFlush = Date.now(); diff --git a/src/main/server/shims/auditLogger.js b/src/main/server/shims/auditLogger.js index 5d34221d2..b4e46bf62 100644 --- a/src/main/server/shims/auditLogger.js +++ b/src/main/server/shims/auditLogger.js @@ -60,7 +60,7 @@ let timeoutHandler; let previousHash = ''; -let flush = function() { +let flush = function () { try { if (logBuffers.length > 0) { console.log(logBuffers.join('\n')); @@ -75,14 +75,14 @@ let flush = function() { } }; -let hash = function(msg) { +let hash = function (msg) { let concat = previousHash + msg; let newHash = EcCrypto.md5(concat); previousHash = newHash; return `${newHash} ${msg}`; }; -let syslogFormat = function(facility, severity, timestamp, msgID, data) { +let syslogFormat = function (facility, severity, timestamp, msgID, data) { // RFC 3164 let msg = hash(`<${(SyslogFacility.USER * 8) + severity}>${timestamp.toISOString()} ${global.repo.selectedServer} ${facility + msgID.trim().substr(0, 27)} ${data}`); return msg; @@ -91,11 +91,11 @@ let syslogFormat = function(facility, severity, timestamp, msgID, data) { /* * @param message must be 27 or fewer characters and no spaces otherwise it will be truncated to 27 */ -let report = function(system, severity, message, ...data) { +let report = function (system, severity, message, ...data) { if (process.env.PRODUCTION == 'true') { try { if (filterLogs(system, severity, message)) { - const msg = JSON.stringify({date: new Date(), message, data, system, severity}); + const msg = JSON.stringify({ date: new Date(), message, data, system, severity }); logBuffers.push(hash(msg)); } if (logBuffers.length > 1000) { @@ -114,6 +114,8 @@ let report = function(system, severity, message, ...data) { } if (severity <= 6 || global.skyrepoDebug) { try { + if (severity == 3) + console.trace(data?.[0]); if (EcArray.isArray(data)) data = JSON.stringify(data); console.log(new Date(), system, InverseSeverity[severity], '', message.substr(0, 13), '\t:', data); } catch (ex) { @@ -159,7 +161,7 @@ if (process.env.LOG_FILTERED_MESSAGES) { } } -let filterLogs = function(system, severity, message) { +let filterLogs = function (system, severity, message) { if (filteredCategories[system]) { return false; } diff --git a/src/main/server/shims/levr.js b/src/main/server/shims/levr.js index 35988329c..412407f04 100644 --- a/src/main/server/shims/levr.js +++ b/src/main/server/shims/levr.js @@ -235,7 +235,7 @@ if (global.bindWebService === undefined) { } global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.INFO, 'CassHttpPostSuccess', endpoint + ` Response: ${res.statusCode} (` + (new Date().getTime() - ms) + ' ms) ' + JSON.stringify(req.query), process.env.LOG_HEADERS ? req.headers : undefined); } catch (ex) { - global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.ERROR, 'CassHttpPostError', `${endpoint} ${(req.isSpdy ? 'spdy' : req.httpVersion)} Request: ${JSON.stringify(req.query)} - Parts: ${JSON.stringify(EcObject.keys(fields))}`, process.env.LOG_HEADERS ? req.headers : undefined); + global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.ERROR, 'CassHttpPostError', `${endpoint} ${(req.isSpdy ? 'spdy' : req.httpVersion)} Request: ${JSON.stringify(req.query)} - Parts: ${JSON.stringify(EcObject.keys(fields))}`, process.env.LOG_HEADERS ? req.headers : undefined, ex.toString()); if (ex.status !== undefined && ex.status != null) { res.status(ex.status); } else { diff --git a/src/main/server/skyRepo.js b/src/main/server/skyRepo.js index 2577f838a..74a400f30 100644 --- a/src/main/server/skyRepo.js +++ b/src/main/server/skyRepo.js @@ -8915,7 +8915,7 @@ const skyrepoManyGetIndexSearch = async function (ary) { return results; } while (ary.length > 0) { - let batch = ary.splice(0, 50); + let batch = ary.splice(0, 10); let microSearchUrl = elasticEndpoint + '/_search?version&q='; for (let i = 0; i < batch.length; i++) { microSearchUrl += '_id:"' + batch[i].id + '"'; @@ -8925,7 +8925,7 @@ const skyrepoManyGetIndexSearch = async function (ary) { } const microSearch = await httpGet(microSearchUrl, true, elasticHeaders()); - + if (microSearch.error) throw new Error(microSearch.error.reason); if (global.skyrepoDebug) { global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.DEBUG, 'SkyrepManyGetIndexSearch', microSearchUrl); } @@ -9117,9 +9117,12 @@ const skyrepoManyGetPermanent = async function (manyParseParams) { const result = await skyrepoManyGetIndexInternal.call(this, 'permanent', manyParseParams); return result; }; -global.skyrepoManyGetInternal = async function (manyParseParams) { +let skyrepoManyGetInternal = global.skyrepoManyGetInternal = async function (manyParseParams) { let response = await skyrepoManyGetPermanent(manyParseParams); + if (global.skyrepoDebug) { + global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.DEBUG, 'SkyrepMGStuff', response); + } let resultDocs = (response)['docs']; const results = []; const notFoundInPermanent = []; @@ -9135,17 +9138,19 @@ global.skyrepoManyGetInternal = async function (manyParseParams) { } if (global.skyrepoDebug && notFoundInPermanent.length > 0) { - global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.DEBUG, 'SkyrepManyGetInternal', 'Failed to find ' + notFoundInPermanent + ' -- trying degraded form from search index.'); + global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.DEBUG, 'SkyrepManyGetInternal', 'Failed to find ' + JSON.stringify(notFoundInPermanent) + ' -- trying degraded form from search index.'); } response = await (skyrepoManyGetIndex).call(this, notFoundInPermanent); - let resultDocs2 = (response)['docs']; + + if (global.skyrepoDebug) { + global.auditLogger.report(global.auditLogger.LogCategory.NETWORK, global.auditLogger.Severity.DEBUG, 'SkyrepManyGetInternal', 'Index get - ' + JSON.stringify(response)); + } + + let resultDocs2 = (response); if (resultDocs2 != null) { for (let doc of resultDocs2) { - if ((doc)['found']) { - delete (lookup)[((doc)['_id']).substring(0, ((doc)['_id']).length - 1)]; - results.push(JSON.parse(((doc)['_source'])['data'])); - } + results.push(doc['_source']); } } return results; @@ -9201,7 +9206,7 @@ const skyrepoGetParsed = async function (id, version, type, dontDecrypt, history return filtered; }; const skyrepoManyGetParsed = async function (manyParseParams) { - const results = await (skyrepoManyGetInternal).call(this, manyParseParams); + const results = await skyrepoManyGetInternal.call(this, manyParseParams); if (results == null) { return null; } @@ -9367,6 +9372,11 @@ const skyrepoDeleteInternalPermanent = async function (id, version, type) { }; global.skyrepoDelete = async function (id, version, type) { const oldObj = await (validateSignatures).call(this, id, version, type, 'Only an owner of an object may delete it.'); + if (oldObj == null) { + console.log("Couldn't find data to delete, removing the index entry."); + await skyrepoDeleteInternalIndex.call(this, id, version, type); + return null; + } const ids = [id]; if (oldObj.id != null && oldObj.getGuid() != null) { ids.push(oldObj.getGuid()); @@ -9497,7 +9507,7 @@ const skyrepoSearch = async function (q, urlRemainder, start, size, sort, track_ hit += id; hits[i] = hit; } - searchResults = await endpointManyGet.call({ ctx: this.ctx, params: { objs: hits } }); + searchResults = await endpointManyGet.call({ ctx: this.ctx, params: { objs: hits }, dataStreams: this.dataStreams }); } searchResults = searchResults.filter(x => x); // If we don't have enough results, and our search hit enough results, and we're not at the size limit, try again with max size. @@ -9508,7 +9518,7 @@ const skyrepoSearch = async function (q, urlRemainder, start, size, sort, track_ } return searchResults; }; -global.queryParse = function (urlRemainder) { +let queryParse = global.queryParse = function (urlRemainder) { if (urlRemainder == null && this.params.urlRemainder != null) { urlRemainder = this.params.urlRemainder; } diff --git a/src/main/swagger.json b/src/main/swagger.json index f3f31e506..456c9b084 100644 --- a/src/main/swagger.json +++ b/src/main/swagger.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "title": "CaSS", - "version": "1.5.66" + "version": "1.5.69" }, "components": { "parameters": { diff --git a/src/main/webapp b/src/main/webapp index 2b1bafe9e..d2cad7cdf 160000 --- a/src/main/webapp +++ b/src/main/webapp @@ -1 +1 @@ -Subproject commit 2b1bafe9ef7f1156f6e2efcd68887cfddb272359 +Subproject commit d2cad7cdfcbc0ecc02076cf4fe8ebc261548f088 diff --git a/src/test/EcRepository.l0.test.js b/src/test/EcRepository.l0.test.js new file mode 100644 index 000000000..980383a16 --- /dev/null +++ b/src/test/EcRepository.l0.test.js @@ -0,0 +1,452 @@ +const fs = require('fs'); +const https = require('https'); + +const schema = { + "Thing": require('../org/schema/Thing.js') +}; + +let chai = require("chai"); +const EcRsaOaepAsyncWorker = require('../com/eduworks/ec/crypto/EcRsaOaepAsyncWorker.js'); +const EcRepository = require('../org/cassproject/ebac/repository/EcRepository.js'); +const EcCrypto = require('../com/eduworks/ec/crypto/EcCrypto.js'); +const EcEncryptedValue = require('../org/cassproject/ebac/repository/EcEncryptedValue.js'); +const EcIdentityManager = require('../org/cassproject/ebac/identity/EcIdentityManager.js'); +const EcIdentity = require('../org/cassproject/ebac/identity/EcIdentity.js'); +const EcPpk = require('../com/eduworks/ec/crypto/EcPpk.js'); + +let hrtime = function () { + try { + return [Math.round(performance.now() / 1000), performance.now() * 1000]; + } catch (e) { + try { + if (typeof process !== 'undefined') + return process.hrtime(); + return [new Date().getTime(), new Date().getTime() * 1000]; + } + catch (ex) { + return [new Date().getTime(), new Date().getTime() * 1000]; + } + } +}; + +let should = chai.should(); +let expect = chai.expect; +let assert = chai.assert; + +after(()=>EcRsaOaepAsyncWorker.teardown()); + +let deleteById = async function (id) { + await EcRepository.get( + id, + function (p1) { + EcRepository._delete(p1, null, function (p1) { + console.log(p1); + }); + }, + function (p1) { + console.log(p1); + } + ); +}; +let failure = function (p1) { + console.trace(p1); + assert.fail(); +}; + +if (fs.readFileSync != null) { + https.globalAgent.options.key = fs.readFileSync('client.key'); + https.globalAgent.options.cert = fs.readFileSync('client.crt'); + https.globalAgent.options.ca = fs.readFileSync('ca.crt'); + // global.axiosOptions.key = fs.readFileSync('client.key'); + // global.axiosOptions.cert = fs.readFileSync('client.crt'); + // global.axiosOptions.ca = fs.readFileSync('ca.crt'); + //When http2 supports client side self-signed certificates, don't use this. + //process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; +} + +let changeNameAndSaveAndCheck = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.saveTo(rld); + console.log(rld.id); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckRepo = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await EcRepository.save(rld); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckMultiput = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.multiput([rld]); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let repo = new EcRepository(); + +let newId1 = null; +describe("EcRepository (L0 Cache)", () => { + let id = null; + let rld = null; + it('create', async () => { + EcRepository.caching = false; + EcRepository.cachingL2 = false; + EcIdentityManager.default.clearIdentities(); + if ((typeof Cypress !== 'undefined') && Cypress != null && Cypress.env != null) + process.env.CASS_LOOPBACK = Cypress.env('CASS_LOOPBACK'); + console.log(process.env.CASS_LOOPBACK); + await repo.init(process.env.CASS_LOOPBACK || "http://localhost/api/", null, null, console.log); + if (EcIdentityManager.default.ids.length > 0) + newId1 = EcIdentityManager.default.ids[0]; + else { + newId1 = new EcIdentity(); + newId1.ppk = EcPpk.fromPem( + "-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAz4BiFucFE9bNcKfGD+e6aPRHl402YM4Z6nrurDRNlnwsWpsCoZasPLkjC314pVtHAI2duZo+esGKDloBsiLxASRJo3R2XiXVh2Y8U1RcHA5mWL4tMG5UY2d0libpNEHbHPNBmooVYpA2yhxN/vGibIk8x69uZWxJcFOxOg6zWG8EjF8UMgGnRCVSMTY3THhTlfZ0cGUzvrfb7OvHUgdCe285XkmYkj/V9P/m7hbWoOyJAJSTOm4/s6fIKpl72lblfN7bKaxTCsJp6/rQdmUeo+PIaa2lDOfo7dWbuTMcqkZ93kispNfYYhsEGUGlCsrrVWhlve8MenO4GdLsFP+HRwIDAQABAoIBAGaQpOuBIYde44lNxJ7UAdYi+Mg2aqyK81Btl0/TQo6hriLTAAfzPAt/z4y8ZkgFyCDD3zSAw2VWCPFzF+d/UfUohKWgyWlb9iHJLQRbbHQJwhkXV6raviesWXpmnVrROocizkie/FcNxac9OmhL8+cGJt7lHgJP9jTpiW6TGZ8ZzM8KBH2l80x9AWdvCjsICuPIZRjc706HtkKZzTROtq6Z/F4Gm0uWRnwAZrHTRpnh8qjtdBLYFrdDcUoFtzOM6UVRmocTfsNe4ntPpvwY2aGTWY7EmTj1kteMJ+fCQFIS+KjyMWQHsN8yQNfD5/j2uv6/BdSkO8uorGSJT6DwmTECgYEA8ydoQ4i58+A1udqA+fujM0Zn46++NTehFe75nqIt8rfQgoduBam3lE5IWj2U2tLQeWxQyr1ZJkLbITtrAI3PgfMnuFAii+cncwFo805Fss/nbKx8K49vBuCEAq3MRhLjWy3ZvIgUHj67jWvl50dbNqc7TUguxhS4BxGr/cPPkP0CgYEA2nbJPGzSKhHTETL37NWIUAdU9q/6NVRISRRXeRqZYwE1VPzs2sIUxA8zEDBHX7OtvCKzvZy1Lg5Unx1nh4nCEVkbW/8npLlRG2jOcZJF6NRfhzwLz3WMIrP6j9SmjJaB+1mnrTjfsg36tDEPDjjJLjJHCx9z/qRJh1v4bh4aPpMCgYACG31T2IOEEZVlnvcvM3ceoqWT25oSbAEBZ6jSLyWmzOEJwJK7idUFfAg0gAQiQWF9K+snVqzHIB02FIXA43nA7pKRjmA+RiqZXJHEShFgk1y2HGiXGA8mSBvcyhTTJqbBy4vvjl5eRLzrZNwBPSUVPC3PZajCHrvZk9WhxWivIQKBgQCzCu1MH2dy4R7ZlqsIJ8zKweeJMZpfQI7pjclO0FTrhh7+Yzd+5db9A/P2jYrBTVHSwaILgTYf49DIguHJfEZXz26TzB7iapqlWxTukVHISt1ryPNo+E58VoLAhChnSiaHJ+g7GESE+d4A9cAACNwgh0YgQIvhIyW70M1e+j7KDwKBgQDQSBLFDFmvvTP3sIRAr1+0OZWd1eRcwdhs0U9GwootoCoUP/1Y64pqukT6B9oIB/No9Nyn8kUX3/ZDtCslaGKEUGMJXQ4hc5J+lq0tSi9ZWBdhqOuMPEfUF3IxW+9yeILP4ppUBn1m5MVOWg5CvuuEeCmy4bhMaUErUlHZ78t5cA==-----END RSA PRIVATE KEY-----" + ); + EcIdentityManager.default.ids = []; + EcIdentityManager.default.addIdentity(newId1); + } + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + rld.squirrel = "brown"; + assert.notEqual(EcIdentityManager.default.ids.length, 0); + }); + it('save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt some more', async () => { + await changeNameAndSaveAndCheck(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await repo.saveTo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + results[0] = await EcEncryptedValue.fromEncryptedValue(results[0]); + assert.equal(results[0].squirrel, "brown"); + }).timeout(10000); + it('decrypt and save (to)', async () => { + rld = await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo)); + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('searchCache', async () => { + EcRepository.caching = true; + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + results = await EcRepository.get(rld.shortId()); + console.log(EcRepository.cacheDB); + EcRepository.caching = false; + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('history', async () => { + let history = await EcRepository.history(rld.shortId(),repo); + assert.isAbove(history.length,6,"History is not populated."); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/"+EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/"+EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered history', async () => { + let history = await EcRepository.history(rld.shortId(),repo); + assert.isTrue(history.length == 6,"History is not populated."); + }).timeout(10000); + it('search index/permanent mismatch', async () => { + let thing = new schema.Thing(); + thing.generateId(repo.selectedServer); + thing.name = "Thing (index)"; + thing.updateTimestamp(); + let indexStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}schema.org.thing/_doc/${EcCrypto.md5(thing.shortId())}?version=${thing.getTimestamp()}&version_type=external&refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: thing.toJson() + }); + let oldId = thing.id; + thing.updateTimestamp(); + assert.isTrue(indexStore.status >= 200 && indexStore.status < 300, "Index store failed."); + let permanentStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({data:thing.toJson()}) + }); + assert.isTrue(permanentStore.status >= 200 && permanentStore.status < 300, "Permanent store 1 failed."); + let permanentStore2 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore2.status >= 200 && permanentStore2.status < 300, "Permanent store 2 failed."); + let permanentStore3 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({data:thing.toJson()}) + }); + assert.isTrue(permanentStore3.status >= 200 && permanentStore3.status < 300, "Permanent store 3 failed."); + let permanentStore4 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore4.status >= 200 && permanentStore4.status < 300, "Permanent store 4 failed."); + thing.id = oldId; + let results = await repo.search(`@id:"${thing.shortId()}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (short) failed."); + results = await repo.search(`@id:"${thing.id}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (long) failed."); + results = await repo.multiget([thing.id]); + console.log(results); + assert.equal(results.length, 0, "Multiget (long) failed."); + results = await repo.multiget([thing.shortId()]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (short) failed."); + results = await repo.multiget([EcRemoteLinkedData.veryShortId(repo.selectedServer, EcCrypto.md5(thing.shortId()))]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (md5 id) failed."); + }).timeout(10000); + it('Turn off caching', async () => { + EcRepository.caching = false; + EcRepository.cachingL2 = false; + }).timeout(10000); +}); \ No newline at end of file diff --git a/src/test/EcRepository.l1.test.js b/src/test/EcRepository.l1.test.js new file mode 100644 index 000000000..5dfd38f27 --- /dev/null +++ b/src/test/EcRepository.l1.test.js @@ -0,0 +1,443 @@ +const fs = require('fs'); +const https = require('https'); + +const schema = { + "Thing": require('../org/schema/Thing.js') +}; + +let chai = require("chai"); +const EcRsaOaepAsyncWorker = require('../com/eduworks/ec/crypto/EcRsaOaepAsyncWorker.js'); +const EcRepository = require('../org/cassproject/ebac/repository/EcRepository.js'); +const EcCrypto = require('../com/eduworks/ec/crypto/EcCrypto.js'); +const EcEncryptedValue = require('../org/cassproject/ebac/repository/EcEncryptedValue.js'); +const EcIdentityManager = require('../org/cassproject/ebac/identity/EcIdentityManager.js'); +const EcIdentity = require('../org/cassproject/ebac/identity/EcIdentity.js'); +const EcPpk = require('../com/eduworks/ec/crypto/EcPpk.js'); + +let hrtime = function () { + try { + return [Math.round(performance.now() / 1000), performance.now() * 1000]; + } catch (e) { + try { + if (typeof process !== 'undefined') + return process.hrtime(); + return [new Date().getTime(), new Date().getTime() * 1000]; + } + catch (ex) { + return [new Date().getTime(), new Date().getTime() * 1000]; + } + } +}; + +let should = chai.should(); +let expect = chai.expect; +let assert = chai.assert; + +after(() => EcRsaOaepAsyncWorker.teardown()); + +let deleteById = async function (id) { + await EcRepository.get( + id, + function (p1) { + EcRepository._delete(p1, null, function (p1) { + console.log(p1); + }); + }, + function (p1) { + console.log(p1); + } + ); +}; +let failure = function (p1) { + console.trace(p1); + assert.fail(); +}; + +if (fs.readFileSync != null) { + https.globalAgent.options.key = fs.readFileSync('client.key'); + https.globalAgent.options.cert = fs.readFileSync('client.crt'); + https.globalAgent.options.ca = fs.readFileSync('ca.crt'); + // global.axiosOptions.key = fs.readFileSync('client.key'); + // global.axiosOptions.cert = fs.readFileSync('client.crt'); + // global.axiosOptions.ca = fs.readFileSync('ca.crt'); + //When http2 supports client side self-signed certificates, don't use this. + //process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; +} + +let changeNameAndSaveAndCheck = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.saveTo(rld); + console.log(rld.id); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckRepo = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await EcRepository.save(rld); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckMultiput = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.multiput([rld]); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let repo = new EcRepository(); + +let newId1 = null; +describe("EcRepository (L1 Cache)", () => { + let id = null; + let rld = null; + it('create', async () => { + EcRepository.caching = true; + EcRepository.cachingL2 = false; + EcIdentityManager.default.clearIdentities(); + if ((typeof Cypress !== 'undefined') && Cypress != null && Cypress.env != null) + process.env.CASS_LOOPBACK = Cypress.env('CASS_LOOPBACK'); + console.log(process.env.CASS_LOOPBACK); + await repo.init(process.env.CASS_LOOPBACK || "http://localhost/api/", null, null, console.log); + if (EcIdentityManager.default.ids.length > 0) + newId1 = EcIdentityManager.default.ids[0]; + else { + newId1 = new EcIdentity(); + newId1.ppk = EcPpk.fromPem( + "-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAz4BiFucFE9bNcKfGD+e6aPRHl402YM4Z6nrurDRNlnwsWpsCoZasPLkjC314pVtHAI2duZo+esGKDloBsiLxASRJo3R2XiXVh2Y8U1RcHA5mWL4tMG5UY2d0libpNEHbHPNBmooVYpA2yhxN/vGibIk8x69uZWxJcFOxOg6zWG8EjF8UMgGnRCVSMTY3THhTlfZ0cGUzvrfb7OvHUgdCe285XkmYkj/V9P/m7hbWoOyJAJSTOm4/s6fIKpl72lblfN7bKaxTCsJp6/rQdmUeo+PIaa2lDOfo7dWbuTMcqkZ93kispNfYYhsEGUGlCsrrVWhlve8MenO4GdLsFP+HRwIDAQABAoIBAGaQpOuBIYde44lNxJ7UAdYi+Mg2aqyK81Btl0/TQo6hriLTAAfzPAt/z4y8ZkgFyCDD3zSAw2VWCPFzF+d/UfUohKWgyWlb9iHJLQRbbHQJwhkXV6raviesWXpmnVrROocizkie/FcNxac9OmhL8+cGJt7lHgJP9jTpiW6TGZ8ZzM8KBH2l80x9AWdvCjsICuPIZRjc706HtkKZzTROtq6Z/F4Gm0uWRnwAZrHTRpnh8qjtdBLYFrdDcUoFtzOM6UVRmocTfsNe4ntPpvwY2aGTWY7EmTj1kteMJ+fCQFIS+KjyMWQHsN8yQNfD5/j2uv6/BdSkO8uorGSJT6DwmTECgYEA8ydoQ4i58+A1udqA+fujM0Zn46++NTehFe75nqIt8rfQgoduBam3lE5IWj2U2tLQeWxQyr1ZJkLbITtrAI3PgfMnuFAii+cncwFo805Fss/nbKx8K49vBuCEAq3MRhLjWy3ZvIgUHj67jWvl50dbNqc7TUguxhS4BxGr/cPPkP0CgYEA2nbJPGzSKhHTETL37NWIUAdU9q/6NVRISRRXeRqZYwE1VPzs2sIUxA8zEDBHX7OtvCKzvZy1Lg5Unx1nh4nCEVkbW/8npLlRG2jOcZJF6NRfhzwLz3WMIrP6j9SmjJaB+1mnrTjfsg36tDEPDjjJLjJHCx9z/qRJh1v4bh4aPpMCgYACG31T2IOEEZVlnvcvM3ceoqWT25oSbAEBZ6jSLyWmzOEJwJK7idUFfAg0gAQiQWF9K+snVqzHIB02FIXA43nA7pKRjmA+RiqZXJHEShFgk1y2HGiXGA8mSBvcyhTTJqbBy4vvjl5eRLzrZNwBPSUVPC3PZajCHrvZk9WhxWivIQKBgQCzCu1MH2dy4R7ZlqsIJ8zKweeJMZpfQI7pjclO0FTrhh7+Yzd+5db9A/P2jYrBTVHSwaILgTYf49DIguHJfEZXz26TzB7iapqlWxTukVHISt1ryPNo+E58VoLAhChnSiaHJ+g7GESE+d4A9cAACNwgh0YgQIvhIyW70M1e+j7KDwKBgQDQSBLFDFmvvTP3sIRAr1+0OZWd1eRcwdhs0U9GwootoCoUP/1Y64pqukT6B9oIB/No9Nyn8kUX3/ZDtCslaGKEUGMJXQ4hc5J+lq0tSi9ZWBdhqOuMPEfUF3IxW+9yeILP4ppUBn1m5MVOWg5CvuuEeCmy4bhMaUErUlHZ78t5cA==-----END RSA PRIVATE KEY-----" + ); + EcIdentityManager.default.ids = []; + EcIdentityManager.default.addIdentity(newId1); + } + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + rld.squirrel = "brown"; + assert.notEqual(EcIdentityManager.default.ids.length, 0); + }); + it('save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt some more', async () => { + await changeNameAndSaveAndCheck(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await repo.saveTo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + results[0] = await EcEncryptedValue.fromEncryptedValue(results[0]); + assert.equal(results[0].squirrel, "brown"); + }).timeout(10000); + it('decrypt and save (to)', async () => { + rld = await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo)); + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('history', async () => { + let history = await EcRepository.history(rld.shortId(), repo); + assert.isAbove(history.length, 6, "History is not populated."); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/" + EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/" + EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered history', async () => { + let history = await EcRepository.history(rld.shortId(), repo); + assert.isTrue(history.length == 6, "History is not populated."); + }).timeout(10000); + it('search index/permanent mismatch', async () => { + let thing = new schema.Thing(); + thing.generateId(repo.selectedServer); + thing.name = "Thing (index)"; + thing.updateTimestamp(); + let indexStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}schema.org.thing/_doc/${EcCrypto.md5(thing.shortId())}?version=${thing.getTimestamp()}&version_type=external&refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: thing.toJson() + }); + let oldId = thing.id; + thing.updateTimestamp(); + assert.isTrue(indexStore.status >= 200 && indexStore.status < 300, "Index store failed."); + let permanentStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({data:thing.toJson()}) + }); + assert.isTrue(permanentStore.status >= 200 && permanentStore.status < 300, "Permanent store 1 failed."); + let permanentStore2 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore2.status >= 200 && permanentStore2.status < 300, "Permanent store 2 failed."); + let permanentStore3 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({data:thing.toJson()}) + }); + assert.isTrue(permanentStore3.status >= 200 && permanentStore3.status < 300, "Permanent store 3 failed."); + let permanentStore4 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore4.status >= 200 && permanentStore4.status < 300, "Permanent store 4 failed."); + thing.id = oldId; + let results = await repo.search(`@id:"${thing.shortId()}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (short) failed."); + results = await repo.search(`@id:"${thing.id}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (long) failed."); + results = await repo.multiget([thing.id]); + console.log(results); + assert.equal(results.length, 0, "Multiget (long) failed."); + results = await repo.multiget([thing.shortId()]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (short) failed."); + results = await repo.multiget([EcRemoteLinkedData.veryShortId(repo.selectedServer, EcCrypto.md5(thing.shortId()))]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (md5 id) failed."); + }).timeout(10000); + it('Turn off caching', async () => { + EcRepository.caching = false; + EcRepository.cachingL2 = false; + }).timeout(10000); +}); \ No newline at end of file diff --git a/src/test/EcRepository.l2.test.js b/src/test/EcRepository.l2.test.js new file mode 100644 index 000000000..eab10a4dd --- /dev/null +++ b/src/test/EcRepository.l2.test.js @@ -0,0 +1,447 @@ +const fs = require('fs'); +const https = require('https'); +require('fake-indexeddb/auto'); + +const schema = { + "Thing": require('../org/schema/Thing.js') +}; + +let chai = require("chai"); +const EcRsaOaepAsyncWorker = require('../com/eduworks/ec/crypto/EcRsaOaepAsyncWorker.js'); +const EcRepository = require('../org/cassproject/ebac/repository/EcRepository.js'); +const EcCrypto = require('../com/eduworks/ec/crypto/EcCrypto.js'); +const EcEncryptedValue = require('../org/cassproject/ebac/repository/EcEncryptedValue.js'); +const EcIdentityManager = require('../org/cassproject/ebac/identity/EcIdentityManager.js'); +const EcIdentity = require('../org/cassproject/ebac/identity/EcIdentity.js'); +const EcPpk = require('../com/eduworks/ec/crypto/EcPpk.js'); + +let hrtime = function () { + try { + return [Math.round(performance.now() / 1000), performance.now() * 1000]; + } catch (e) { + try { + if (typeof process !== 'undefined') + return process.hrtime(); + return [new Date().getTime(), new Date().getTime() * 1000]; + } + catch (ex) { + return [new Date().getTime(), new Date().getTime() * 1000]; + } + } +}; + +let should = chai.should(); +let expect = chai.expect; +let assert = chai.assert; + +after(() => EcRsaOaepAsyncWorker.teardown()); + +let deleteById = async function (id) { + await EcRepository.get( + id, + function (p1) { + EcRepository._delete(p1, null, function (p1) { + console.log(p1); + }); + }, + function (p1) { + console.log(p1); + } + ); +}; +let failure = function (p1) { + console.trace(p1); + assert.fail(); +}; + +if (fs.readFileSync != null) { + https.globalAgent.options.key = fs.readFileSync('client.key'); + https.globalAgent.options.cert = fs.readFileSync('client.crt'); + https.globalAgent.options.ca = fs.readFileSync('ca.crt'); + // global.axiosOptions.key = fs.readFileSync('client.key'); + // global.axiosOptions.cert = fs.readFileSync('client.crt'); + // global.axiosOptions.ca = fs.readFileSync('ca.crt'); + //When http2 supports client side self-signed certificates, don't use this. + //process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; +} + +let changeNameAndSaveAndCheck = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.saveTo(rld); + console.log(rld.id); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckRepo = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await EcRepository.save(rld); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let changeNameAndSaveAndCheckMultiput = async (rld) => { + let newName = "Some Thing " + EcCrypto.generateUUID(); + rld.setName(newName); + await repo.multiput([rld]); + assert.equal((await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo))).getName(), newName); +}; + +let repo = new EcRepository(); + +let newId1 = null; +describe("EcRepository (L2 Cache)", () => { + let id = null; + let rld = null; + it('create', async () => { + EcRepository.caching = true; + EcRepository.cachingL2 = true; + EcIdentityManager.default.clearIdentities(); + if ((typeof Cypress !== 'undefined') && Cypress != null && Cypress.env != null) + process.env.CASS_LOOPBACK = Cypress.env('CASS_LOOPBACK'); + console.log(process.env.CASS_LOOPBACK); + if ((typeof Cypress !== 'undefined') && Cypress != null && Cypress.env != null) + process.env.ELASTICSEARCH_ENDPOINT = Cypress.env('ELASTICSEARCH_ENDPOINT'); + console.log(process.env.CASS_LOOPBACK); + await repo.init(process.env.CASS_LOOPBACK || "http://localhost/api/", null, null, console.log); + if (EcIdentityManager.default.ids.length > 0) + newId1 = EcIdentityManager.default.ids[0]; + else { + newId1 = new EcIdentity(); + newId1.ppk = EcPpk.fromPem( + "-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAz4BiFucFE9bNcKfGD+e6aPRHl402YM4Z6nrurDRNlnwsWpsCoZasPLkjC314pVtHAI2duZo+esGKDloBsiLxASRJo3R2XiXVh2Y8U1RcHA5mWL4tMG5UY2d0libpNEHbHPNBmooVYpA2yhxN/vGibIk8x69uZWxJcFOxOg6zWG8EjF8UMgGnRCVSMTY3THhTlfZ0cGUzvrfb7OvHUgdCe285XkmYkj/V9P/m7hbWoOyJAJSTOm4/s6fIKpl72lblfN7bKaxTCsJp6/rQdmUeo+PIaa2lDOfo7dWbuTMcqkZ93kispNfYYhsEGUGlCsrrVWhlve8MenO4GdLsFP+HRwIDAQABAoIBAGaQpOuBIYde44lNxJ7UAdYi+Mg2aqyK81Btl0/TQo6hriLTAAfzPAt/z4y8ZkgFyCDD3zSAw2VWCPFzF+d/UfUohKWgyWlb9iHJLQRbbHQJwhkXV6raviesWXpmnVrROocizkie/FcNxac9OmhL8+cGJt7lHgJP9jTpiW6TGZ8ZzM8KBH2l80x9AWdvCjsICuPIZRjc706HtkKZzTROtq6Z/F4Gm0uWRnwAZrHTRpnh8qjtdBLYFrdDcUoFtzOM6UVRmocTfsNe4ntPpvwY2aGTWY7EmTj1kteMJ+fCQFIS+KjyMWQHsN8yQNfD5/j2uv6/BdSkO8uorGSJT6DwmTECgYEA8ydoQ4i58+A1udqA+fujM0Zn46++NTehFe75nqIt8rfQgoduBam3lE5IWj2U2tLQeWxQyr1ZJkLbITtrAI3PgfMnuFAii+cncwFo805Fss/nbKx8K49vBuCEAq3MRhLjWy3ZvIgUHj67jWvl50dbNqc7TUguxhS4BxGr/cPPkP0CgYEA2nbJPGzSKhHTETL37NWIUAdU9q/6NVRISRRXeRqZYwE1VPzs2sIUxA8zEDBHX7OtvCKzvZy1Lg5Unx1nh4nCEVkbW/8npLlRG2jOcZJF6NRfhzwLz3WMIrP6j9SmjJaB+1mnrTjfsg36tDEPDjjJLjJHCx9z/qRJh1v4bh4aPpMCgYACG31T2IOEEZVlnvcvM3ceoqWT25oSbAEBZ6jSLyWmzOEJwJK7idUFfAg0gAQiQWF9K+snVqzHIB02FIXA43nA7pKRjmA+RiqZXJHEShFgk1y2HGiXGA8mSBvcyhTTJqbBy4vvjl5eRLzrZNwBPSUVPC3PZajCHrvZk9WhxWivIQKBgQCzCu1MH2dy4R7ZlqsIJ8zKweeJMZpfQI7pjclO0FTrhh7+Yzd+5db9A/P2jYrBTVHSwaILgTYf49DIguHJfEZXz26TzB7iapqlWxTukVHISt1ryPNo+E58VoLAhChnSiaHJ+g7GESE+d4A9cAACNwgh0YgQIvhIyW70M1e+j7KDwKBgQDQSBLFDFmvvTP3sIRAr1+0OZWd1eRcwdhs0U9GwootoCoUP/1Y64pqukT6B9oIB/No9Nyn8kUX3/ZDtCslaGKEUGMJXQ4hc5J+lq0tSi9ZWBdhqOuMPEfUF3IxW+9yeILP4ppUBn1m5MVOWg5CvuuEeCmy4bhMaUErUlHZ78t5cA==-----END RSA PRIVATE KEY-----" + ); + EcIdentityManager.default.ids = []; + EcIdentityManager.default.addIdentity(newId1); + } + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + rld.squirrel = "brown"; + assert.notEqual(EcIdentityManager.default.ids.length, 0); + }); + it('save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('encrypt some more', async () => { + await changeNameAndSaveAndCheck(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + rld = await EcEncryptedValue.toEncryptedValue(rld); + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await repo.saveTo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + results[0] = await EcEncryptedValue.fromEncryptedValue(results[0]); + assert.equal(results[0].squirrel, "brown"); + }).timeout(10000); + it('decrypt and save (to)', async () => { + rld = await EcEncryptedValue.fromEncryptedValue(await EcRepository.get(rld.shortId(), null, null, repo)); + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('history', async () => { + let history = await EcRepository.history(rld.shortId(), repo); + assert.isAbove(history.length, 6, "History is not populated."); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (ecrepository)', async () => { + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('encrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (ecrepository)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckRepo(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('create', async () => { + rld = new schema.Thing(); + rld.generateId(repo.selectedServer); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/" + EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (to)', async () => { + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered encrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (to)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheck(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered create', async () => { + rld = new schema.Thing(); + rld.id = "https://this.object.is.not.here/" + EcCrypto.generateUUID(); + rld.addOwner(newId1.ppk.toPk()); + rld.setName("Some Thing"); + rld.setDescription("Some Description"); + }); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered save (multiput)', async () => { + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered encrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), true); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered decrypt and save (multiput)', async () => { + EcEncryptedValue.encryptOnSave(rld.shortId(), false); + await changeNameAndSaveAndCheckMultiput(rld); + }).timeout(10000); + it('registered search', async () => { + let results = await repo.search(`@id:"${rld.shortId()}"`); + assert.equal(results.length, 1); + assert.equal(results[0].shortId(), rld.shortId()); + }).timeout(10000); + it('registered history', async () => { + let history = await EcRepository.history(rld.shortId(), repo); + assert.isTrue(history.length == 6, "History is not populated."); + }).timeout(10000); + it('search index/permanent mismatch', async () => { + let thing = new schema.Thing(); + thing.generateId(repo.selectedServer); + thing.name = "Thing (index)"; + thing.updateTimestamp(); + let indexStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}schema.org.thing/_doc/${EcCrypto.md5(thing.shortId())}?version=${thing.getTimestamp()}&version_type=external&refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: thing.toJson() + }); + let oldId = thing.id; + thing.updateTimestamp(); + assert.isTrue(indexStore.status >= 200 && indexStore.status < 300, "Index store failed."); + let permanentStore = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore.status >= 200 && permanentStore.status < 300, "Permanent store 1 failed."); + let permanentStore2 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${EcCrypto.md5(thing.shortId())}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore2.status >= 200 && permanentStore2.status < 300, "Permanent store 2 failed."); + let permanentStore3 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore3.status >= 200 && permanentStore3.status < 300, "Permanent store 3 failed."); + let permanentStore4 = await fetch(`${process.env.ELASTICSEARCH_ENDPOINT || "http://localhost:9200/"}permanent/_doc/${thing.getGuid()}.${thing.getTimestamp()}?refresh=true`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ data: thing.toJson() }) + }); + assert.isTrue(permanentStore4.status >= 200 && permanentStore4.status < 300, "Permanent store 4 failed."); + thing.id = oldId; + let results = await repo.search(`@id:"${thing.shortId()}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (short) failed."); + results = await repo.search(`@id:"${thing.id}"`); + console.log(results); + assert.isAbove(results.length, 0, "Search (long) failed."); + results = await repo.multiget([thing.id]); + console.log(results); + assert.equal(results.length, 0, "Multiget (long) failed."); + results = await repo.multiget([thing.shortId()]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (short) failed."); + results = await repo.multiget([EcRemoteLinkedData.veryShortId(repo.selectedServer, EcCrypto.md5(thing.shortId()))]); + console.log(results); + assert.isAbove(results.length, 0, "Multiget (md5 id) failed."); + }).timeout(10000); + it('Turn off caching', async () => { + EcRepository.caching = false; + EcRepository.cachingL2 = false; + }).timeout(10000); +}); \ No newline at end of file