From b9a97f20c49cba9b1faceb27b8e17c59f9784bf3 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 09:42:59 -0600 Subject: [PATCH 01/25] Add ClearImages API --- package-lock.json | 3158 ++++++++++++++++--------------- package.json | 2 +- src/api/db/models/ImageError.js | 22 + src/api/resolvers/Mutation.js | 5 + 4 files changed, 1674 insertions(+), 1513 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90498f8e..ec415ab3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "lodash": "^4.17.20", "luxon": "^3.2.1", "mongo-cursor-pagination": "^8.1.2", - "mongodb-query-parser": "^2.4.3", + "mongodb-query-parser": "^3.0.0", "mongoose": "^7.0.0", "prompt": "^1.2.0", "stream-transform": "^3.2.0", @@ -50,6 +50,15 @@ "undici": "^5.22.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@apollo/protobufjs": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", @@ -75,9 +84,9 @@ } }, "node_modules/@apollo/usage-reporting-protobuf": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.0.tgz", - "integrity": "sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", + "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", "dependencies": { "@apollo/protobufjs": "1.2.7" } @@ -326,70 +335,51 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.347.0.tgz", - "integrity": "sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/chunked-blob-reader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", - "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", - "dependencies": { - "tslib": "^2.5.0" - } - }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.348.0.tgz", - "integrity": "sha512-P7PzlPU9cfynfC2O2pSls8lBtLO5cYoYEfhWgPZUZS/tewOrX78qqLcQKPBToHiZY5zWGFr2iC2fDDTCbYnhfw==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.370.0.tgz", + "integrity": "sha512-q4mwLOgrdKPpqHAgwNTikfd86rVMsDK0XFf2t99AHg8C9dXMGtDjPf5M0tTIQmh5+555XzClzxf2Nu9tn7Obrw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/eventstream-serde-browser": "3.347.0", - "@aws-sdk/eventstream-serde-config-resolver": "3.347.0", - "@aws-sdk/eventstream-serde-node": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.347.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/eventstream-serde-browser": "^1.0.1", + "@smithy/eventstream-serde-config-resolver": "^1.0.1", + "@smithy/eventstream-serde-node": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-stream": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "@smithy/util-waiter": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -397,64 +387,63 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.348.0.tgz", - "integrity": "sha512-19ShUJL/Kqol4pW2S6axD85oL2JIh91ctUgqPEuu5BzGyEgq5s+HP/DDNzcdsTKl7gfCfaIULf01yWU6RwY1EA==", + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.374.0.tgz", + "integrity": "sha512-1qhzOHN48DPAvHi/G2FQfx1DXpbiOfOUqJvnSCRKKo7UaPPN1426Ufw2qizTRiLo/suK2ABCb7spbTxqEFjvLw==", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/eventstream-serde-browser": "3.347.0", - "@aws-sdk/eventstream-serde-config-resolver": "3.347.0", - "@aws-sdk/eventstream-serde-node": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-blob-browser": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/hash-stream-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/md5-js": "3.347.0", - "@aws-sdk/middleware-bucket-endpoint": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-expect-continue": "3.347.0", - "@aws-sdk/middleware-flexible-checksums": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-location-constraint": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-sdk-s3": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-ssec": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/signature-v4-multi-region": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-stream-browser": "3.347.0", - "@aws-sdk/util-stream-node": "3.348.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.347.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/hash-stream-node": "3.374.0", + "@aws-sdk/middleware-bucket-endpoint": "3.370.0", + "@aws-sdk/middleware-expect-continue": "3.370.0", + "@aws-sdk/middleware-flexible-checksums": "3.374.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-location-constraint": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-sdk-s3": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-ssec": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/signature-v4-multi-region": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", "@aws-sdk/xml-builder": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "fast-xml-parser": "4.2.4", + "@smithy/config-resolver": "^1.0.1", + "@smithy/eventstream-serde-browser": "^1.0.1", + "@smithy/eventstream-serde-config-resolver": "^1.0.1", + "@smithy/eventstream-serde-node": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-blob-browser": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/md5-js": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-stream": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", + "@smithy/util-waiter": "^1.0.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { @@ -462,45 +451,46 @@ } }, "node_modules/@aws-sdk/client-sagemaker-runtime": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker-runtime/-/client-sagemaker-runtime-3.348.0.tgz", - "integrity": "sha512-YCe85F+eZQtEiKEK4H4yXTUUBt7hR8KoJrC6qhfcFPGNeCzUs/FskoOOXrDMvAvGkCVtdLNbmlOubENHr1xbCw==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker-runtime/-/client-sagemaker-runtime-3.370.0.tgz", + "integrity": "sha512-9cNgjERHgsLgNC6f/k5cORtEFmt2fDi2lHYJYqdMsOhT3PAnsoM5veGN1DEqUpuPfC0PD+oL/gH5k+NyqsiW/w==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-stream": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -508,45 +498,45 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.348.0.tgz", - "integrity": "sha512-Qe0TpLYn9zXe1zbE37pbZgN4i6xGiGqfctByyOLb1U+NuADS0CwIBl4Mfmdgg/wOe/Yw6y76Q8uBwjtQ/bgPsg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.370.0.tgz", + "integrity": "sha512-1o1mpWbI1RyzCQ4cVpHQJnm6PziAJ+ptLt4p+wlN74Z330/nnE0JkK3t9l3CxhPqCIW8VjGbTCno5IzwAXnjPw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -555,47 +545,47 @@ } }, "node_modules/@aws-sdk/client-ses": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.348.0.tgz", - "integrity": "sha512-rSOYQOw39U43MTLRQITbhnJuXWuhcuSYHe6XGAyjYHH2wZQKP5AtiJo2+dnECNG5DigOC+5VtrQNGBryd6yz2w==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.370.0.tgz", + "integrity": "sha512-N8BZK5tp/GppoNtfMZ8qQ8leguonO3jZtjMoX2Bx7v3f1OoCTdA4Hj2hTsYVkKlqlxix2p4gonyDk9OOpdWr5g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.347.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "fast-xml-parser": "4.2.4", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "@smithy/util-waiter": "^1.0.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { @@ -603,48 +593,48 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.348.0.tgz", - "integrity": "sha512-Rglio22q7LpFGcjz3YbdOG+hNEd9Ykuw1aVHA5WQtT5BSxheYPtNv2XQunpvNrXssLZYcQWK4lab450aIfjtFg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.370.0.tgz", + "integrity": "sha512-HaF+Jb5dKtvv2uA5WhtPMPM4d6vczHGKV1x/CRFJv2NDwHJX6E84RZ+74008SCjdA3C1RqvErrjw0iSwYyN7CA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/md5-js": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-sdk-sqs": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "fast-xml-parser": "4.2.4", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-sdk-sqs": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/md5-js": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { @@ -652,46 +642,46 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.348.0.tgz", - "integrity": "sha512-zqT7quggsJjOlhxl5D7JDNA9ufi0L9YqyHk3WygMCTjcuaaKLJJP1mVAHm2Ia3LvW3Vj4AdoXt0Tm2LmV0+cSQ==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.370.0.tgz", + "integrity": "sha512-4zWvxA9Ljw+js1E3yE+3LPwGVrTxOC9ctpF1K/N3blqkBZX3m2w867476v9ARvk3xPR6vId9In6NjnL5Ur1+iQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.348.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@aws-sdk/util-waiter": "3.347.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/client-sts": "3.370.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "@smithy/util-waiter": "^1.0.1", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -700,42 +690,42 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.348.0.tgz", - "integrity": "sha512-5S23gVKBl0fhZ96RD8LdPhMKeh8E5fmebyZxMNZuWliSXz++Q9ZCrwPwQbkks3duPOTcKKobs3IoqP82HoXMvQ==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz", + "integrity": "sha512-0Ty1iHuzNxMQtN7nahgkZr4Wcu1XvqGfrQniiGdKKif9jG/4elxsQPiydRuQpFqN6b+bg7wPP7crFP1uTxx2KQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -743,42 +733,42 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.348.0.tgz", - "integrity": "sha512-tvHpcycx4EALvk38I9rAOdPeHvBDezqIB4lrE7AvnOJljlvCcdQ2gXa9GDrwrM7zuYBIZMBRE/njTMrCwoOdAA==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz", + "integrity": "sha512-jAYOO74lmVXylQylqkPrjLzxvUnMKw476JCUTvCO6Q8nv3LzCWd76Ihgv/m9Q4M2Tbqi1iP2roVK5bstsXzEjA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -786,60 +776,46 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.348.0.tgz", - "integrity": "sha512-4iaQlWAOHMEF4xjR/FB/ws3aUjXjJHwbsIcqbdYAxsKijDYYTZYCPc/gM0NE1yi28qlNYNhMzHipe5xTYbU2Eg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz", + "integrity": "sha512-utFxOPWIzbN+3kc415Je2o4J72hOLNhgR2Gt5EnRSggC3yOnkC4GzauxG8n7n5gZGBX45eyubHyPOXLOIyoqQA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.348.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-sdk-sts": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "fast-xml-parser": "4.2.4", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.347.0.tgz", - "integrity": "sha512-2ja+Sf/VnUO7IQ3nKbDQ5aumYKKJUaTm/BuVJ29wNho8wYHfuf7wHZV0pDTkB8RF5SH7IpHap7zpZAj39Iq+EA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.347.0", + "@aws-sdk/credential-provider-node": "3.370.0", + "@aws-sdk/middleware-host-header": "3.370.0", + "@aws-sdk/middleware-logger": "3.370.0", + "@aws-sdk/middleware-recursion-detection": "3.370.0", + "@aws-sdk/middleware-sdk-sts": "3.370.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/middleware-user-agent": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@aws-sdk/util-user-agent-browser": "3.370.0", + "@aws-sdk/util-user-agent-node": "3.370.0", + "@smithy/config-resolver": "^1.0.1", + "@smithy/fetch-http-handler": "^1.0.1", + "@smithy/hash-node": "^1.0.1", + "@smithy/invalid-dependency": "^1.0.1", + "@smithy/middleware-content-length": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/middleware-retry": "^1.0.3", + "@smithy/middleware-serde": "^1.0.1", + "@smithy/middleware-stack": "^1.0.1", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/node-http-handler": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", + "@smithy/url-parser": "^1.0.1", + "@smithy/util-base64": "^1.0.1", + "@smithy/util-body-length-browser": "^1.0.1", + "@smithy/util-body-length-node": "^1.0.1", + "@smithy/util-defaults-mode-browser": "^1.0.1", + "@smithy/util-defaults-mode-node": "^1.0.1", + "@smithy/util-retry": "^1.0.3", + "@smithy/util-utf8": "^1.0.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { @@ -847,27 +823,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.347.0.tgz", - "integrity": "sha512-UnEM+LKGpXKzw/1WvYEQsC6Wj9PupYZdQOE+e2Dgy2dqk/pVFy4WueRtFXYDT2B41ppv3drdXUuKZRIDVqIgNQ==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.347.0.tgz", - "integrity": "sha512-7scCy/DCDRLIhlqTxff97LQWDnRwRXji3bxxMg+xWOTTaJe7PWx+etGSbBWaL42vsBHFShQjSLvJryEgoBktpw==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz", + "integrity": "sha512-raR3yP/4GGbKFRPP5hUBNkEmTnzxI9mEc2vJAJrcv4G4J4i/UP6ELiLInQ5eO2/VcV/CeKGZA3t7d1tsJ+jhCg==", "dependencies": { - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -875,18 +837,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.348.0.tgz", - "integrity": "sha512-0IEH5mH/cz2iLyr/+pSa3sCsQcGADiLSEn6yivsXdfz1zDqBiv+ffDoL0+Pvnp+TKf8sA6OlX8PgoMoEBvBdKw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/credential-provider-process": "3.347.0", - "@aws-sdk/credential-provider-sso": "3.348.0", - "@aws-sdk/credential-provider-web-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz", + "integrity": "sha512-eJyapFKa4NrC9RfTgxlXnXfS9InG/QMEUPPVL+VhG7YS6nKqetC1digOYgivnEeu+XSKE0DJ7uZuXujN2Y7VAQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.370.0", + "@aws-sdk/credential-provider-process": "3.370.0", + "@aws-sdk/credential-provider-sso": "3.370.0", + "@aws-sdk/credential-provider-web-identity": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/credential-provider-imds": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -894,19 +857,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.348.0.tgz", - "integrity": "sha512-ngRWphm9e36i58KqVi7Z8WOub+k0cSl+JZaAmgfFm0+dsfBG5uheo598OeiwWV0DqlilvaQZFaMVQgG2SX/tHg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/credential-provider-ini": "3.348.0", - "@aws-sdk/credential-provider-process": "3.347.0", - "@aws-sdk/credential-provider-sso": "3.348.0", - "@aws-sdk/credential-provider-web-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz", + "integrity": "sha512-gkFiotBFKE4Fcn8CzQnMeab9TAR06FEAD02T4ZRYW1xGrBJOowmje9dKqdwQFHSPgnWAP+8HoTA8iwbhTLvjNA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.370.0", + "@aws-sdk/credential-provider-ini": "3.370.0", + "@aws-sdk/credential-provider-process": "3.370.0", + "@aws-sdk/credential-provider-sso": "3.370.0", + "@aws-sdk/credential-provider-web-identity": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/credential-provider-imds": "^1.0.1", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -914,13 +878,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.347.0.tgz", - "integrity": "sha512-yl1z4MsaBdXd4GQ2halIvYds23S67kElyOwz7g8kaQ4kHj+UoYWxz3JVW/DGusM6XmQ9/F67utBrUVA0uhQYyw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz", + "integrity": "sha512-0BKFFZmUO779Xdw3u7wWnoWhYA4zygxJbgGVSyjkOGBvdkbPSTTcdwT1KFkaQy2kOXYeZPl+usVVRXs+ph4ejg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -928,15 +893,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.348.0.tgz", - "integrity": "sha512-5cQao705376KgGkLv9xgkQ3T5H7KdNddWuyoH2wDcrHd1BA2Lnrell3Yyh7R6jQeV7uCQE/z0ugUOKhDqNKIqQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.348.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/token-providers": "3.348.0", - "@aws-sdk/types": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz", + "integrity": "sha512-PFroYm5hcPSfC/jkZnCI34QFL3I7WVKveVk6/F3fud/cnP8hp6YjA9NiTNbqdFSzsyoiN/+e5fZgNKih8vVPTA==", + "dependencies": { + "@aws-sdk/client-sso": "3.370.0", + "@aws-sdk/token-providers": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -944,110 +910,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.347.0.tgz", - "integrity": "sha512-DxoTlVK8lXjS1zVphtz/Ab+jkN/IZor9d6pP2GjJHNoAIIzXfRwwj5C8vr4eTayx/5VJ7GRP91J8GJ2cKly8Qw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-codec": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.347.0.tgz", - "integrity": "sha512-61q+SyspjsaQ4sdgjizMyRgVph2CiW4aAtfpoH69EJFJfTxTR/OqnZ9Jx/3YiYi0ksrvDenJddYodfWWJqD8/w==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.347.0.tgz", - "integrity": "sha512-9BLVTHWgpiTo/hl+k7qt7E9iYu43zVwJN+4TEwA9ZZB3p12068t1Hay6HgCcgJC3+LWMtw/OhvypV6vQAG4UBg==", - "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-config-resolver": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.347.0.tgz", - "integrity": "sha512-RcXQbNVq0PFmDqfn6+MnjCUWbbobcYVxpimaF6pMDav04o6Mcle+G2Hrefp5NlFr/lZbHW2eUKYsp1sXPaxVlQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.347.0.tgz", - "integrity": "sha512-pgQCWH0PkHjcHs04JE7FoGAD3Ww45ffV8Op0MSLUhg9OpGa6EDoO3EOpWi9l/TALtH4f0KRV35PVyUyHJ/wEkA==", - "dependencies": { - "@aws-sdk/eventstream-serde-universal": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-serde-universal": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.347.0.tgz", - "integrity": "sha512-4wWj6bz6lOyDIO/dCCjwaLwRz648xzQQnf89R29sLoEqvAPP5XOB7HL+uFaQ/f5tPNh49gL6huNFSVwDm62n4Q==", - "dependencies": { - "@aws-sdk/eventstream-codec": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.347.0.tgz", - "integrity": "sha512-sQ5P7ivY8//7wdxfA76LT1sF6V2Tyyz1qF6xXf9sihPN5Q1Y65c+SKpMzXyFSPqWZ82+SQQuDliYZouVyS6kQQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/querystring-builder": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-blob-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.347.0.tgz", - "integrity": "sha512-RxgstIldLsdJKN5UHUwSI9PMiatr0xKmKxS4+tnWZ1/OOg6wuWqqpDpWdNOVSJSpxpUaP6kRrvG5Yo5ZevoTXw==", - "dependencies": { - "@aws-sdk/chunked-blob-reader": "3.310.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.347.0.tgz", - "integrity": "sha512-96+ml/4EaUaVpzBdOLGOxdoXOjkPgkoJp/0i1fxOJEvl8wdAQSwc3IugVK9wZkCxy2DlENtgOe6DfIOhfffm/g==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz", + "integrity": "sha512-CFaBMLRudwhjv1sDzybNV93IaT85IwS+L8Wq6VRMa0mro1q9rrWsIZO811eF+k0NEPfgU1dLH+8Vc2qhw4SARQ==", "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1055,32 +924,11 @@ } }, "node_modules/@aws-sdk/hash-stream-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.347.0.tgz", - "integrity": "sha512-tOBfcvELyt1GVuAlQ4d0mvm3QxoSSmvhH15SWIubM9RP4JWytBVzaFAn/aC02DBAWyvp0acMZ5J+47mxrWJElg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.347.0.tgz", - "integrity": "sha512-8imQcwLwqZ/wTJXZqzXT9pGLIksTRckhGLZaXT60tiBOPKuerTsus2L59UstLs5LP8TKaVZKFFSsjRIn9dQdmQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.374.0.tgz", + "integrity": "sha512-Ta7YEFcgc+d4Rt7foV/fbgnXP8IgMAb+JVzZVYcHTwQf836+PdjGfKbamYkh8cM2xE47hzZqPe+BacCjePqH7g==", "dependencies": { + "@smithy/hash-stream-node": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1088,12 +936,13 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.348.0.tgz", - "integrity": "sha512-4kGsMNRmblf8f4faZ34APRyJM32Kkj0wuEua8mEbvA4YjJmYPDsBOWvthIJ4wpDRLRizNKWv1oMk2mEg2r2oeg==", + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.374.0.tgz", + "integrity": "sha512-62xI6CxhwbIrO8s/t+AfPzekhoR8DSkY1qpR5AWDN2mIRVcAidkrvLdPLEGSG0knyBr+CH6qNLBuLEBkqAfRlw==", "dependencies": { - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", + "@smithy/abort-controller": "^1.0.1", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/smithy-client": "^1.0.3", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -1103,57 +952,19 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/abort-controller": "^3.0.0", "@aws-sdk/client-s3": "^3.0.0" } }, - "node_modules/@aws-sdk/md5-js": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.347.0.tgz", - "integrity": "sha512-mChE+7DByTY9H4cQ6fnWp2x5jf8e6OZN+AdLp6WQ+W99z35zBeqBxVmgm8ziJwkMIrkSTv9j3Y7T9Ve3RIcSfg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.347.0.tgz", - "integrity": "sha512-i9n4ylkGmGvizVcTfN4L+oN10OCL2DKvyMa4cCAVE1TJrsnaE0g7IOOyJGUS8p5KJYQrKVR7kcsa2L1S0VeEcA==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz", + "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", "@aws-sdk/util-arn-parser": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.347.0.tgz", - "integrity": "sha512-i4qtWTDImMaDUtwKQPbaZpXsReiwiBomM1cWymCU4bhz81HL01oIxOxOBuiM+3NlDoCSPr3KI6txZSz/8cqXCQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.347.0.tgz", - "integrity": "sha512-unF0c6dMaUL1ffU+37Ugty43DgMnzPWXr/Jup/8GbK5fzzWT5NQq6dj9KHPubMbWeEjQbmczvhv25JuJdK8gNQ==", - "dependencies": { - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-config-provider": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1161,12 +972,13 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.347.0.tgz", - "integrity": "sha512-95M1unD1ENL0tx35dfyenSfx0QuXBSKtOi/qJja6LfX5771C5fm5ZTOrsrzPFJvRg/wj8pCOVWRZk+d5+jvfOQ==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz", + "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1174,16 +986,17 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.347.0.tgz", - "integrity": "sha512-Pda7VMAIyeHw9nMp29rxdFft3EF4KP/tz/vLB6bqVoBNbLujo5rxn3SGOgStgIz7fuMLQQfoWIsmvxUm+Fp+Dw==", + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.374.0.tgz", + "integrity": "sha512-NVXqMiYrEvpbAK0jTOy791dkJAz+JQkIX8lgl/BgnNXvXFDP2wOW5JT830LX27bMhs/yzt1nJSLvgnSCuhOKtg==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.370.0", + "@smithy/is-array-buffer": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1191,12 +1004,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.347.0.tgz", - "integrity": "sha512-kpKmR9OvMlnReqp5sKcJkozbj1wmlblbVSbnQAIkzeQj2xD5dnVR3Nn2ogQKxSmU1Fv7dEroBtrruJ1o3fY38A==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz", + "integrity": "sha512-CPXOm/TnOFC7KyXcJglICC7OiA7Kj6mT3ChvEijr56TFOueNHvJdV4aNIFEQy0vGHOWtY12qOWLNto/wYR1BAQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1204,11 +1018,12 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.347.0.tgz", - "integrity": "sha512-x5fcEV7q8fQ0OmUO+cLhN5iPqGoLWtC3+aKHIfRRb2BpOO1khyc1FKzsIAdeQz2hfktq4j+WsrmcPvFKv51pSg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz", + "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==", "dependencies": { - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1216,11 +1031,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.347.0.tgz", - "integrity": "sha512-NYC+Id5UCkVn+3P1t/YtmHt75uED06vwaKyxDy0UmB2K66PZLVtwWbLpVWrhbroaw1bvUHYcRyQ9NIfnVcXQjA==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz", + "integrity": "sha512-cQMq9SaZ/ORmTJPCT6VzMML7OxFdQzNkhMAgKpTDl+tdPWynlHF29E5xGoSzROnThHlQPCjogU0NZ8AxI0SWPA==", "dependencies": { - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1228,43 +1044,28 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.347.0.tgz", - "integrity": "sha512-qfnSvkFKCAMjMHR31NdsT0gv5Sq/ZHTUD4yQsSLpbVQ6iYAS834lrzXt41iyEHt57Y514uG7F/Xfvude3u4icQ==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz", + "integrity": "sha512-L7ZF/w0lAAY/GK1khT8VdoU0XB7nWHk51rl/ecAg64J70dHnMOAg8n+5FZ9fBu/xH1FwUlHOkwlodJOgzLJjtg==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.347.0.tgz", - "integrity": "sha512-CpdM+8dCSbX96agy4FCzOfzDmhNnGBM/pxrgIVLm5nkYTLuXp/d7ubpFEUHULr+4hCd5wakHotMt7yO29NFaVw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/service-error-classification": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.347.0.tgz", - "integrity": "sha512-TLr92+HMvamrhJJ0VDhA/PiUh4rTNQz38B9dB9ikohTaRgm+duP+mRiIv16tNPZPGl8v82Thn7Ogk2qPByNDtg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz", + "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1272,13 +1073,14 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.347.0.tgz", - "integrity": "sha512-TSBTQoOVe9cDm9am4NOov1YZxbQ3LPBl7Ex0jblDFgUXqE9kNU3Kx/yc8edOLcq+5AFrgqT0NFD7pwFlQPh3KQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.370.0.tgz", + "integrity": "sha512-jk61LjuxYe3gfcxuPsAPuKCycTGC7bhd8VHGBjlndLmYIG6Y6t668fvVXTKsz+CWQLTpAjhkS8ON2nJKiMqaQw==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "@smithy/util-hex-encoding": "^1.0.1", + "@smithy/util-utf8": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1286,24 +1088,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.347.0.tgz", - "integrity": "sha512-38LJ0bkIoVF3W97x6Jyyou72YV9Cfbml4OaDEdnrCOo0EssNZM5d7RhjMvQDwww7/3OBY/BzeOcZKfJlkYUXGw==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.347.0.tgz", - "integrity": "sha512-x5Foi7jRbVJXDu9bHfyCbhYDH5pKK+31MmsSJ3k8rY8keXLBxm2XEEg/AIoV9/TUF9EeVvZ7F1/RmMpJnWQsEg==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz", + "integrity": "sha512-ykbsoVy0AJtVbuhAlTAMcaz/tCE3pT8nAp0L7CQQxSoanRCvOux7au0KwMIQVhxgnYid4dWVF6d00SkqU5MXRA==", "dependencies": { - "@aws-sdk/types": "3.347.0", + "@aws-sdk/middleware-signing": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1311,15 +1102,16 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.347.0.tgz", - "integrity": "sha512-zVBF/4MGKnvhAE/J+oAL/VAehiyv+trs2dqSQXwHou9j8eA8Vm8HS2NdOwpkZQchIxTuwFlqSusDuPEdYFbvGw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/signature-v4": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz", + "integrity": "sha512-Dwr/RTCWOXdm394wCwICGT2VNOTMRe4IGPsBRJAsM24pm+EEqQzSS3Xu/U/zF4exuxqpMta4wec4QpSarPNTxA==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-middleware": "^1.0.1", "tslib": "^2.5.0" }, "engines": { @@ -1327,22 +1119,12 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.347.0.tgz", - "integrity": "sha512-467VEi2elPmUGcHAgTmzhguZ3lwTpwK+3s+pk312uZtVsS9rP1MAknYhpS3ZvssiqBUVPx8m29cLcC6Tx5nOJg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.347.0.tgz", - "integrity": "sha512-Izidg4rqtYMcKuvn2UzgEpPLSmyd8ub9+LQ2oIzG3mpIzCBITq7wp40jN1iNkMg+X6KEnX9vdMJIYZsPYMCYuQ==", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz", + "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==", "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { @@ -1350,563 +1132,251 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.347.0.tgz", - "integrity": "sha512-wJbGN3OE1/daVCrwk49whhIr9E0j1N4gWwN/wi4WuyYIA+5lMUfVp0aGIOvZR+878DxuFz2hQ4XcZVT4K2WvQw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz", + "integrity": "sha512-2+3SB6MtMAq1+gVXhw0Y3ONXuljorh6ijnxgTpv+uQnBW5jHCUiAS8WDYiDEm7i9euJPbvJfM8WUrSMDMU6Cog==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-endpoints": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.347.0.tgz", - "integrity": "sha512-faU93d3+5uTTUcotGgMXF+sJVFjrKh+ufW+CzYKT4yUHammyaIab/IbTPWy2hIolcEGtuPeVoxXw8TXbkh/tuw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.374.0.tgz", + "integrity": "sha512-WtQhTHsA/JGiDVZA3wRav1/HIBK22HkD+JX5ECZX85tC9dA/1n0ID8joHsjXWIo7aaMH2IPNbfgv/ECAzEtTig==", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@aws-sdk/util-format-url": "3.370.0", + "@smithy/middleware-endpoint": "^1.0.2", + "@smithy/protocol-http": "^1.1.0", + "@smithy/smithy-client": "^1.0.3", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.348.0.tgz", - "integrity": "sha512-wxdgc4tO5F6lN4wHr0CZ4TyIjDW/ORp4SJZdWYNs2L5J7+/SwqgJY2lxRlGi0i7Md+apAdE3sT3ukVQ/9pVfPg==", - "dependencies": { - "@aws-sdk/abort-controller": "3.347.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/querystring-builder": "3.347.0", - "@aws-sdk/types": "3.347.0", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz", + "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.347.0.tgz", - "integrity": "sha512-t3nJ8CYPLKAF2v9nIHOHOlF0CviQbTvbFc2L4a+A+EVd/rM4PzL3+3n8ZJsr0h7f6uD04+b5YRFgKgnaqLXlEg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", + "node_modules/@aws-sdk/token-providers": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz", + "integrity": "sha512-EyR2ZYr+lJeRiZU2/eLR+mlYU9RXLQvNyGFSAekJKgN13Rpq/h0syzXVFLP/RSod/oZenh/fhVZ2HwlZxuGBtQ==", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.370.0", + "@aws-sdk/types": "3.370.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/shared-ini-file-loader": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.347.0.tgz", - "integrity": "sha512-2YdBhc02Wvy03YjhGwUxF0UQgrPWEy8Iq75pfS42N+/0B/+eWX1aQgfjFxIpLg7YSjT5eKtYOQGlYd4MFTgj9g==", + "node_modules/@aws-sdk/types": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz", + "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==", "dependencies": { - "@aws-sdk/types": "3.347.0", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.347.0.tgz", - "integrity": "sha512-phtKTe6FXoV02MoPkIVV6owXI8Mwr5IBN3bPoxhcPvJG2AjEmnetSIrhb8kwc4oNhlwfZwH6Jo5ARW/VEWbZtg==", + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-uri-escape": "3.310.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.347.0.tgz", - "integrity": "sha512-5VXOhfZz78T2W7SuXf2avfjKglx1VZgZgp9Zfhrt/Rq+MTu2D+PZc5zmJHhYigD7x83jLSLogpuInQpFMA9LgA==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz", + "integrity": "sha512-5ltVAnM79nRlywwzZN5i8Jp4tk245OCGkKwwXbnDU+gq7zT3CIOsct1wNZvmpfZEPGt/bv7/NyRcjP+7XNsX/g==", "dependencies": { - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.348.0.tgz", - "integrity": "sha512-mldyh97l7RKG+wgK2cAgqO42WkAmXhU7rkFt6IKUO0OERGvLH3kjctAN9tL7esKzYmslnaGD7r+dnP67ElQWWg==", - "dependencies": { - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/signature-v4-multi-region": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-format-url": "3.347.0", + "node_modules/@aws-sdk/util-format-url": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.370.0.tgz", + "integrity": "sha512-6ik8UTT5hNlMnATrqWiQWnIZ0EFW8wVsRGyYUYw/geB3lQ+WAWflpJg+gZiJnc5EY4R0aOzRVm02W8EUeH8f5g==", + "dependencies": { + "@aws-sdk/types": "3.370.0", + "@smithy/querystring-builder": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.347.0.tgz", - "integrity": "sha512-xZ3MqSY81Oy2gh5g0fCtooAbahqh9VhsF8vcKjVX8+XPbGC8y+kej82+MsMg4gYL8gRFB9u4hgYbNgIS6JTAvg==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.347.0.tgz", - "integrity": "sha512-Xw+zAZQVLb+xMNHChXQ29tzzLqm3AEHsD8JJnlkeFjeMnWQtXdUfOARl5s8NzAppcKQNlVe2gPzjaKjoy2jz1Q==", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", "dependencies": { - "@aws-sdk/types": "3.347.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.347.0.tgz", - "integrity": "sha512-58Uq1do+VsTHYkP11dTK+DF53fguoNNJL9rHRWhzP+OcYv3/mBMLoS2WPz/x9FO5mBg4ESFsug0I6mXbd36tjw==", + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz", + "integrity": "sha512-028LxYZMQ0DANKhW+AKFQslkScZUeYlPmSphrCIXgdIItRZh6ZJHGzE7J/jDsEntZOrZJsjI4z0zZ5W2idj04w==", "dependencies": { - "@aws-sdk/eventstream-codec": "3.347.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.347.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/types": "3.370.0", + "@smithy/types": "^1.1.0", + "bowser": "^2.11.0", "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.347.0.tgz", - "integrity": "sha512-838h7pbRCVYWlTl8W+r5+Z5ld7uoBObgAn7/RB1MQ4JjlkfLdN7emiITG6ueVL+7gWZNZc/4dXR/FJSzCgrkxQ==", + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.370.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz", + "integrity": "sha512-33vxZUp8vxTT/DGYIR3PivQm07sSRGWI+4fCv63Rt7Q++fO24E0kQtmVAlikRY810I10poD6rwILVtITtFSzkg==", "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/signature-v4": "3.347.0", - "@aws-sdk/types": "3.347.0", + "@aws-sdk/types": "3.370.0", + "@smithy/node-config-provider": "^1.0.1", + "@smithy/types": "^1.1.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/signature-v4-crt": "^3.118.0" + "aws-crt": ">=1.0.0" }, "peerDependenciesMeta": { - "@aws-sdk/signature-v4-crt": { + "aws-crt": { "optional": true } } }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.347.0.tgz", - "integrity": "sha512-PaGTDsJLGK0sTjA6YdYQzILRlPRN3uVFyqeBUkfltXssvUzkm8z2t1lz2H4VyJLAhwnG5ZuZTNEV/2mcWrU7JQ==", + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", "dependencies": { - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/types": "3.347.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.348.0.tgz", - "integrity": "sha512-nTjoJkUsJUrJTZuqaeMD9PW2//Rdg2HgfDjiyC4jmAXtayWYCi11mqauurMaUHJ3p5qJ8f5xzxm6vBTbrftPag==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.348.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "engines": { - "node": ">=14.0.0" + "node": ">=0.1.90" } }, - "node_modules/@aws-sdk/types": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.347.0.tgz", - "integrity": "sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.347.0.tgz", - "integrity": "sha512-lhrnVjxdV7hl+yCnJfDZOaVLSqKjxN20MIOiijRiqaWGLGEAiSqBreMhL89X1WKCifxAs4zZf9YB9SbdziRpAA==", - "dependencies": { - "@aws-sdk/querystring-parser": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", - "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.347.0.tgz", - "integrity": "sha512-+JHFA4reWnW/nMWwrLKqL2Lm/biw/Dzi/Ix54DAkRZ08C462jMKVnUlzAI+TfxQE3YLm99EIa0G7jiEA+p81Qw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.347.0.tgz", - "integrity": "sha512-A8BzIVhAAZE5WEukoAN2kYebzTc99ZgncbwOmgCCbvdaYlk5tzguR/s+uoT4G0JgQGol/4hAMuJEl7elNgU6RQ==", - "dependencies": { - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.347.0.tgz", - "integrity": "sha512-/WUkirizeNAqwVj0zkcrqdQ9pUm1HY5kU+qy7xTR0OebkuJauglkmSTMD+56L1JPunWqHhlwCMVRaz5eaJdSEQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-format-url": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.347.0.tgz", - "integrity": "sha512-y9UUEmWu0IBoMZ25NVjCCOwvAEa+xJ54WfiCsgwKeFyTHWYY2wZqJfARJtme/ezqrRa8neOcBJSVxjfJJegW+w==", - "dependencies": { - "@aws-sdk/querystring-builder": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.347.0.tgz", - "integrity": "sha512-8owqUA3ePufeYTUvlzdJ7Z0miLorTwx+rNol5lourGQZ9JXsVMo23+yGA7nOlFuXSGkoKpMOtn6S0BT2bcfeiw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.347.0.tgz", - "integrity": "sha512-NxnQA0/FHFxriQAeEgBonA43Q9/VPFQa8cfJDuT2A1YZruMasgjcltoZszi1dvoIRWSZsFTW42eY2gdOd0nffQ==", - "dependencies": { - "@aws-sdk/service-error-classification": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-stream-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.347.0.tgz", - "integrity": "sha512-pIbmzIJfyX26qG622uIESOmJSMGuBkhmNU7I98bzhYCet5ctC0ow9L5FZw9ljOE46P/HkEcsOhh+qTHyCXlCEQ==", - "dependencies": { - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-stream-node": { - "version": "3.348.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.348.0.tgz", - "integrity": "sha512-MFXyMUWA2oD0smBZf+sdnuyxLw8nCqyMEgYbos+6grvF1Szxn5+zbYTZrEBYiICqD1xJRLbWTzFLJU7oYm6pUg==", - "dependencies": { - "@aws-sdk/node-http-handler": "3.348.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.347.0.tgz", - "integrity": "sha512-ydxtsKVtQefgbk1Dku1q7pMkjDYThauG9/8mQkZUAVik55OUZw71Zzr3XO8J8RKvQG8lmhPXuAQ0FKAyycc0RA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.347.0.tgz", - "integrity": "sha512-6X0b9qGsbD1s80PmbaB6v1/ZtLfSx6fjRX8caM7NN0y/ObuLoX8LhYnW6WlB2f1+xb4EjaCNgpP/zCf98MXosw==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.347.0.tgz", - "integrity": "sha512-3ze/0PkwkzUzLncukx93tZgGL0JX9NaP8DxTi6WzflnL/TEul5Z63PCruRNK0om17iZYAWKrf8q2mFoHYb4grA==", - "dependencies": { - "@aws-sdk/abort-controller": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", - "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -1924,9 +1394,9 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", - "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2049,9 +1519,9 @@ } }, "node_modules/@hapi/accept": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.1.tgz", - "integrity": "sha512-aLkYj7zzgC3CSlEVOs84eBOEE3i9xZK2tdQEP+TOj2OFzMWCi9zjkRet82V3GGjecE//zFrCLKIykuaE0uM4bg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.2.tgz", + "integrity": "sha512-xaTLf29Zeph/B32hekmgxLFsEPuX1xQYyZu0gJ4ZCHKU6nXmBRXfBymtWNEK0souOJcX2XHWUaZU6JzccuuMpg==", "dev": true, "dependencies": { "@hapi/boom": "^10.0.1", @@ -2161,9 +1631,9 @@ "dev": true }, "node_modules/@hapi/h2o2": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@hapi/h2o2/-/h2o2-10.0.1.tgz", - "integrity": "sha512-dcmVAzSn8jmjuTPejP/6VKbTHYh80mFUUuIPSyaRQBaQG2zXac11W5MNs0Xkk7TvJFPp8cB0LWQVZYpofpMN4g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@hapi/h2o2/-/h2o2-10.0.2.tgz", + "integrity": "sha512-CZtYJJKGpVpTC1rHroj8Uhq38AjAKG3JsVDekhJXWj7LCmLhilu8cYceRuK0aGMeR85WALRsQo/HvtT0FINJpQ==", "dev": true, "dependencies": { "@hapi/boom": "^10.0.1", @@ -2478,6 +1948,27 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, + "node_modules/@ljharb/resumer": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz", + "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.9" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz", + "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@mapbox/mock-aws-sdk-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@mapbox/mock-aws-sdk-js/-/mock-aws-sdk-js-1.0.1.tgz", @@ -2760,9 +2251,9 @@ } }, "node_modules/@serverless/dashboard-plugin/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2843,9 +2334,9 @@ } }, "node_modules/@serverless/utils": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.11.1.tgz", - "integrity": "sha512-HIPGwxUOtmJWTsXamJ9P3IYmvpI548c6moY+n4672a6HHo6xK2sShrQVtlJUkosMqvki30LDceydsTtHruVX3w==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.13.1.tgz", + "integrity": "sha512-yokWzlsIaAd3TWzNgIDz6l8HZmtYZs9caaLuheZ0IiZ/bDWSCLBWn84HKkdWZOmFnYxejyPNJEOwE59mtSR3Ow==", "dev": true, "dependencies": { "archive-type": "^4.0.0", @@ -2868,11 +2359,11 @@ "lodash": "^4.17.21", "log": "^6.3.1", "log-node": "^8.0.3", - "make-dir": "^3.1.0", + "make-dir": "^4.0.0", "memoizee": "^0.4.15", "ms": "^2.1.3", "ncjsm": "^4.3.2", - "node-fetch": "^2.6.9", + "node-fetch": "^2.6.11", "open": "^8.4.2", "p-event": "^4.2.0", "supports-color": "^8.1.1", @@ -2898,103 +2389,671 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/@serverless/utils/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "node_modules/@serverless/utils/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "dependencies": { + "samsam": "1.3.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true + }, + "node_modules/@smithy/abort-controller": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.0.2.tgz", + "integrity": "sha512-tb2h0b+JvMee+eAxTmhnyqyNk51UXIK949HnE14lFeezKsVJTB30maan+CO2IMwnig2wVYQH84B5qk6ylmKCuA==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-1.0.2.tgz", + "integrity": "sha512-B2x76NIPqC883lvnISprpO2eDlI41SznmoDTehoPbVpVcI2A7Nwg3nYA+p8XTpFF06cIFgjmOs9M0il2HquFQQ==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-1.0.2.tgz", + "integrity": "sha512-ychahynhO3kMhw/nWX3AAVaMeGezsH6ugc6UZ/P9DABgYcPkDMOmtZOOe3yGI9OYuLB/ZG4y+Gd0eHv5ClEdNw==", + "dependencies": { + "@smithy/util-base64": "^1.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.0.2.tgz", + "integrity": "sha512-8Bk7CgnVKg1dn5TgnjwPz2ebhxeR7CjGs5yhVYH3S8x0q8yPZZVWwpRIglwXaf5AZBzJlNO1lh+lUhMf2e73zQ==", + "dependencies": { + "@smithy/types": "^1.1.1", + "@smithy/util-config-provider": "^1.0.2", + "@smithy/util-middleware": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.2.tgz", + "integrity": "sha512-fLjCya+JOu2gPJpCiwSUyoLvT8JdNJmOaTOkKYBZoGf7CzqR6lluSyI+eboZnl/V0xqcfcqBG4tgqCISmWS3/w==", + "dependencies": { + "@smithy/node-config-provider": "^1.0.2", + "@smithy/property-provider": "^1.0.2", + "@smithy/types": "^1.1.1", + "@smithy/url-parser": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.0.2.tgz", + "integrity": "sha512-eW/XPiLauR1VAgHKxhVvgvHzLROUgTtqat2lgljztbH8uIYWugv7Nz+SgCavB+hWRazv2iYgqrSy74GvxXq/rg==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^1.1.1", + "@smithy/util-hex-encoding": "^1.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-1.0.2.tgz", + "integrity": "sha512-8bDImzBewLQrIF6hqxMz3eoYwEus2E5JrEwKnhpkSFkkoj8fDSKiLeP/26xfcaoVJgZXB8M1c6jSEZiY3cUMsw==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-1.0.2.tgz", + "integrity": "sha512-SeiJ5pfrXzkGP4WCt9V3Pimfr3OM85Nyh9u/V4J6E0O2dLOYuqvSuKdVnktV0Tcmuu1ZYbt78Th0vfetnSEcdQ==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-1.0.2.tgz", + "integrity": "sha512-jqSfi7bpOBHqgd5OgUtCX0wAVhPqxlVdqcj2c4gHaRRXcbpCmK0DRDg7P+Df0h4JJVvTqI6dy2c0YhHk5ehPCw==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-1.0.2.tgz", + "integrity": "sha512-cQ9bT0j0x49cp8TQ1yZSnn4+9qU0WQSTkoucl3jKRoTZMzNYHg62LQao6HTQ3Jgd77nAXo00c7hqUEjHXwNA+A==", + "dependencies": { + "@smithy/eventstream-codec": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.2.tgz", + "integrity": "sha512-kynyofLf62LvR8yYphPPdyHb8fWG3LepFinM/vWUTG2Q1pVpmPCM530ppagp3+q2p+7Ox0UvSqldbKqV/d1BpA==", + "dependencies": { + "@smithy/protocol-http": "^1.1.1", + "@smithy/querystring-builder": "^1.0.2", + "@smithy/types": "^1.1.1", + "@smithy/util-base64": "^1.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-1.0.2.tgz", + "integrity": "sha512-6SFzZ18aZNplDTvmbUhaxB83TVPGhe0FEAQInYQIj2lQd5Qraw2/KEE8HIfW4UxqxcoTSb0aYS0PqdUhI+dttQ==", + "dependencies": { + "@smithy/chunked-blob-reader": "^1.0.2", + "@smithy/chunked-blob-reader-native": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.0.2.tgz", + "integrity": "sha512-K6PKhcUNrJXtcesyzhIvNlU7drfIU7u+EMQuGmPw6RQDAg/ufUcfKHz4EcUhFAodUmN+rrejhRG9U6wxjeBOQA==", + "dependencies": { + "@smithy/types": "^1.1.1", + "@smithy/util-buffer-from": "^1.0.2", + "@smithy/util-utf8": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-1.0.2.tgz", + "integrity": "sha512-XH3h6f+pChVFzYVWJa/TGME/NWk/r+AuXSBIhLvQjYcZbeoKy1LhVH2yVFVouN9EASkgLj0KvOVGjMS3c5pG6Q==", + "dependencies": { + "@smithy/types": "^1.1.1", + "@smithy/util-utf8": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-1.0.2.tgz", + "integrity": "sha512-B1Y3Tsa6dfC+Vvb+BJMhTHOfFieeYzY9jWQSTR1vMwKkxsymD0OIAnEw8rD/RiDj/4E4RPGFdx9Mdgnyd6Bv5Q==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.0.2.tgz", + "integrity": "sha512-pkyBnsBRpe+c/6ASavqIMRBdRtZNJEVJOEzhpxZ9JoAXiZYbkfaSMRA/O1dUxGdJ653GHONunnZ4xMo/LJ7utQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-1.0.2.tgz", + "integrity": "sha512-0yUgIvIUt63Rb5+ErZTraQguc4Vu3Fw7NKJL0ozLnj1hcYDrt45pfQjUMztKBE7ve32vCnuSOA4LCAe3fudHZA==", + "dependencies": { + "@smithy/types": "^1.1.1", + "@smithy/util-utf8": "^1.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-1.0.2.tgz", + "integrity": "sha512-pa1/SgGIrSmnEr2c9Apw7CdU4l/HW0fK3+LKFCPDYJrzM0JdYpqjQzgxi31P00eAkL0EFBccpus/p1n2GF9urw==", + "dependencies": { + "@smithy/protocol-http": "^1.1.1", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.3.tgz", + "integrity": "sha512-GsWvTXMFjSgl617PCE2km//kIjjtvMRrR2GAuRDIS9sHiLwmkS46VWaVYy+XE7ubEsEtzZ5yK2e8TKDR6Qr5Lw==", + "dependencies": { + "@smithy/middleware-serde": "^1.0.2", + "@smithy/types": "^1.1.1", + "@smithy/url-parser": "^1.0.2", + "@smithy/util-middleware": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-1.0.4.tgz", + "integrity": "sha512-G7uRXGFL8c3F7APnoIMTtNAHH8vT4F2qVnAWGAZaervjupaUQuRRHYBLYubK0dWzOZz86BtAXKieJ5p+Ni2Xpg==", + "dependencies": { + "@smithy/protocol-http": "^1.1.1", + "@smithy/service-error-classification": "^1.0.3", + "@smithy/types": "^1.1.1", + "@smithy/util-middleware": "^1.0.2", + "@smithy/util-retry": "^1.0.4", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-1.0.2.tgz", + "integrity": "sha512-T4PcdMZF4xme6koUNfjmSZ1MLi7eoFeYCtodQNQpBNsS77TuJt1A6kt5kP/qxrTvfZHyFlj0AubACoaUqgzPeg==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.0.2.tgz", + "integrity": "sha512-H7/uAQEcmO+eDqweEFMJ5YrIpsBwmrXSP6HIIbtxKJSQpAcMGY7KrR2FZgZBi1FMnSUOh+rQrbOyj5HQmSeUBA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.0.2.tgz", + "integrity": "sha512-HU7afWpTToU0wL6KseGDR2zojeyjECQfr8LpjAIeHCYIW7r360ABFf4EaplaJRMVoC3hD9FeltgI3/NtShOqCg==", + "dependencies": { + "@smithy/property-provider": "^1.0.2", + "@smithy/shared-ini-file-loader": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.0.3.tgz", + "integrity": "sha512-PcPUSzTbIb60VCJCiH0PU0E6bwIekttsIEf5Aoo/M0oTfiqsxHTn0Rcij6QoH6qJy6piGKXzLSegspXg5+Kq6g==", + "dependencies": { + "@smithy/abort-controller": "^1.0.2", + "@smithy/protocol-http": "^1.1.1", + "@smithy/querystring-builder": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.0.2.tgz", + "integrity": "sha512-pXDPyzKX8opzt38B205kDgaxda6LHcTfPvTYQZnwP6BAPp1o9puiCPjeUtkKck7Z6IbpXCPUmUQnzkUzWTA42Q==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.1.1.tgz", + "integrity": "sha512-mFLFa2sSvlUxm55U7B4YCIsJJIMkA6lHxwwqOaBkral1qxFz97rGffP/mmd4JDuin1EnygiO5eNJGgudiUgmDQ==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.0.2.tgz", + "integrity": "sha512-6P/xANWrtJhMzTPUR87AbXwSBuz1SDHIfL44TFd/GT3hj6rA+IEv7rftEpPjayUiWRocaNnrCPLvmP31mobOyA==", + "dependencies": { + "@smithy/types": "^1.1.1", + "@smithy/util-uri-escape": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-1.0.2.tgz", + "integrity": "sha512-IWxwxjn+KHWRRRB+K2Ngl+plTwo2WSgc2w+DvLy0DQZJh9UGOpw40d6q97/63GBlXIt4TEt5NbcFrO30CKlrsA==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.0.3.tgz", + "integrity": "sha512-2eglIYqrtcUnuI71yweu7rSfCgt6kVvRVf0C72VUqrd0LrV1M0BM0eYN+nitp2CHPSdmMI96pi+dU9U/UqAMSA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.2.tgz", + "integrity": "sha512-bdQj95VN+lCXki+P3EsDyrkpeLn8xDYiOISBGnUG/AGPYJXN8dmp4EhRRR7XOoLoSs8anZHR4UcGEOzFv2jwGw==", + "dependencies": { + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.0.2.tgz", + "integrity": "sha512-rpKUhmCuPmpV5dloUkOb9w1oBnJatvKQEjIHGmkjRGZnC3437MTdzWej9TxkagcZ8NRRJavYnEUixzxM1amFig==", + "dependencies": { + "@smithy/eventstream-codec": "^1.0.2", + "@smithy/is-array-buffer": "^1.0.2", + "@smithy/types": "^1.1.1", + "@smithy/util-hex-encoding": "^1.0.2", + "@smithy/util-middleware": "^1.0.2", + "@smithy/util-uri-escape": "^1.0.2", + "@smithy/util-utf8": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.0.4.tgz", + "integrity": "sha512-gpo0Xl5Nyp9sgymEfpt7oa9P2q/GlM3VmQIdm+FeH0QEdYOQx3OtvwVmBYAMv2FIPWxkMZlsPYRTnEiBTK5TYg==", + "dependencies": { + "@smithy/middleware-stack": "^1.0.2", + "@smithy/types": "^1.1.1", + "@smithy/util-stream": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.1.1.tgz", + "integrity": "sha512-tMpkreknl2gRrniHeBtdgQwaOlo39df8RxSrwsHVNIGXULy5XP6KqgScUw2m12D15wnJCKWxVhCX+wbrBW/y7g==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-1.0.2.tgz", + "integrity": "sha512-0JRsDMQe53F6EHRWksdcavKDRjyqp8vrjakg8EcCUOa7PaFRRB1SO/xGZdzSlW1RSTWQDEksFMTCEcVEKmAoqA==", + "dependencies": { + "@smithy/querystring-parser": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.0.2.tgz", + "integrity": "sha512-BCm15WILJ3SL93nusoxvJGMVfAMWHZhdeDZPtpAaskozuexd0eF6szdz4kbXaKp38bFCSenA6bkUHqaE3KK0dA==", + "dependencies": { + "@smithy/util-buffer-from": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.2.tgz", + "integrity": "sha512-Xh8L06H2anF5BHjSYTg8hx+Itcbf4SQZnVMl4PIkCOsKtneMJoGjPRLy17lEzfoh/GOaa0QxgCP6lRMQWzNl4w==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-1.0.2.tgz", + "integrity": "sha512-nXHbZsUtvZeyfL4Ceds9nmy2Uh2AhWXohG4vWHyjSdmT8cXZlJdmJgnH6SJKDjyUecbu+BpKeVvSrA4cWPSOPA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.0.2.tgz", + "integrity": "sha512-lHAYIyrBO9RANrPvccnPjU03MJnWZ66wWuC5GjWWQVfsmPwU6m00aakZkzHdUT6tGCkGacXSgArP5wgTgA+oCw==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/is-array-buffer": "^1.0.2", + "tslib": "^2.5.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.0.2.tgz", + "integrity": "sha512-HOdmDm+3HUbuYPBABLLHtn8ittuRyy+BSjKOA169H+EMc+IozipvXDydf+gKBRAxUa4dtKQkLraypwppzi+PRw==", + "dependencies": { + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.2.tgz", + "integrity": "sha512-J1u2PO235zxY7dg0+ZqaG96tFg4ehJZ7isGK1pCBEA072qxNPwIpDzUVGnLJkHZvjWEGA8rxIauDtXfB0qxeAg==", + "dependencies": { + "@smithy/property-provider": "^1.0.2", + "@smithy/types": "^1.1.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=10" + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.2.tgz", + "integrity": "sha512-9/BN63rlIsFStvI+AvljMh873Xw6bbI6b19b+PVYXyycQ2DDQImWcjnzRlHW7eP65CCUNGQ6otDLNdBQCgMXqg==", + "dependencies": { + "@smithy/config-resolver": "^1.0.2", + "@smithy/credential-provider-imds": "^1.0.2", + "@smithy/node-config-provider": "^1.0.2", + "@smithy/property-provider": "^1.0.2", + "@smithy/types": "^1.1.1", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, + "node_modules/@smithy/util-hex-encoding": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.2.tgz", + "integrity": "sha512-Bxydb5rMJorMV6AuDDMOxro3BMDdIwtbQKHpwvQFASkmr52BnpDsWlxgpJi8Iq7nk1Bt4E40oE1Isy/7ubHGzg==", "dependencies": { - "type-detect": "4.0.8" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", - "dev": true, + "node_modules/@smithy/util-middleware": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.0.2.tgz", + "integrity": "sha512-vtXK7GOR2BoseCX8NCGe9SaiZrm9M2lm/RVexFGyPuafTtry9Vyv7hq/vw8ifd/G/pSJ+msByfJVb1642oQHKw==", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sinonjs/formatio": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", - "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", - "dev": true, + "node_modules/@smithy/util-retry": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.0.4.tgz", + "integrity": "sha512-RnZPVFvRoqdj2EbroDo3OsnnQU8eQ4AlnZTOGusbYKybH3269CFdrZfZJloe60AQjX7di3J6t/79PjwCLO5Khw==", "dependencies": { - "samsam": "1.3.0" + "@smithy/service-error-classification": "^1.0.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "node_modules/@smithy/util-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.0.2.tgz", + "integrity": "sha512-qyN2M9QFMTz4UCHi6GnBfLOGYKxQZD01Ga6nzaXFFC51HP/QmArU72e4kY50Z/EtW8binPxspP2TAsGbwy9l3A==", + "dependencies": { + "@smithy/fetch-http-handler": "^1.0.2", + "@smithy/node-http-handler": "^1.0.3", + "@smithy/types": "^1.1.1", + "@smithy/util-base64": "^1.0.2", + "@smithy/util-buffer-from": "^1.0.2", + "@smithy/util-hex-encoding": "^1.0.2", + "@smithy/util-utf8": "^1.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, + "node_modules/@smithy/util-uri-escape": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.0.2.tgz", + "integrity": "sha512-k8C0BFNS9HpBMHSgUDnWb1JlCQcFG+PPlVBq9keP4Nfwv6a9Q0yAfASWqUCtzjuMj1hXeLhn/5ADP6JxnID1Pg==", "dependencies": { - "type-detect": "4.0.8" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, - "node_modules/@smithy/protocol-http": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", - "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", + "node_modules/@smithy/util-utf8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.0.2.tgz", + "integrity": "sha512-V4cyjKfJlARui0dMBfWJMQAmJzoW77i4N3EjkH/bwnE2Ngbl4tqD2Y0C/xzpzY/J1BdxeCKxAebVFk8aFCaSCw==", "dependencies": { - "@smithy/types": "^1.0.0", + "@smithy/util-buffer-from": "^1.0.2", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@smithy/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", - "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", + "node_modules/@smithy/util-waiter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-1.0.2.tgz", + "integrity": "sha512-+jq4/Vd9ejPzR45qwYSePyjQbqYP9QqtyZYsFVyfzRnbGGC0AjswOh7txcxroafuEBExK4qE+L/QZA8wWXsJYw==", "dependencies": { + "@smithy/abort-controller": "^1.0.2", + "@smithy/types": "^1.1.1", "tslib": "^2.5.0" }, "engines": { @@ -3028,9 +3087,9 @@ } }, "node_modules/@types/aws-lambda": { - "version": "8.10.116", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.116.tgz", - "integrity": "sha512-LSvIyxYCsIMOiBnb5D6HTf7JXLCh3KPiZWL6Pkn1MqV/v5OoP42GDqn5H4wHKGGKN0mJB+4y1r0oat1dLBAkuA==" + "version": "8.10.119", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", + "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==" }, "node_modules/@types/body-parser": { "version": "1.19.2", @@ -3093,6 +3152,11 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -3119,9 +3183,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -3149,10 +3213,11 @@ "dev": true }, "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -3202,9 +3267,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, @@ -3762,6 +3827,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -3808,9 +3893,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1393.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1393.0.tgz", - "integrity": "sha512-t0xDaLwoptvBbMySbrqbnb7AAbATpg0DTeiGja60VBjKEVoR1ierOcQwR1uBjnFTzy+mHXtTVYc/mbJHswm2qg==", + "version": "2.1419.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1419.0.tgz", + "integrity": "sha512-JcD8gb8I5fH/TGdObG8UYyyXfnqVYk50wx9TGao6G/xBYT3YoYeQXj020W568YQpO+dBKRuR4U2LRYdKBNmQ/g==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -3960,9 +4045,9 @@ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/boxen": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.0.tgz", - "integrity": "sha512-ScG8CDo8dj7McqCZ5hz4dIBp20xj4unQ2lXIDa7ff6RcZElCpuNzutdwzKVvRikfNjm7CFAlR3HJHcoHkDOExQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", "dev": true, "dependencies": { "ansi-align": "^3.0.1", @@ -4006,9 +4091,9 @@ } }, "node_modules/boxen/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4107,9 +4192,9 @@ } }, "node_modules/bson": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", - "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", "engines": { "node": ">=14.20.1" } @@ -4337,9 +4422,9 @@ } }, "node_modules/child-process-ext/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -4742,11 +4827,11 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "node-fetch": "^2.6.11" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -4818,9 +4903,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", "dev": true }, "node_modules/debug": { @@ -5071,15 +5156,15 @@ } }, "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -5248,9 +5333,9 @@ } }, "node_modules/dotenv": { - "version": "16.1.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", - "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "dev": true, "engines": { "node": ">=12" @@ -5336,18 +5421,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -5367,14 +5453,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -5517,15 +5607,15 @@ } }, "node_modules/eslint": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", - "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.42.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -5537,7 +5627,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "espree": "^9.6.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -5547,7 +5637,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -5557,9 +5646,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -5612,9 +5700,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -5697,12 +5785,12 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -6017,9 +6105,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6061,9 +6149,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-xml-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", - "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -6702,9 +6790,9 @@ } }, "node_modules/graphql": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", + "version": "16.7.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.7.1.tgz", + "integrity": "sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -7225,11 +7313,6 @@ "node": ">=8" } }, - "node_modules/is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" - }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -7382,16 +7465,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -7796,9 +7875,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -8076,20 +8155,35 @@ } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8304,19 +8398,19 @@ } }, "node_modules/mongo-cursor-pagination/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/mongodb": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.5.0.tgz", - "integrity": "sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", + "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", "dependencies": { - "bson": "^5.3.0", + "bson": "^5.4.0", "mongodb-connection-string-url": "^2.6.0", "socks": "^2.7.1" }, @@ -8328,6 +8422,8 @@ }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.201.0", + "@mongodb-js/zstd": "^1.1.0", + "kerberos": "^2.0.1", "mongodb-client-encryption": ">=2.3.0 <3", "snappy": "^7.2.2" }, @@ -8335,6 +8431,12 @@ "@aws-sdk/credential-providers": { "optional": true }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, "mongodb-client-encryption": { "optional": true }, @@ -8352,26 +8454,21 @@ "whatwg-url": "^11.0.0" } }, - "node_modules/mongodb-language-model": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mongodb-language-model/-/mongodb-language-model-1.7.1.tgz", - "integrity": "sha512-qkYggIFWxpC2PiG+lKRjdZ069Q+g0YQ8wYFJRnEesudFA1+0TNFqtrBpshBsvmaT41fwdhS4/1/4ey8Bj4qf7g==" - }, "node_modules/mongodb-query-parser": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.5.0.tgz", - "integrity": "sha512-RsviXsRkHp/MJVg5oPVJ77QFqPyQ3bO9K5mmE+ChgWbSKlnMeG7MWl1Rshwkq9kQF0PIBnxgNAaeGeHe8AQiBg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-3.1.2.tgz", + "integrity": "sha512-yyyZoXF8JxnvDDMdFWzf2ZRNovoPMm3alXtymV9762PFIz1amqLicwz0L/zih9Ese8I1/NMqHE1rm+HPvDYvjA==", "dependencies": { - "debug": "^4.1.1", + "debug": "^4.2.0", "ejson-shell-parser": "^1.2.1", - "is-json": "^2.0.1", "javascript-stringify": "^2.0.1", - "lodash": "^4.17.15", - "lru-cache": "^5.1.1", - "mongodb-language-model": "^1.6.1" + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 16.17.0" }, "peerDependencies": { - "bson": "^4.6.1 || ^5" + "bson": "^5" } }, "node_modules/mongodb-query-parser/node_modules/debug": { @@ -8390,32 +8487,19 @@ } } }, - "node_modules/mongodb-query-parser/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/mongodb-query-parser/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mongodb-query-parser/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, "node_modules/mongoose": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.2.2.tgz", - "integrity": "sha512-JPBMTF+oYfLGVFWbHSZ/H+f1GajNanGLYH6c/P0nE3bNJfwGhX573vieGR0kNlNhj3cZk8WCPrnVsTNeUmFUag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.0.tgz", + "integrity": "sha512-oHE1eqodfKzugXRlQxpo+msIea7jPcRoayDuEMr50+bYwM/juA5f+1stjkWlXcg6vo1PdJFVA6DGaKOPLuG5mA==", "dependencies": { - "bson": "^5.3.0", + "bson": "^5.4.0", "kareem": "2.5.1", - "mongodb": "5.5.0", + "mongodb": "5.7.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -8606,9 +8690,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -8697,9 +8781,9 @@ } }, "node_modules/npm-registry-utilities/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -8880,17 +8964,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -9020,9 +9104,9 @@ } }, "node_modules/p-memoize/node_modules/type-fest": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.11.1.tgz", - "integrity": "sha512-aCuRNRERRVh33lgQaJRlUxZqzfhzwTrsE98Mc3o3VXqmiaQdHacgUtJ0esp+7MvZ92qhtzKPeusaX6vIEcoreA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, "engines": { "node": ">=14.16" @@ -9154,9 +9238,9 @@ } }, "node_modules/path-loader/node_modules/formidable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", - "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", "dev": true, "dependencies": { "dezalgo": "^1.0.4", @@ -9187,9 +9271,9 @@ "dev": true }, "node_modules/path-loader/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -9655,15 +9739,6 @@ "node": ">=8" } }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", - "dev": true, - "dependencies": { - "through": "~2.3.4" - } - }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -9769,6 +9844,24 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9852,9 +9945,9 @@ "dev": true }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -9903,9 +9996,9 @@ } }, "node_modules/serverless": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.32.2.tgz", - "integrity": "sha512-OIh0dF8siYI2coGFVXg1iKvkjZXO1g7LXXe2asZe0HDEXENlgLA47zMerz1l3iFWVHsFN0901c+eW8av2W/Uaw==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.33.0.tgz", + "integrity": "sha512-qmG0RMelsWmnS5Smxoy0CbjpecgnJlM89wzSIgJqfkGlmOo2nJdd8y0/E6KlaTsaozlPKkjUBDzis2nF8VNO2g==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -9915,7 +10008,7 @@ "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "archiver": "^5.3.1", - "aws-sdk": "^2.1389.0", + "aws-sdk": "^2.1404.0", "bluebird": "^3.7.2", "cachedir": "^2.3.0", "chalk": "^4.1.2", @@ -9923,9 +10016,9 @@ "ci-info": "^3.8.0", "cli-progress-footer": "^2.3.2", "d": "^1.0.1", - "dayjs": "^1.11.7", + "dayjs": "^1.11.8", "decompress": "^4.2.1", - "dotenv": "^16.1.3", + "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", "essentials": "^1.2.0", "ext": "^1.7.0", @@ -9953,7 +10046,7 @@ "process-utils": "^4.0.0", "promise-queue": "^2.2.5", "require-from-string": "^2.0.2", - "semver": "^7.5.1", + "semver": "^7.5.3", "signal-exit": "^3.0.7", "stream-buffers": "^3.0.2", "strip-ansi": "^6.0.1", @@ -10029,9 +10122,9 @@ } }, "node_modules/serverless-offline/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -10116,9 +10209,9 @@ "dev": true }, "node_modules/serverless/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -10223,9 +10316,9 @@ "dev": true }, "node_modules/simple-git": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.0.tgz", - "integrity": "sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA==", + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz", + "integrity": "sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==", "dev": true, "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -10261,13 +10354,13 @@ "dev": true }, "node_modules/sinon": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.1.0.tgz", - "integrity": "sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", + "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.2.0", + "@sinonjs/fake-timers": "^10.3.0", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.4", @@ -10653,9 +10746,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/superagent/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10691,14 +10784,16 @@ } }, "node_modules/tape": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.3.tgz", - "integrity": "sha512-cUDDGSbyoSIpdUAqbqLI/r7i/S4BHuCB9M5j7E/LrLs/x/i4zeAJ798aqo+FGo+kr9seBZwr8AkZW6rjceyAMQ==", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.6.tgz", + "integrity": "sha512-rGp2cZ3rfZ6QfTBm6yvohf8aXmDqPyzMKZwTMV12w4i+b/N2Adwlg8PlW8jLqWzlJUZhglyYaLOSrMt/ZlZkAA==", "dev": true, "dependencies": { + "@ljharb/resumer": "^0.0.1", + "@ljharb/through": "^2.3.9", "array.prototype.every": "^1.1.4", "call-bind": "^1.0.2", - "deep-equal": "^2.2.0", + "deep-equal": "^2.2.2", "defined": "^1.0.1", "dotignore": "^0.1.2", "for-each": "^0.3.3", @@ -10708,15 +10803,13 @@ "has-dynamic-import": "^2.0.1", "inherits": "^2.0.4", "is-regex": "^1.1.4", - "minimist": "^1.2.7", + "minimist": "^1.2.8", "object-inspect": "^1.12.3", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "resolve": "^2.0.0-next.4", - "resumer": "^0.0.0", - "string.prototype.trim": "^1.2.7", - "through": "^2.3.8" + "string.prototype.trim": "^1.2.7" }, "bin": { "tape": "bin/tape" @@ -10920,9 +11013,9 @@ } }, "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" }, "node_modules/type": { "version": "2.7.2", @@ -10975,6 +11068,57 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -11281,17 +11425,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11389,15 +11532,6 @@ "lodash": "^4.17.14" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 04a11a7a..6d495247 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lodash": "^4.17.20", "luxon": "^3.2.1", "mongo-cursor-pagination": "^8.1.2", - "mongodb-query-parser": "^2.4.3", + "mongodb-query-parser": "^3.0.0", "mongoose": "^7.0.0", "prompt": "^1.2.0", "stream-transform": "^3.2.0", diff --git a/src/api/db/models/ImageError.js b/src/api/db/models/ImageError.js index 520872c8..20214560 100644 --- a/src/api/db/models/ImageError.js +++ b/src/api/db/models/ImageError.js @@ -37,6 +37,28 @@ const generateImageErrorModel = ({ user } = {}) => ({ throw new ApolloError(err); } }; + }, + + get clearErrors() { + if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + + return async (input) => { + const operation = async (input) => { + return await retry(async () => { + return await ImageError.batch(input); + }, { retries: 2 }); + }; + + try { + await operation(input); + + return { message: 'Cleared' }; + } catch (err) { + // if error is uncontrolled, throw new ApolloError + if (err instanceof ApolloError) throw err; + throw new ApolloError(err); + } + }; } }); diff --git a/src/api/resolvers/Mutation.js b/src/api/resolvers/Mutation.js index e94b0b2a..5e5b2b76 100644 --- a/src/api/resolvers/Mutation.js +++ b/src/api/resolvers/Mutation.js @@ -9,6 +9,11 @@ const Mutation = { return { ...error }; }, + clearImageErrors: async (_, { input }, context) => { + const error = await context.models.ImageError.clearErrors(input, context); + return { ...res }; + }, + createUpload: async (_, { input }, context) => { const res = await context.models.Batch.createUpload(input, context); return { ...res }; From b5bdb83577a08ce95b7b40eebb363d5b67ee5834 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 09:55:29 -0600 Subject: [PATCH 02/25] Add ClearImageErrors Payloads --- src/api/type-defs/inputs/ClearImageErrorsInput.js | 4 ++++ .../inputs/{CreateBatchError.js => CreateBatchErrorInput.js} | 0 src/api/type-defs/root/Mutation.js | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/api/type-defs/inputs/ClearImageErrorsInput.js rename src/api/type-defs/inputs/{CreateBatchError.js => CreateBatchErrorInput.js} (100%) diff --git a/src/api/type-defs/inputs/ClearImageErrorsInput.js b/src/api/type-defs/inputs/ClearImageErrorsInput.js new file mode 100644 index 00000000..b5292ae2 --- /dev/null +++ b/src/api/type-defs/inputs/ClearImageErrorsInput.js @@ -0,0 +1,4 @@ +module.exports = ` + input ClearImageErrorsInput { + batch: String! +}`; diff --git a/src/api/type-defs/inputs/CreateBatchError.js b/src/api/type-defs/inputs/CreateBatchErrorInput.js similarity index 100% rename from src/api/type-defs/inputs/CreateBatchError.js rename to src/api/type-defs/inputs/CreateBatchErrorInput.js diff --git a/src/api/type-defs/root/Mutation.js b/src/api/type-defs/root/Mutation.js index 8e16536e..599c2539 100644 --- a/src/api/type-defs/root/Mutation.js +++ b/src/api/type-defs/root/Mutation.js @@ -8,6 +8,7 @@ module.exports = ` createBatchError(input: CreateBatchErrorInput!): BatchError createImageError(input: CreateImageErrorInput!): ImageError + clearImageErrors(input: ClearImageErrorsInput!): StandardPayload registerCamera(input: RegisterCameraInput!): RegisterCameraPayload unregisterCamera(input: UnregisterCameraInput!): UnregisterCameraPayload @@ -17,7 +18,7 @@ module.exports = ` deleteView(input: DeleteViewInput!): DeleteViewPayload updateAutomationRules(input: UpdateAutomationRulesInput!): UpdateAutomationRulesPayload - + createObject(input: CreateObjectInput!): CreateObjectPayload updateObject(input: UpdateObjectInput!): UpdateObjectPayload deleteObject(input: DeleteObjectInput!): DeleteObjectPayload From 656ed473cd17b1a2144f4aaa23cbfc6b5f68dd48 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 10:03:35 -0600 Subject: [PATCH 03/25] Fix lints --- src/api/resolvers/Mutation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/resolvers/Mutation.js b/src/api/resolvers/Mutation.js index 5e5b2b76..4b4b0fe3 100644 --- a/src/api/resolvers/Mutation.js +++ b/src/api/resolvers/Mutation.js @@ -10,7 +10,7 @@ const Mutation = { }, clearImageErrors: async (_, { input }, context) => { - const error = await context.models.ImageError.clearErrors(input, context); + const res = await context.models.ImageError.clearErrors(input, context); return { ...res }; }, From 6a2152e18b83d340adb59218d7d3ea97f3796449 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 12:59:11 -0600 Subject: [PATCH 04/25] Generate ImageError for unknown serials --- src/api/db/models/Image.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index f95ce924..84dd0405 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -122,7 +122,11 @@ const generateImageModel = ({ user } = {}) => ({ md.serialNumber = batch.overrideSerial; cameraId = batch.overrideSerial; } + } + if (!cameraId || cameraId === 'unknown') { + errors.push(new Error('Unknown Serial Number')); + } else if (md.batchId) { // create camera config if there isn't one yet await context.models.Project.createCameraConfig(projectId, cameraId); } else { From ab23bfa555ff1594466299271e2a71f6a1021921 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 16:06:17 -0600 Subject: [PATCH 05/25] Migrate to ES Module --- package.json | 1 + src/api/auth/authorization.js | 4 +- src/api/auth/roles.js | 2 +- src/api/db/connect.js | 11 +++-- src/api/db/models/Batch.js | 26 ++++++------ src/api/db/models/BatchError.js | 12 +++--- src/api/db/models/Camera.js | 16 ++++--- src/api/db/models/Image.js | 36 ++++++++-------- src/api/db/models/ImageError.js | 12 +++--- src/api/db/models/MLModel.js | 8 ++-- src/api/db/models/Project.js | 18 ++++---- src/api/db/models/utils.js | 14 ++++--- src/api/db/schemas/Batch.js | 7 ++-- src/api/db/schemas/BatchError.js | 7 ++-- src/api/db/schemas/Image.js | 9 ++-- src/api/db/schemas/ImageError.js | 7 ++-- src/api/db/schemas/MLModel.js | 5 ++- src/api/db/schemas/Project.js | 7 ++-- src/api/db/schemas/WirelessCamera.js | 4 +- src/api/db/schemas/shared/index.js | 4 +- src/api/errors.js | 8 ++-- src/api/handler.js | 42 ++++++++++--------- src/api/resolvers/Fields.js | 2 +- src/api/resolvers/Mutation.js | 2 +- src/api/resolvers/Query.js | 2 +- src/api/resolvers/Scalars.js | 9 ++-- src/api/type-defs/index.js | 8 ++-- .../type-defs/inputs/ClearImageErrorsInput.js | 2 +- .../type-defs/inputs/CreateBatchErrorInput.js | 2 +- .../type-defs/inputs/CreateDeploymentInput.js | 2 +- src/api/type-defs/inputs/CreateImageError.js | 2 +- src/api/type-defs/inputs/CreateImageInput.js | 2 +- src/api/type-defs/inputs/CreateLabelsInput.js | 2 +- src/api/type-defs/inputs/CreateObjectInput.js | 2 +- src/api/type-defs/inputs/CreateUploadInput.js | 2 +- src/api/type-defs/inputs/CreateViewInput.js | 2 +- .../type-defs/inputs/DeleteDeploymentInput.js | 2 +- src/api/type-defs/inputs/DeleteLabelInput.js | 2 +- src/api/type-defs/inputs/DeleteObjectInput.js | 2 +- src/api/type-defs/inputs/DeleteViewInput.js | 2 +- src/api/type-defs/inputs/ExportInput.js | 2 +- src/api/type-defs/inputs/ExportStatusInput.js | 2 +- src/api/type-defs/inputs/QueryBatchesInput.js | 2 +- src/api/type-defs/inputs/QueryImageInput.js | 2 +- src/api/type-defs/inputs/QueryImagesInput.js | 2 +- src/api/type-defs/inputs/QueryStatsInput.js | 2 +- .../type-defs/inputs/RegisterCameraInput.js | 2 +- src/api/type-defs/inputs/StopBatchInput.js | 2 +- .../type-defs/inputs/UnregisterCameraInput.js | 2 +- .../inputs/UpdateAutomationRulesInput.js | 2 +- src/api/type-defs/inputs/UpdateBatchInput.js | 2 +- .../type-defs/inputs/UpdateDeploymentInput.js | 2 +- src/api/type-defs/inputs/UpdateLabelInput.js | 2 +- src/api/type-defs/inputs/UpdateObjectInput.js | 2 +- .../type-defs/inputs/UpdateObjectsInput.js | 2 +- src/api/type-defs/inputs/UpdateViewInput.js | 2 +- src/api/type-defs/objects/AutomationRule.js | 2 +- src/api/type-defs/objects/Batch.js | 2 +- src/api/type-defs/objects/BatchError.js | 2 +- src/api/type-defs/objects/Filters.js | 2 +- src/api/type-defs/objects/Image.js | 2 +- src/api/type-defs/objects/ImageError.js | 2 +- src/api/type-defs/objects/Label.js | 2 +- src/api/type-defs/objects/Location.js | 2 +- src/api/type-defs/objects/MLModel.js | 2 +- src/api/type-defs/objects/PageInfo.js | 2 +- src/api/type-defs/objects/Project.js | 2 +- src/api/type-defs/objects/Scalars.js | 2 +- src/api/type-defs/objects/View.js | 2 +- src/api/type-defs/objects/WirelessCamera.js | 2 +- src/api/type-defs/payloads/BatchPayload.js | 2 +- .../type-defs/payloads/BatchesConnection.js | 2 +- .../payloads/CreateDeploymentPayload.js | 2 +- .../type-defs/payloads/CreateImagePayload.js | 2 +- .../type-defs/payloads/CreateLabelsPayload.js | 2 +- .../type-defs/payloads/CreateObjectPayload.js | 2 +- .../type-defs/payloads/CreateUploadPayload.js | 2 +- .../type-defs/payloads/CreateViewPayload.js | 2 +- .../payloads/DeleteDeploymentPayload.js | 2 +- .../type-defs/payloads/DeleteLabelPayload.js | 2 +- .../type-defs/payloads/DeleteObjectPayload.js | 2 +- .../type-defs/payloads/DeleteViewPayload.js | 2 +- src/api/type-defs/payloads/ExportPayload.js | 2 +- .../type-defs/payloads/ExportStatusPayload.js | 2 +- .../type-defs/payloads/ImagesConnection.js | 2 +- src/api/type-defs/payloads/ImagesStats.js | 2 +- .../payloads/RegisterCameraPayload.js | 2 +- src/api/type-defs/payloads/StandardPayload.js | 2 +- .../payloads/UnregisterCameraPayload.js | 2 +- .../payloads/UpdateAutomationRulesPayload.js | 2 +- .../payloads/UpdateDeploymentPayload.js | 2 +- .../type-defs/payloads/UpdateLabelPayload.js | 2 +- .../type-defs/payloads/UpdateObjectPayload.js | 2 +- .../payloads/UpdateObjectsPayload.js | 2 +- .../type-defs/payloads/UpdateViewPayload.js | 2 +- src/api/type-defs/root/Mutation.js | 2 +- src/api/type-defs/root/Query.js | 2 +- src/automation/alerts.js | 8 ++-- src/automation/index.js | 10 ++--- src/automation/utils.js | 2 +- src/config/config.js | 9 ++-- src/export/export.js | 30 ++++++------- src/export/handler.js | 10 ++--- src/ml/handler.js | 6 +-- src/ml/modelInterfaces.js | 6 +-- src/scripts/backupConfig.js | 2 +- src/scripts/createProject.js | 8 ++-- src/scripts/exportDb.js | 23 +++++----- src/scripts/operations.js | 11 +++-- src/scripts/seedDb.js | 10 ++--- src/scripts/updateDocuments.js | 22 +++++----- test/ml-inference-mega.test.js | 16 +++---- 112 files changed, 310 insertions(+), 286 deletions(-) diff --git a/package.json b/package.json index 6d495247..dfc29487 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "animl-serverless", + "type": "module", "version": "1.0.0", "description": "Lambda-based graphQL API for camera trap data managment platform", "main": "src/handler.js", diff --git a/src/api/auth/authorization.js b/src/api/auth/authorization.js index cb270abb..ef89645f 100644 --- a/src/api/auth/authorization.js +++ b/src/api/auth/authorization.js @@ -1,4 +1,4 @@ -const jwt = require('jwt-simple'); +import jwt from 'jwt-simple'; const BEARER_TOKEN_PATTERN = /^Bearer [-_=.0-9a-zA-Z]+$/i; @@ -60,6 +60,6 @@ async function getUserInfo(req, config) { } -module.exports = { +export { getUserInfo }; diff --git a/src/api/auth/roles.js b/src/api/auth/roles.js index 3918ac05..c8a1ef56 100644 --- a/src/api/auth/roles.js +++ b/src/api/auth/roles.js @@ -10,7 +10,7 @@ const WRITE_DEPLOYMENTS_ROLES = [MANAGER]; const WRITE_AUTOMATION_RULES_ROLES = [MANAGER]; const WRITE_CAMERA_REGISTRATION_ROLES = [MANAGER]; -module.exports = { +export { EXPORT_DATA_ROLES, WRITE_OBJECTS_ROLES, WRITE_VIEWS_ROLES, diff --git a/src/api/db/connect.js b/src/api/db/connect.js index 3555066b..0284d2c8 100644 --- a/src/api/db/connect.js +++ b/src/api/db/connect.js @@ -1,5 +1,6 @@ -const mongoose = require('mongoose'); -const { ApolloError } = require('apollo-server-errors'); +import mongoose from 'mongoose'; +import { ApolloError } from 'apollo-server-errors'; + // TODO: consider using multiple connections (one per model) // to reduce risk of slow trains // https://mongoosejs.com/docs/connections.html#multiple_connections @@ -7,7 +8,7 @@ const { ApolloError } = require('apollo-server-errors'); let cachedConnectionPromise = null; -module.exports.connectToDatabase = async function connectToDb(config) { +async function connectToDatabase(config) { if (!cachedConnectionPromise) { // If no connection promise is cached, create a new one. // We cache the promise instead of the connection itself to prevent race @@ -27,3 +28,7 @@ module.exports.connectToDatabase = async function connectToDb(config) { throw new ApolloError(err); } }; + +export { + connectToDatabase +} diff --git a/src/api/db/models/Batch.js b/src/api/db/models/Batch.js index ebb49622..186a363d 100644 --- a/src/api/db/models/Batch.js +++ b/src/api/db/models/Batch.js @@ -1,15 +1,15 @@ -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const MongoPaging = require('mongo-cursor-pagination'); -const { WRITE_IMAGES_ROLES } = require('../../auth/roles'); -const { randomUUID } = require('crypto'); -const S3 = require('@aws-sdk/client-s3'); -const SQS = require('@aws-sdk/client-sqs'); -const Lambda = require('@aws-sdk/client-lambda'); -const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); -const Batch = require('../schemas/Batch'); -const BatchError = require('../schemas/BatchError'); -const retry = require('async-retry'); -const utils = require('./utils'); +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import MongoPaging from 'mongo-cursor-pagination'; +import { WRITE_IMAGES_ROLES } from '../../auth/roles.js'; +import { randomUUID } from 'node:crypto'; +import S3 from '@aws-sdk/client-s3'; +import SQS from '@aws-sdk/client-sqs'; +import Lambda from '@aws-sdk/client-lambda'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import Batch from '../schemas/Batch.js'; +import BatchError from '../schemas/BatchError.js'; +import retry from 'async-retry'; +import utils from './utils.js'; const generateBatchModel = ({ user } = {}) => ({ queryByFilter: async (input) => { @@ -208,4 +208,4 @@ const generateBatchModel = ({ user } = {}) => ({ } }); -module.exports = generateBatchModel; +export default generateBatchModel; diff --git a/src/api/db/models/BatchError.js b/src/api/db/models/BatchError.js index 18034537..6faffbff 100644 --- a/src/api/db/models/BatchError.js +++ b/src/api/db/models/BatchError.js @@ -1,8 +1,8 @@ -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const { WRITE_IMAGES_ROLES } = require('../../auth/roles'); -const BatchError = require('../schemas/BatchError'); -const retry = require('async-retry'); -const utils = require('./utils'); +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import { WRITE_IMAGES_ROLES } from '../../auth/roles.js'; +import BatchError from '../schemas/BatchError.js'; +import retry from 'async-retey'; +import utils from './utils.js'; const generateBatchErrorModel = ({ user } = {}) => ({ get createError() { @@ -38,4 +38,4 @@ const generateBatchErrorModel = ({ user } = {}) => ({ } }); -module.exports = generateBatchErrorModel; +export default generateBatchErrorModel; diff --git a/src/api/db/models/Camera.js b/src/api/db/models/Camera.js index 3ef8b85b..ac63bc55 100644 --- a/src/api/db/models/Camera.js +++ b/src/api/db/models/Camera.js @@ -1,13 +1,11 @@ -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const { CameraRegistrationError } = require('../../errors'); -const WirelessCamera = require('../schemas/WirelessCamera'); -const retry = require('async-retry'); -const { WRITE_CAMERA_REGISTRATION_ROLES } = require('../../auth/roles'); -const { hasRole, idMatch } = require('./utils'); - +import { ApolloError, ForbiddenError } from 'apollo-server-errors'); +import { CameraRegistrationError } from '../../errors'); +import WirelessCamera from '../schemas/WirelessCamera'); +import retry from 'async-retry'); +import { WRITE_CAMERA_REGISTRATION_ROLES } from '../../auth/roles'); +import { hasRole, idMatch } from './utils'); const generateCameraModel = ({ user } = {}) => ({ - getWirelessCameras: async (_ids) => { const query = _ids ? { _id: { $in: _ids } } : {}; // if user has curr_project, limit returned cameras to those that @@ -220,4 +218,4 @@ const generateCameraModel = ({ user } = {}) => ({ }); -module.exports = generateCameraModel; +export default generateCameraModel; diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index 84dd0405..f08e8042 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -1,20 +1,20 @@ -const { text } = require('node:stream/consumers'); -const _ = require('lodash'); -const S3 = require('@aws-sdk/client-s3'); -const SQS = require('@aws-sdk/client-sqs'); -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const { DuplicateError, DuplicateLabelError, DBValidationError } = require('../../errors'); -const crypto = require('crypto'); -const MongoPaging = require('mongo-cursor-pagination'); -const Image = require('../schemas/Image'); -const ImageError = require('../schemas/ImageError'); -const WirelessCamera = require('../schemas/WirelessCamera'); -const Batch = require('../schemas/Batch'); -const automation = require('../../../automation'); -const { WRITE_OBJECTS_ROLES, WRITE_IMAGES_ROLES, EXPORT_DATA_ROLES } = require('../../auth/roles'); -const utils = require('./utils'); -const { idMatch } = require('./utils'); -const retry = require('async-retry'); +import { text } from 'node:stream/consumers'; +import _ from 'lodash'; +import S3 from '@aws-sdk/client-s3'; +import SQS from '@aws-sdk/client-sqs'; +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import { DuplicateError, DuplicateLabelError, DBValidationError } from '../../errors.js'; +import crypto from 'crypto'; +import MongoPaging from 'mongo-cursor-pagination'; +import Image from '../schemas/Image.js'; +import ImageError from '../schemas/ImageError.js'; +import WirelessCamera from '../schemas/WirelessCamera.js'; +import Batch from '../schemas/Batch.js'; +import automation from '../../../automation.js'; +import { WRITE_OBJECTS_ROLES, WRITE_IMAGES_ROLES, EXPORT_DATA_ROLES } from '../../auth/roles.js'; +import utils from './utils.js'; +import { idMatch } from './utils.js'; +import retry from 'async-retry'; const generateImageModel = ({ user } = {}) => ({ countImages: async (input) => { @@ -581,4 +581,4 @@ const generateImageModel = ({ user } = {}) => ({ }); -module.exports = generateImageModel; +export default generateImageModel; diff --git a/src/api/db/models/ImageError.js b/src/api/db/models/ImageError.js index 20214560..506c4c1f 100644 --- a/src/api/db/models/ImageError.js +++ b/src/api/db/models/ImageError.js @@ -1,8 +1,8 @@ -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const { WRITE_IMAGES_ROLES } = require('../../auth/roles'); -const ImageError = require('../schemas/ImageError'); -const retry = require('async-retry'); -const utils = require('./utils'); +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import { WRITE_IMAGES_ROLES } from '../../auth/roles.js'; +import ImageError from '../schemas/ImageError.js'; +import retry from 'async-retry'; +import utils from './utils.js'; const generateImageErrorModel = ({ user } = {}) => ({ get createError() { @@ -62,4 +62,4 @@ const generateImageErrorModel = ({ user } = {}) => ({ } }); -module.exports = generateImageErrorModel; +export default generateImageErrorModel; diff --git a/src/api/db/models/MLModel.js b/src/api/db/models/MLModel.js index 4b9cd199..b6a0c4a0 100644 --- a/src/api/db/models/MLModel.js +++ b/src/api/db/models/MLModel.js @@ -1,6 +1,6 @@ -const { ApolloError } = require('apollo-server-errors'); -const MLModel = require('../schemas/MLModel'); -const retry = require('async-retry'); +import { ApolloError } from 'apollo-server-errors'; +import MLModel from '../schemas/MLModel.js'; +import retry from 'async-retry'; const generateMLModelModel = () => ({ getMLModels: async (_ids) => { @@ -39,4 +39,4 @@ const generateMLModelModel = () => ({ }); -module.exports = generateMLModelModel; +export default generateMLModelModel; diff --git a/src/api/db/models/Project.js b/src/api/db/models/Project.js index a4e6d62a..8f310d8a 100644 --- a/src/api/db/models/Project.js +++ b/src/api/db/models/Project.js @@ -1,14 +1,14 @@ -const { ApolloError, ForbiddenError } = require('apollo-server-errors'); -const { DateTime } = require('luxon'); -const Project = require('../schemas/Project'); -const Image = require('../schemas/Image'); -const { sortDeps, hasRole, idMatch } = require('./utils'); -const retry = require('async-retry'); -const { +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import { DateTime } from 'luxon'; +import Project from '../schemas/Project.js'; +import Image from '../schemas/Image.js'; +import { sortDeps, hasRole, idMatch } from './utils.js'; +import retry from 'async-retry'; +import { WRITE_DEPLOYMENTS_ROLES, WRITE_VIEWS_ROLES, WRITE_AUTOMATION_RULES_ROLES -} = require('../../auth/roles'); +} from '../../auth/roles.js'; const generateProjectModel = ({ user } = {}) => ({ @@ -386,4 +386,4 @@ const generateProjectModel = ({ user } = {}) => ({ }); -module.exports = generateProjectModel; +export default generateProjectModel; diff --git a/src/api/db/models/utils.js b/src/api/db/models/utils.js index bc0e60ec..2d081f71 100644 --- a/src/api/db/models/utils.js +++ b/src/api/db/models/utils.js @@ -1,8 +1,10 @@ -const { DateTime } = require('luxon'); -const _ = require('lodash'); -const ObjectId = require('mongoose').Types.ObjectId; -const parser = require('mongodb-query-parser'); -const Image = require('../schemas/Image.js'); +import { DateTime } from 'luxon'; +import _ from 'lodash'; +import mongoose from 'mongoose'; +import parser from 'mongodb-query-parser'; +import Image from '../schemas/Image.js'; + +const ObjectId = mongoose.Types.ObjectId; // TODO: this file is getting unwieldy, break up @@ -498,7 +500,7 @@ const isImageReviewed = (image) => { return hasObjs && !hasUnlockedObjs && !hasAllInvalidatedLabels; }; -module.exports = { +export { buildImgUrl, // buildFilter, buildPipeline, diff --git a/src/api/db/schemas/Batch.js b/src/api/db/schemas/Batch.js index 93c3f85f..521d4429 100644 --- a/src/api/db/schemas/Batch.js +++ b/src/api/db/schemas/Batch.js @@ -1,5 +1,6 @@ -const mongoose = require('mongoose'); -const MongoPaging = require('mongo-cursor-pagination'); +import mongoose from 'mongoose'; +import MongoPaging from 'mongo-cursor-pagination'; + const Schema = mongoose.Schema; const BatchSchema = new Schema({ @@ -23,4 +24,4 @@ BatchSchema.on('index', (e) => { BatchSchema.plugin(MongoPaging.mongoosePlugin); -module.exports = mongoose.model('Batch', BatchSchema); +export default mongoose.model('Batch', BatchSchema); diff --git a/src/api/db/schemas/BatchError.js b/src/api/db/schemas/BatchError.js index ca59b802..cc171a06 100644 --- a/src/api/db/schemas/BatchError.js +++ b/src/api/db/schemas/BatchError.js @@ -1,6 +1,7 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; +import { randomUUID } from 'node:crypto'; + const Schema = mongoose.Schema; -const { randomUUID } = require('node:crypto'); const BatchErrorSchema = new Schema({ _id: { type: String, default: randomUUID, required: true }, /* _id is name in_snake_case */ @@ -15,4 +16,4 @@ BatchErrorSchema.on('index', (e) => { console.log('BatchError Indexing Error', e); }); -module.exports = mongoose.model('BatchError', BatchErrorSchema); +export default mongoose.model('BatchError', BatchErrorSchema); diff --git a/src/api/db/schemas/Image.js b/src/api/db/schemas/Image.js index 466b4f85..a5e27542 100644 --- a/src/api/db/schemas/Image.js +++ b/src/api/db/schemas/Image.js @@ -1,6 +1,7 @@ -const mongoose = require('mongoose'); -const MongoPaging = require('mongo-cursor-pagination'); -const shared = require('./shared'); +import mongoose from 'mongoose'; +import MongoPaging from 'mongo-cursor-pagination'; +import shared from './shared.js'; + const Schema = mongoose.Schema; /* @@ -48,4 +49,4 @@ ImageSchema.on('index', (e) => { ImageSchema.plugin(MongoPaging.mongoosePlugin); -module.exports = mongoose.model('Image', ImageSchema); +export default mongoose.model('Image', ImageSchema); diff --git a/src/api/db/schemas/ImageError.js b/src/api/db/schemas/ImageError.js index 25a1b451..533691c5 100644 --- a/src/api/db/schemas/ImageError.js +++ b/src/api/db/schemas/ImageError.js @@ -1,6 +1,7 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; +import { randomUUID } from 'node:crypto'; + const Schema = mongoose.Schema; -const { randomUUID } = require('node:crypto'); const ImageErrorSchema = new Schema({ _id: { type: String, required: true, default: randomUUID }, /* _id is name in_snake_case */ @@ -16,4 +17,4 @@ ImageErrorSchema.on('index', (e) => { console.log('ImageError Indexing Error', e); }); -module.exports = mongoose.model('ImageError', ImageErrorSchema); +export default mongoose.model('ImageError', ImageErrorSchema); diff --git a/src/api/db/schemas/MLModel.js b/src/api/db/schemas/MLModel.js index 8a64b8e6..d80c06e8 100644 --- a/src/api/db/schemas/MLModel.js +++ b/src/api/db/schemas/MLModel.js @@ -1,4 +1,5 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; + const Schema = mongoose.Schema; // /* @@ -41,4 +42,4 @@ MLModelSchema.index( { unique: true, sparse: true } ); -module.exports = mongoose.model('MLModel', MLModelSchema); +export default mongoose.model('MLModel', MLModelSchema); diff --git a/src/api/db/schemas/Project.js b/src/api/db/schemas/Project.js index ded3dd23..98d3a736 100644 --- a/src/api/db/schemas/Project.js +++ b/src/api/db/schemas/Project.js @@ -1,6 +1,7 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; +import shared = from './shared.js'; + const Schema = mongoose.Schema; -const shared = require('./shared'); const AutomationRuleSchema = new Schema({ name: { type: String, required: true }, @@ -75,4 +76,4 @@ const ProjectSchema = new Schema({ automationRules: { type: [AutomationRuleSchema] } }); -module.exports = mongoose.model('Project', ProjectSchema); +export default mongoose.model('Project', ProjectSchema); diff --git a/src/api/db/schemas/WirelessCamera.js b/src/api/db/schemas/WirelessCamera.js index e8770102..30851061 100644 --- a/src/api/db/schemas/WirelessCamera.js +++ b/src/api/db/schemas/WirelessCamera.js @@ -1,4 +1,4 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; const Schema = mongoose.Schema; const ProjectRegistrationSchema = new Schema({ @@ -13,4 +13,4 @@ const WirelessCameraSchema = new Schema({ projRegistrations: { type: [ProjectRegistrationSchema] } }, { collection: 'wirelesscameras' }); -module.exports = mongoose.model('WirelessCameraSchema', WirelessCameraSchema); +export default mongoose.model('WirelessCameraSchema', WirelessCameraSchema); diff --git a/src/api/db/schemas/shared/index.js b/src/api/db/schemas/shared/index.js index caa58c57..4a79306c 100644 --- a/src/api/db/schemas/shared/index.js +++ b/src/api/db/schemas/shared/index.js @@ -1,4 +1,4 @@ -const mongoose = require('mongoose'); +import mongoose from 'mongoose'; const Schema = mongoose.Schema; const PointSchema = new Schema({ @@ -59,7 +59,7 @@ const ObjectSchema = new Schema({ labels: { type: [LabelSchema] } }); -module.exports = { +export { PointSchema, LocationSchema, LabelSchema, diff --git a/src/api/errors.js b/src/api/errors.js index 02b59cec..01bdae2e 100644 --- a/src/api/errors.js +++ b/src/api/errors.js @@ -1,9 +1,9 @@ -const { +import { ApolloError, formatApolloErrors, toApolloError -} = require('apollo-server-errors'); -const { GraphQLError } = require('graphql/error/GraphQLError'); +} from 'apollo-server-errors'; +import { GraphQLError } from 'graphql/error/GraphQLError'; // Apollo errors docs: // https://www.apollographql.com/docs/apollo-server/data/errors/ @@ -79,7 +79,7 @@ function formatError (err) { return error; } -module.exports = { +export { DuplicateError, DuplicateLabelError, DBValidationError, diff --git a/src/api/handler.js b/src/api/handler.js index 2d5e9a86..72d3b1c3 100644 --- a/src/api/handler.js +++ b/src/api/handler.js @@ -1,21 +1,21 @@ -const { ApolloServer } = require('apollo-server-lambda'); -const { AuthenticationError } = require('apollo-server-errors'); -const { formatError } = require('./errors'); -const generateProjectModel = require('./db/models/Project'); -const generateImageModel = require('./db/models/Image'); -const generateCameraModel = require('./db/models/Camera'); -const generateMLModelModel = require('./db/models/MLModel'); -const generateBatchModel = require('./db/models/Batch'); -const generateBatchErrorModel = require('./db/models/BatchError'); -const generateImageErrorModel = require('./db/models/ImageError'); -const Query = require('./resolvers/Query'); -const Mutation = require('./resolvers/Mutation'); -const Fields = require('./resolvers/Fields'); -const Scalars = require('./resolvers/Scalars'); -const typeDefs = require('./type-defs'); -const { getConfig } = require('../config/config'); -const { connectToDatabase } = require('./db/connect'); -const { getUserInfo } = require('./auth/authorization'); +import { ApolloServer } from 'apollo-server-lambda'; +import { AuthenticationError } from 'apollo-server-errors'; +import { formatError } from './errors.js'; +import generateProjectModel from './db/models/Project.js'; +import generateImageModel from './db/models/Image.js'; +import generateCameraModel from './db/models/Camera.js'; +import generateMLModelModel from './db/models/MLModel.js'; +import generateBatchModel from'./db/models/Batch.js'; +import generateBatchErrorModel from './db/models/BatchError.js'; +import generateImageErrorModel from './db/models/ImageError.js'; +import Query from './resolvers/Query.js'; +import Mutation from './resolvers/Mutation.js'; +import Fields from './resolvers/Fields.js'; +import Scalars from './resolvers/Scalars.js'; +import typeDefs from './type-defs.js'; +import { getConfig } from '../config/config.js'; +import { connectToDatabase } from './db/connect.js'; +import { getUserInfo } from './auth/authorization.js'; const resolvers = { Query, @@ -67,4 +67,8 @@ const server = new ApolloServer({ } }); -exports.server = server.createHandler(); +const server = server.createHandler(); + +export { + server +} diff --git a/src/api/resolvers/Fields.js b/src/api/resolvers/Fields.js index d97eddee..f998d9ff 100644 --- a/src/api/resolvers/Fields.js +++ b/src/api/resolvers/Fields.js @@ -24,7 +24,7 @@ const Project = { } }; -module.exports = { +export { Project // Camera, // Image, diff --git a/src/api/resolvers/Mutation.js b/src/api/resolvers/Mutation.js index 4b4b0fe3..7b587dfe 100644 --- a/src/api/resolvers/Mutation.js +++ b/src/api/resolvers/Mutation.js @@ -117,4 +117,4 @@ const Mutation = { }; -module.exports = Mutation; +export default Mutation; diff --git a/src/api/resolvers/Query.js b/src/api/resolvers/Query.js index ef14f112..0c1e42fe 100644 --- a/src/api/resolvers/Query.js +++ b/src/api/resolvers/Query.js @@ -71,4 +71,4 @@ const Query = { } }; -module.exports = Query; +export default Query; diff --git a/src/api/resolvers/Scalars.js b/src/api/resolvers/Scalars.js index beaf2e7a..653171f7 100644 --- a/src/api/resolvers/Scalars.js +++ b/src/api/resolvers/Scalars.js @@ -1,6 +1,7 @@ -const { DateTime } = require('luxon'); -const { GraphQLScalarType } = require('graphql'); -const GraphQLJSON = require('graphql-type-json'); +import { DateTime } from 'luxon'; +import { GraphQLScalarType } from 'graphql'; +import GraphQLJSON from 'graphql-type-json'; + const JSONObject = GraphQLJSON.GraphQLJSONObject; // Good explanation of the difference between @@ -25,7 +26,7 @@ const Date = new GraphQLScalarType({ } }); -module.exports = { +export { JSONObject, Date }; diff --git a/src/api/type-defs/index.js b/src/api/type-defs/index.js index e2e53765..46495366 100644 --- a/src/api/type-defs/index.js +++ b/src/api/type-defs/index.js @@ -1,5 +1,5 @@ -const fs = require('fs'); -const path = require('path'); +import fs from 'node:fs'; +import path from 'node:path'; const typeDefStrings = []; for (const entry_top of fs.readdirSync(path.resolve(__dirname))) { @@ -10,7 +10,7 @@ for (const entry_top of fs.readdirSync(path.resolve(__dirname))) { if (!fs.lstatSync(full).isFile()) continue; if (path.parse(full).ext !== '.js') continue; - typeDefStrings.push(require(path.resolve(__dirname, entry_top, entry_sub))); + typeDefStrings.push((await import(path.resolve(__dirname, entry_top, entry_sub))).default); } } @@ -18,4 +18,4 @@ for (const entry_top of fs.readdirSync(path.resolve(__dirname))) { // 'ImageCreateInput' rather than 'CreateImageInput' for alphabetical grouping // by DB collection/schema type -module.exports = typeDefStrings.join(''); +export default typeDefStrings.join(''); diff --git a/src/api/type-defs/inputs/ClearImageErrorsInput.js b/src/api/type-defs/inputs/ClearImageErrorsInput.js index b5292ae2..c31a6df3 100644 --- a/src/api/type-defs/inputs/ClearImageErrorsInput.js +++ b/src/api/type-defs/inputs/ClearImageErrorsInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ClearImageErrorsInput { batch: String! }`; diff --git a/src/api/type-defs/inputs/CreateBatchErrorInput.js b/src/api/type-defs/inputs/CreateBatchErrorInput.js index e11965f1..23ad4e4d 100644 --- a/src/api/type-defs/inputs/CreateBatchErrorInput.js +++ b/src/api/type-defs/inputs/CreateBatchErrorInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input CreateBatchErrorInput { error: String! batch: String! diff --git a/src/api/type-defs/inputs/CreateDeploymentInput.js b/src/api/type-defs/inputs/CreateDeploymentInput.js index e99c1aa5..1f46b294 100644 --- a/src/api/type-defs/inputs/CreateDeploymentInput.js +++ b/src/api/type-defs/inputs/CreateDeploymentInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input PointInput { type: String! coordinates: [Float!]! diff --git a/src/api/type-defs/inputs/CreateImageError.js b/src/api/type-defs/inputs/CreateImageError.js index 58a8b735..d9e8bfc8 100644 --- a/src/api/type-defs/inputs/CreateImageError.js +++ b/src/api/type-defs/inputs/CreateImageError.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input CreateImageErrorInput { error: String! image: String diff --git a/src/api/type-defs/inputs/CreateImageInput.js b/src/api/type-defs/inputs/CreateImageInput.js index 5dd30e73..e00737c0 100644 --- a/src/api/type-defs/inputs/CreateImageInput.js +++ b/src/api/type-defs/inputs/CreateImageInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input CreateImageInput { md: JSONObject! }`; diff --git a/src/api/type-defs/inputs/CreateLabelsInput.js b/src/api/type-defs/inputs/CreateLabelsInput.js index 23eb48a8..40f9f3a0 100644 --- a/src/api/type-defs/inputs/CreateLabelsInput.js +++ b/src/api/type-defs/inputs/CreateLabelsInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ValidationInput { validated: Boolean!, validationDate: Date, diff --git a/src/api/type-defs/inputs/CreateObjectInput.js b/src/api/type-defs/inputs/CreateObjectInput.js index af422177..6841d628 100644 --- a/src/api/type-defs/inputs/CreateObjectInput.js +++ b/src/api/type-defs/inputs/CreateObjectInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ObjectInput { _id: ID! bbox: [Float!] diff --git a/src/api/type-defs/inputs/CreateUploadInput.js b/src/api/type-defs/inputs/CreateUploadInput.js index 6095c881..dc7d0ceb 100644 --- a/src/api/type-defs/inputs/CreateUploadInput.js +++ b/src/api/type-defs/inputs/CreateUploadInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input CreateUploadInput { originalFile: String! }`; diff --git a/src/api/type-defs/inputs/CreateViewInput.js b/src/api/type-defs/inputs/CreateViewInput.js index 88afdcf3..4a21e0f9 100644 --- a/src/api/type-defs/inputs/CreateViewInput.js +++ b/src/api/type-defs/inputs/CreateViewInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input CreateViewInput { filters: FiltersInput! name: String! diff --git a/src/api/type-defs/inputs/DeleteDeploymentInput.js b/src/api/type-defs/inputs/DeleteDeploymentInput.js index 1792561d..e98ae9cb 100644 --- a/src/api/type-defs/inputs/DeleteDeploymentInput.js +++ b/src/api/type-defs/inputs/DeleteDeploymentInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input DeleteDeploymentInput { cameraId: ID! deploymentId: ID! diff --git a/src/api/type-defs/inputs/DeleteLabelInput.js b/src/api/type-defs/inputs/DeleteLabelInput.js index 1cde5e41..f32d3303 100644 --- a/src/api/type-defs/inputs/DeleteLabelInput.js +++ b/src/api/type-defs/inputs/DeleteLabelInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input DeleteLabelInput { imageId: ID! objectId: ID! diff --git a/src/api/type-defs/inputs/DeleteObjectInput.js b/src/api/type-defs/inputs/DeleteObjectInput.js index e6849bf8..bb3fe511 100644 --- a/src/api/type-defs/inputs/DeleteObjectInput.js +++ b/src/api/type-defs/inputs/DeleteObjectInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input DeleteObjectInput { imageId: ID! objectId: ID! diff --git a/src/api/type-defs/inputs/DeleteViewInput.js b/src/api/type-defs/inputs/DeleteViewInput.js index dce78b52..be67da55 100644 --- a/src/api/type-defs/inputs/DeleteViewInput.js +++ b/src/api/type-defs/inputs/DeleteViewInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input DeleteViewInput { viewId: ID! }`; diff --git a/src/api/type-defs/inputs/ExportInput.js b/src/api/type-defs/inputs/ExportInput.js index 62f392d8..d00e11f0 100644 --- a/src/api/type-defs/inputs/ExportInput.js +++ b/src/api/type-defs/inputs/ExportInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` enum Format { csv coco diff --git a/src/api/type-defs/inputs/ExportStatusInput.js b/src/api/type-defs/inputs/ExportStatusInput.js index 5e45602a..57078628 100644 --- a/src/api/type-defs/inputs/ExportStatusInput.js +++ b/src/api/type-defs/inputs/ExportStatusInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ExportStatusInput { documentId: ID! }`; diff --git a/src/api/type-defs/inputs/QueryBatchesInput.js b/src/api/type-defs/inputs/QueryBatchesInput.js index 4c7a8c50..1761dcd2 100644 --- a/src/api/type-defs/inputs/QueryBatchesInput.js +++ b/src/api/type-defs/inputs/QueryBatchesInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input QueryBatchesInput { paginatedField: String sortAscending: Boolean diff --git a/src/api/type-defs/inputs/QueryImageInput.js b/src/api/type-defs/inputs/QueryImageInput.js index 1b0739b4..4515cfe9 100644 --- a/src/api/type-defs/inputs/QueryImageInput.js +++ b/src/api/type-defs/inputs/QueryImageInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input QueryImageInput { imageId: ID! }`; diff --git a/src/api/type-defs/inputs/QueryImagesInput.js b/src/api/type-defs/inputs/QueryImagesInput.js index 1f2507b7..0ad620f1 100644 --- a/src/api/type-defs/inputs/QueryImagesInput.js +++ b/src/api/type-defs/inputs/QueryImagesInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input FiltersInput { createdStart: Date createdEnd: Date diff --git a/src/api/type-defs/inputs/QueryStatsInput.js b/src/api/type-defs/inputs/QueryStatsInput.js index bcf92924..30d62678 100644 --- a/src/api/type-defs/inputs/QueryStatsInput.js +++ b/src/api/type-defs/inputs/QueryStatsInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input QueryStatsInput { filters: FiltersInput! }`; diff --git a/src/api/type-defs/inputs/RegisterCameraInput.js b/src/api/type-defs/inputs/RegisterCameraInput.js index c3af71b3..112e1a3d 100644 --- a/src/api/type-defs/inputs/RegisterCameraInput.js +++ b/src/api/type-defs/inputs/RegisterCameraInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input RegisterCameraInput { cameraId: ID! make: String! diff --git a/src/api/type-defs/inputs/StopBatchInput.js b/src/api/type-defs/inputs/StopBatchInput.js index 9ccb52e9..2661d8c1 100644 --- a/src/api/type-defs/inputs/StopBatchInput.js +++ b/src/api/type-defs/inputs/StopBatchInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input StopBatchInput { batch: String! }`; diff --git a/src/api/type-defs/inputs/UnregisterCameraInput.js b/src/api/type-defs/inputs/UnregisterCameraInput.js index c1a4bf28..a050c00a 100644 --- a/src/api/type-defs/inputs/UnregisterCameraInput.js +++ b/src/api/type-defs/inputs/UnregisterCameraInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input UnregisterCameraInput { cameraId: ID! } diff --git a/src/api/type-defs/inputs/UpdateAutomationRulesInput.js b/src/api/type-defs/inputs/UpdateAutomationRulesInput.js index 787901aa..597d6802 100644 --- a/src/api/type-defs/inputs/UpdateAutomationRulesInput.js +++ b/src/api/type-defs/inputs/UpdateAutomationRulesInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input AutomationEventInput { type: String! label: String diff --git a/src/api/type-defs/inputs/UpdateBatchInput.js b/src/api/type-defs/inputs/UpdateBatchInput.js index c3a67258..ab410d5a 100644 --- a/src/api/type-defs/inputs/UpdateBatchInput.js +++ b/src/api/type-defs/inputs/UpdateBatchInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input UpdateBatchInput { _id: String! eTag: String diff --git a/src/api/type-defs/inputs/UpdateDeploymentInput.js b/src/api/type-defs/inputs/UpdateDeploymentInput.js index a45a4645..bee5ef38 100644 --- a/src/api/type-defs/inputs/UpdateDeploymentInput.js +++ b/src/api/type-defs/inputs/UpdateDeploymentInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input DeploymentDiffsInput { name: String description: String diff --git a/src/api/type-defs/inputs/UpdateLabelInput.js b/src/api/type-defs/inputs/UpdateLabelInput.js index 5a691add..b2437946 100644 --- a/src/api/type-defs/inputs/UpdateLabelInput.js +++ b/src/api/type-defs/inputs/UpdateLabelInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input LabelDiffsInput { locked: Boolean validation: ValidationInput diff --git a/src/api/type-defs/inputs/UpdateObjectInput.js b/src/api/type-defs/inputs/UpdateObjectInput.js index ef97eb77..a0399864 100644 --- a/src/api/type-defs/inputs/UpdateObjectInput.js +++ b/src/api/type-defs/inputs/UpdateObjectInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ObjectDiffsInput { locked: Boolean bbox: [Float!] diff --git a/src/api/type-defs/inputs/UpdateObjectsInput.js b/src/api/type-defs/inputs/UpdateObjectsInput.js index afe6c7e2..91f96c2c 100644 --- a/src/api/type-defs/inputs/UpdateObjectsInput.js +++ b/src/api/type-defs/inputs/UpdateObjectsInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input Objects { _id: ID! bbox: [Float!]!, diff --git a/src/api/type-defs/inputs/UpdateViewInput.js b/src/api/type-defs/inputs/UpdateViewInput.js index 50229bdc..8f0bd4df 100644 --- a/src/api/type-defs/inputs/UpdateViewInput.js +++ b/src/api/type-defs/inputs/UpdateViewInput.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` input ViewDiffsInput { name: String description: String diff --git a/src/api/type-defs/objects/AutomationRule.js b/src/api/type-defs/objects/AutomationRule.js index a8f9cc29..0ad333ba 100644 --- a/src/api/type-defs/objects/AutomationRule.js +++ b/src/api/type-defs/objects/AutomationRule.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type AutomationEvent { type: String! label: String diff --git a/src/api/type-defs/objects/Batch.js b/src/api/type-defs/objects/Batch.js index 77e8a0b4..c17a9f2c 100644 --- a/src/api/type-defs/objects/Batch.js +++ b/src/api/type-defs/objects/Batch.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Batch { _id: String! projectId: String! diff --git a/src/api/type-defs/objects/BatchError.js b/src/api/type-defs/objects/BatchError.js index b6db3188..4eaec1d4 100644 --- a/src/api/type-defs/objects/BatchError.js +++ b/src/api/type-defs/objects/BatchError.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type BatchError { _id: String! batch: String! diff --git a/src/api/type-defs/objects/Filters.js b/src/api/type-defs/objects/Filters.js index 35b13d09..81c7e50f 100644 --- a/src/api/type-defs/objects/Filters.js +++ b/src/api/type-defs/objects/Filters.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Filters { cameras: [String] deployments: [String] diff --git a/src/api/type-defs/objects/Image.js b/src/api/type-defs/objects/Image.js index c59e2574..6879d650 100644 --- a/src/api/type-defs/objects/Image.js +++ b/src/api/type-defs/objects/Image.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Image { _id: ID! batchId: Int diff --git a/src/api/type-defs/objects/ImageError.js b/src/api/type-defs/objects/ImageError.js index 783d8b83..ebb25deb 100644 --- a/src/api/type-defs/objects/ImageError.js +++ b/src/api/type-defs/objects/ImageError.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ImageError { _id: String! batch: String diff --git a/src/api/type-defs/objects/Label.js b/src/api/type-defs/objects/Label.js index 42e73699..888bea18 100644 --- a/src/api/type-defs/objects/Label.js +++ b/src/api/type-defs/objects/Label.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Validation { validated: Boolean! validationDate: Date! diff --git a/src/api/type-defs/objects/Location.js b/src/api/type-defs/objects/Location.js index aaef0cf9..3e35106d 100644 --- a/src/api/type-defs/objects/Location.js +++ b/src/api/type-defs/objects/Location.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Point { type: String! coordinates: [Float!]! diff --git a/src/api/type-defs/objects/MLModel.js b/src/api/type-defs/objects/MLModel.js index 8b9738b2..2fa5f7ce 100644 --- a/src/api/type-defs/objects/MLModel.js +++ b/src/api/type-defs/objects/MLModel.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Categories { _id: String! name: String! diff --git a/src/api/type-defs/objects/PageInfo.js b/src/api/type-defs/objects/PageInfo.js index 616b6a16..5d2ff897 100644 --- a/src/api/type-defs/objects/PageInfo.js +++ b/src/api/type-defs/objects/PageInfo.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type PageInfo { previous: String hasPrevious: Boolean diff --git a/src/api/type-defs/objects/Project.js b/src/api/type-defs/objects/Project.js index 6f56a9e8..85042b11 100644 --- a/src/api/type-defs/objects/Project.js +++ b/src/api/type-defs/objects/Project.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Deployment { _id: ID! name: String! diff --git a/src/api/type-defs/objects/Scalars.js b/src/api/type-defs/objects/Scalars.js index 509d59d3..1145b3ec 100644 --- a/src/api/type-defs/objects/Scalars.js +++ b/src/api/type-defs/objects/Scalars.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` scalar Date scalar JSONObject `; diff --git a/src/api/type-defs/objects/View.js b/src/api/type-defs/objects/View.js index 3feb0cbe..d90b834e 100644 --- a/src/api/type-defs/objects/View.js +++ b/src/api/type-defs/objects/View.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type View { _id: String! name: String! diff --git a/src/api/type-defs/objects/WirelessCamera.js b/src/api/type-defs/objects/WirelessCamera.js index 8c89ccb0..3ccb74f4 100644 --- a/src/api/type-defs/objects/WirelessCamera.js +++ b/src/api/type-defs/objects/WirelessCamera.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ProjectRegistration { _id: ID! projectId: String! diff --git a/src/api/type-defs/payloads/BatchPayload.js b/src/api/type-defs/payloads/BatchPayload.js index 85eaf637..e319d634 100644 --- a/src/api/type-defs/payloads/BatchPayload.js +++ b/src/api/type-defs/payloads/BatchPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type BatchPayload { batch: Batch }`; diff --git a/src/api/type-defs/payloads/BatchesConnection.js b/src/api/type-defs/payloads/BatchesConnection.js index fce2baf4..89704866 100644 --- a/src/api/type-defs/payloads/BatchesConnection.js +++ b/src/api/type-defs/payloads/BatchesConnection.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type BatchesConnection { pageInfo: PageInfo batches: [Batch]! diff --git a/src/api/type-defs/payloads/CreateDeploymentPayload.js b/src/api/type-defs/payloads/CreateDeploymentPayload.js index 46e84574..3b664d98 100644 --- a/src/api/type-defs/payloads/CreateDeploymentPayload.js +++ b/src/api/type-defs/payloads/CreateDeploymentPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateDeploymentPayload { cameraConfig: CameraConfig }`; diff --git a/src/api/type-defs/payloads/CreateImagePayload.js b/src/api/type-defs/payloads/CreateImagePayload.js index a1e67287..286ee1d4 100644 --- a/src/api/type-defs/payloads/CreateImagePayload.js +++ b/src/api/type-defs/payloads/CreateImagePayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateImagePayload { image: Image }`; diff --git a/src/api/type-defs/payloads/CreateLabelsPayload.js b/src/api/type-defs/payloads/CreateLabelsPayload.js index 3354de9b..683b74e6 100644 --- a/src/api/type-defs/payloads/CreateLabelsPayload.js +++ b/src/api/type-defs/payloads/CreateLabelsPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateLabelsPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/CreateObjectPayload.js b/src/api/type-defs/payloads/CreateObjectPayload.js index c4ef47cd..ead03862 100644 --- a/src/api/type-defs/payloads/CreateObjectPayload.js +++ b/src/api/type-defs/payloads/CreateObjectPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateObjectPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/CreateUploadPayload.js b/src/api/type-defs/payloads/CreateUploadPayload.js index 1258c166..ba1a5e43 100644 --- a/src/api/type-defs/payloads/CreateUploadPayload.js +++ b/src/api/type-defs/payloads/CreateUploadPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateUploadPayload { batch: String! user: String! diff --git a/src/api/type-defs/payloads/CreateViewPayload.js b/src/api/type-defs/payloads/CreateViewPayload.js index 9448340b..55f4ad8a 100644 --- a/src/api/type-defs/payloads/CreateViewPayload.js +++ b/src/api/type-defs/payloads/CreateViewPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type CreateViewPayload { view: View }`; diff --git a/src/api/type-defs/payloads/DeleteDeploymentPayload.js b/src/api/type-defs/payloads/DeleteDeploymentPayload.js index 03a7fdf2..45fba7a1 100644 --- a/src/api/type-defs/payloads/DeleteDeploymentPayload.js +++ b/src/api/type-defs/payloads/DeleteDeploymentPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type DeleteDeploymentPayload { cameraConfig: CameraConfig }`; diff --git a/src/api/type-defs/payloads/DeleteLabelPayload.js b/src/api/type-defs/payloads/DeleteLabelPayload.js index c5701153..eb4ed690 100644 --- a/src/api/type-defs/payloads/DeleteLabelPayload.js +++ b/src/api/type-defs/payloads/DeleteLabelPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type DeleteLabelPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/DeleteObjectPayload.js b/src/api/type-defs/payloads/DeleteObjectPayload.js index d24f2951..67b7145a 100644 --- a/src/api/type-defs/payloads/DeleteObjectPayload.js +++ b/src/api/type-defs/payloads/DeleteObjectPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type DeleteObjectPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/DeleteViewPayload.js b/src/api/type-defs/payloads/DeleteViewPayload.js index 9020a55a..85f95a30 100644 --- a/src/api/type-defs/payloads/DeleteViewPayload.js +++ b/src/api/type-defs/payloads/DeleteViewPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type DeleteViewPayload { project: Project }`; diff --git a/src/api/type-defs/payloads/ExportPayload.js b/src/api/type-defs/payloads/ExportPayload.js index 938603d2..e311e02b 100644 --- a/src/api/type-defs/payloads/ExportPayload.js +++ b/src/api/type-defs/payloads/ExportPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ExportPayload { documentId: ID! }`; diff --git a/src/api/type-defs/payloads/ExportStatusPayload.js b/src/api/type-defs/payloads/ExportStatusPayload.js index 1f7d8a24..854eca25 100644 --- a/src/api/type-defs/payloads/ExportStatusPayload.js +++ b/src/api/type-defs/payloads/ExportStatusPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ExportError { message: String } diff --git a/src/api/type-defs/payloads/ImagesConnection.js b/src/api/type-defs/payloads/ImagesConnection.js index 4348c751..190a2897 100644 --- a/src/api/type-defs/payloads/ImagesConnection.js +++ b/src/api/type-defs/payloads/ImagesConnection.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ImagesConnection { pageInfo: PageInfo images: [Image]! diff --git a/src/api/type-defs/payloads/ImagesStats.js b/src/api/type-defs/payloads/ImagesStats.js index 2fb46ab2..1eb65bdf 100644 --- a/src/api/type-defs/payloads/ImagesStats.js +++ b/src/api/type-defs/payloads/ImagesStats.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type ReviewedCount { reviewed: Int! notReviewed: Int! diff --git a/src/api/type-defs/payloads/RegisterCameraPayload.js b/src/api/type-defs/payloads/RegisterCameraPayload.js index a46313be..3a1a4296 100644 --- a/src/api/type-defs/payloads/RegisterCameraPayload.js +++ b/src/api/type-defs/payloads/RegisterCameraPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type RegisterCameraPayload { project: Project wirelessCameras: [WirelessCamera] diff --git a/src/api/type-defs/payloads/StandardPayload.js b/src/api/type-defs/payloads/StandardPayload.js index 5c7ec095..58074047 100644 --- a/src/api/type-defs/payloads/StandardPayload.js +++ b/src/api/type-defs/payloads/StandardPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type StandardPayload { message: String }`; diff --git a/src/api/type-defs/payloads/UnregisterCameraPayload.js b/src/api/type-defs/payloads/UnregisterCameraPayload.js index c50a4d3c..4891b38e 100644 --- a/src/api/type-defs/payloads/UnregisterCameraPayload.js +++ b/src/api/type-defs/payloads/UnregisterCameraPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UnregisterCameraPayload { project: Project wirelessCameras: [WirelessCamera] diff --git a/src/api/type-defs/payloads/UpdateAutomationRulesPayload.js b/src/api/type-defs/payloads/UpdateAutomationRulesPayload.js index 9285a091..e1c8dbf7 100644 --- a/src/api/type-defs/payloads/UpdateAutomationRulesPayload.js +++ b/src/api/type-defs/payloads/UpdateAutomationRulesPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateAutomationRulesPayload { automationRules: [AutomationRule] }`; diff --git a/src/api/type-defs/payloads/UpdateDeploymentPayload.js b/src/api/type-defs/payloads/UpdateDeploymentPayload.js index 2ac41c7e..5010ee7c 100644 --- a/src/api/type-defs/payloads/UpdateDeploymentPayload.js +++ b/src/api/type-defs/payloads/UpdateDeploymentPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateDeploymentPayload { cameraConfig: CameraConfig }`; diff --git a/src/api/type-defs/payloads/UpdateLabelPayload.js b/src/api/type-defs/payloads/UpdateLabelPayload.js index 9aa4b6d2..a635b354 100644 --- a/src/api/type-defs/payloads/UpdateLabelPayload.js +++ b/src/api/type-defs/payloads/UpdateLabelPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateLabelPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/UpdateObjectPayload.js b/src/api/type-defs/payloads/UpdateObjectPayload.js index a3d98c9e..c68a8ff5 100644 --- a/src/api/type-defs/payloads/UpdateObjectPayload.js +++ b/src/api/type-defs/payloads/UpdateObjectPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateObjectPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/UpdateObjectsPayload.js b/src/api/type-defs/payloads/UpdateObjectsPayload.js index f09c3483..15682237 100644 --- a/src/api/type-defs/payloads/UpdateObjectsPayload.js +++ b/src/api/type-defs/payloads/UpdateObjectsPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateObjectsPayload { image: Image }`; diff --git a/src/api/type-defs/payloads/UpdateViewPayload.js b/src/api/type-defs/payloads/UpdateViewPayload.js index fc1bf443..918d6a4b 100644 --- a/src/api/type-defs/payloads/UpdateViewPayload.js +++ b/src/api/type-defs/payloads/UpdateViewPayload.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type UpdateViewPayload { view: View }`; diff --git a/src/api/type-defs/root/Mutation.js b/src/api/type-defs/root/Mutation.js index 599c2539..0e9e3d3a 100644 --- a/src/api/type-defs/root/Mutation.js +++ b/src/api/type-defs/root/Mutation.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Mutation { createImage(input: CreateImageInput!): CreateImagePayload diff --git a/src/api/type-defs/root/Query.js b/src/api/type-defs/root/Query.js index 260d4ed9..453f1e95 100644 --- a/src/api/type-defs/root/Query.js +++ b/src/api/type-defs/root/Query.js @@ -1,4 +1,4 @@ -module.exports = ` +export default ` type Query { projects(_ids: [String!]): [Project] image(input: QueryImageInput!): Image diff --git a/src/automation/alerts.js b/src/automation/alerts.js index fb3626eb..79deee73 100644 --- a/src/automation/alerts.js +++ b/src/automation/alerts.js @@ -1,6 +1,6 @@ -const { ApolloError } = require('apollo-server-errors'); -const { SESClient, SendEmailCommand } = require('@aws-sdk/client-ses'); -const { buildImgUrl, idMatch } = require('../api/db/models/utils'); +import { ApolloError } from 'apollo-server-errors'; +import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses'; +import { buildImgUrl, idMatch } from '../api/db/models/utils.js'; const ses = new SESClient({ apiVersion: '2010-12-01' }); @@ -67,6 +67,6 @@ const sendEmail = async (rule, image, context) => { } }; -module.exports = { +export { sendEmail }; diff --git a/src/automation/index.js b/src/automation/index.js index afcce788..0151e2fe 100644 --- a/src/automation/index.js +++ b/src/automation/index.js @@ -1,7 +1,7 @@ -const { ApolloError } = require('apollo-server-errors'); -const SQS = require('@aws-sdk/client-sqs'); -const utils = require('./utils'); -const { sendEmail } = require('./alerts'); +import { ApolloError } from 'apollo-server-errors'; +import SQS from '@aws-sdk/client-sqs'; +import utils from './utils.js'; +import { sendEmail } from './alerts.js'; const sqs = new SQS.SQSClient(); @@ -56,6 +56,6 @@ const handleEvent = async (payload, context) => { } }; -module.exports = { +export { handleEvent }; diff --git a/src/automation/utils.js b/src/automation/utils.js index 6566e0a4..a14676e7 100644 --- a/src/automation/utils.js +++ b/src/automation/utils.js @@ -79,7 +79,7 @@ const buildCallstack = async (payload, context) => { return callstack; }; -module.exports = { +export { buildCatConfig, buildCallstack }; diff --git a/src/config/config.js b/src/config/config.js index de7890cd..8e072b25 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -1,6 +1,7 @@ -const { ApolloError } = require('apollo-server-errors'); -const { SecretsManagerClient, GetSecretValueCommand } = require('@aws-sdk/client-secrets-manager'); -const { SSMClient, GetParametersCommand } = require('@aws-sdk/client-ssm'); +import { ApolloError } from 'apollo-server-errors'; +import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager'; +import { SSMClient, GetParametersCommand } from '@aws-sdk/client-ssm'; + const ssm = new SSMClient({ region: process.env.REGION }); const secrets = new SecretsManagerClient({ region: process.env.REGION }); @@ -106,7 +107,7 @@ async function getConfig() { } } -module.exports = { +export { localConfig, getConfig }; diff --git a/src/export/export.js b/src/export/export.js index 07279157..014a2690 100644 --- a/src/export/export.js +++ b/src/export/export.js @@ -1,17 +1,17 @@ -const stream = require('node:stream/promises'); -const { PassThrough } = require('node:stream'); -const { Upload } = require('@aws-sdk/lib-storage'); -const { S3Client, CreateMultipartUploadCommand, UploadPartCopyCommand, CompleteMultipartUploadCommand, GetObjectCommand, PutObjectCommand } = require('@aws-sdk/client-s3'); -const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); -const { ApolloError } = require('apollo-server-lambda'); -const { transform } = require('stream-transform'); -const { stringify } = require('csv-stringify'); -const { DateTime } = require('luxon'); -const { idMatch } = require('../api/db/models/utils'); -const generateImageModel = require('../api/db/models/Image'); -const generateProjectModel = require('../api/db/models/Project'); -const Image = require('../api/db/schemas/Image'); -const { buildPipeline } = require('../api/db/models/utils'); +import stream from 'node:stream/promises'; +import { PassThrough } from 'node:stream'; +import { Upload } from '@aws-sdk/lib-storage'; +import { S3Client, CreateMultipartUploadCommand, UploadPartCopyCommand, CompleteMultipartUploadCommand, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import { ApolloError } from 'apollo-server-lambda'; +import { transform } from 'stream-transform'; +import { stringify } from 'csv-stringify'; +import { DateTime } from 'luxon'; +import { idMatch } from '../api/db/models/utils.js'; +import generateImageModel from '../api/db/models/Image.js'; +import generateProjectModel from '../api/db/models/Project.js'; +import Image from '../api/db/schemas/Image.js'; +import { buildPipeline } from '../api/db/models/utils.js'; class Export { constructor({ projectId, documentId, filters, format }, config) { @@ -459,6 +459,6 @@ class Export { } -module.exports = { +export { Export }; diff --git a/src/export/handler.js b/src/export/handler.js index 13ac86b0..94c8ee85 100644 --- a/src/export/handler.js +++ b/src/export/handler.js @@ -1,9 +1,9 @@ -const { Export } = require('./export'); -const { getConfig } = require('../config/config'); -const { connectToDatabase } = require('../api/db/connect'); -const { ApolloError } = require('apollo-server-lambda'); +import { Export } from './export.js'; +import { getConfig } from '../config/config.js'; +import { connectToDatabase } from '../api/db/connect.js'; +import { ApolloError } from 'apollo-server-lambda'; -exports.export = async (event) => { +export default async function(event) { if (!event.Records || !event.Records.length) return; const config = await getConfig(); await connectToDatabase(config); diff --git a/src/ml/handler.js b/src/ml/handler.js index f96a3b4b..5381c5d4 100644 --- a/src/ml/handler.js +++ b/src/ml/handler.js @@ -1,6 +1,6 @@ -const { GraphQLClient, gql } = require('graphql-request'); -const { modelInterfaces } = require('./modelInterfaces'); -const { getConfig } = require('../config/config'); +import { GraphQLClient, gql } from 'graphql-request'; +import { modelInterfaces } from './modelInterfaces.js'; +import { getConfig } from '../config/config.js'; async function requestCreateLabels(input, config) { const variables = { input: input }; diff --git a/src/ml/modelInterfaces.js b/src/ml/modelInterfaces.js index 4d552329..1d97b9df 100644 --- a/src/ml/modelInterfaces.js +++ b/src/ml/modelInterfaces.js @@ -1,5 +1,5 @@ -const { buildImgUrl } = require('../api/db/models/utils'); -const SM = require('@aws-sdk/client-sagemaker-runtime'); +import { buildImgUrl } from '../api/db/models/utils.js'; +import SM from '@aws-sdk/client-sagemaker-runtime'; const _getImage = async (image, config) => { const url = 'http://' + buildImgUrl(image, config); @@ -170,4 +170,4 @@ modelInterfaces.set('megadetector_v5b', megadetector); modelInterfaces.set('mirav2', mirav2); modelInterfaces.set('nzdoc', nzdoc); -module.exports = { modelInterfaces }; +export { modelInterfaces }; diff --git a/src/scripts/backupConfig.js b/src/scripts/backupConfig.js index 2c92ef1b..5b034c7e 100644 --- a/src/scripts/backupConfig.js +++ b/src/scripts/backupConfig.js @@ -6,6 +6,6 @@ const backupConfig = { BACKUP_DIR: '/backups' }; -module.exports = { +export { backupConfig }; diff --git a/src/scripts/createProject.js b/src/scripts/createProject.js index 656e41e4..d17461fe 100644 --- a/src/scripts/createProject.js +++ b/src/scripts/createProject.js @@ -1,7 +1,7 @@ -const { ApolloError } = require('apollo-server-errors'); -const { getConfig } = require('../config/config'); -const { connectToDatabase } = require('../api/db/connect'); -const generateProjectModel = require('../api/db/models/Project'); +import { ApolloError } from 'apollo-server-errors'; +import { getConfig } from '../config/config.js'; +import { connectToDatabase } from '../api/db/connect.js'; +import generateProjectModel from '../api/db/models/Project.js'; const defaultViewsConfig = [{ name: 'All images', diff --git a/src/scripts/exportDb.js b/src/scripts/exportDb.js index 41b8e06d..90df3e24 100644 --- a/src/scripts/exportDb.js +++ b/src/scripts/exportDb.js @@ -1,13 +1,16 @@ -const fs = require('fs'); -const path = require('path'); -const util = require('util'); -const execSync = util.promisify(require('child_process').execSync); -const appRoot = require('app-root-path'); -const { DateTime } = require('luxon'); -const { ApolloError } = require('apollo-server-errors'); -const { connectToDatabase } = require('../api/db/connect'); -const { getConfig } = require('../config/config'); -const { backupConfig } = require('./backupConfig'); +import fs from 'node:fs'; +import path from 'node:path'; +import util from 'node:util'; +import { execSync as eS } from 'child_process'; + +import appRoot from 'app-root-path'; +import { DateTime } from 'luxon'; +import { ApolloError } from 'apollo-server-errors'; +import { connectToDatabase } from '../api/db/connect.js'; +import { getConfig } from '../config/config.js'; +import { backupConfig } from './backupConfig.js'; + +const execSync = util.promisify(eS); async function listCollections(config) { let db; diff --git a/src/scripts/operations.js b/src/scripts/operations.js index 0120a93a..498e7f6d 100644 --- a/src/scripts/operations.js +++ b/src/scripts/operations.js @@ -1,6 +1,8 @@ -const Image = require('../api/db/schemas/Image'); -const ObjectId = require('mongoose').Types.ObjectId; -const { DateTime } = require('luxon'); +import Image from '../api/db/schemas/Image.js'; +import Mongoose from 'mongoose'; +import { DateTime } from 'luxon'; + +const ObjectId = Mongoose.Types.ObjectId; const operations = { @@ -172,6 +174,7 @@ const operations = { } }; -module.exports = { + +export { operations }; diff --git a/src/scripts/seedDb.js b/src/scripts/seedDb.js index 5252351a..aa29d39f 100644 --- a/src/scripts/seedDb.js +++ b/src/scripts/seedDb.js @@ -1,8 +1,8 @@ -const { ApolloError } = require('apollo-server-errors'); -const { getConfig } = require('../config/config'); -const { connectToDatabase } = require('../api/db/connect'); -const generateProjectModel = require('../api/db/models/Project'); -const generateMLModelModel = require('../api/db/models/MLModel'); +import { ApolloError } from 'apollo-server-errors'; +import { getConfig } from '../config/config.js'; +import { connectToDatabase } from '../api/db/connect.js'; +import generateProjectModel from '../api/db/models/Project.js'; +import generateMLModelModel from '../api/db/models/MLModel.js'; const defaultMLModelsConfig = [ { diff --git a/src/scripts/updateDocuments.js b/src/scripts/updateDocuments.js index ebac7cb8..08f51e2a 100644 --- a/src/scripts/updateDocuments.js +++ b/src/scripts/updateDocuments.js @@ -1,13 +1,13 @@ -const fs = require('fs'); -const path = require('path'); -const { ApolloError } = require('apollo-server-errors'); -const { DateTime } = require('luxon'); -const appRoot = require('app-root-path'); -const prompt = require('prompt'); -const { connectToDatabase } = require('../api/db/connect'); -const { getConfig } = require('../config/config'); -const { backupConfig } = require('./backupConfig'); -const { operations } = require('./operations'); +import fs from 'node:fs'; +import path from 'node:path'; +import { ApolloError } from 'apollo-server-errors'; +import { DateTime } from 'luxon'; +import appRoot from 'app-root-path'; +import prompt from 'prompt'; +import { connectToDatabase } from '../api/db/connect.js'; +import { getConfig } from '../config/config.js'; +import { backupConfig } from './backupConfig.js'; +import { operations } from './operations.js'; const property = { name: 'confirmation', @@ -70,7 +70,7 @@ async function updateDocuments() { await createLogFile('images', matchingImageIds, op); } else { - const msg = `There was a discrepency between the number of matching + const msg = `There was a discrepency between the number of matching documents and the number of modified documents`; throw new ApolloError(msg); } diff --git a/test/ml-inference-mega.test.js b/test/ml-inference-mega.test.js index b3a4e57f..81ef8178 100644 --- a/test/ml-inference-mega.test.js +++ b/test/ml-inference-mega.test.js @@ -1,11 +1,11 @@ -const tape = require('tape'); -const fs = require('node:fs'); -const { MockAgent, setGlobalDispatcher } = require('undici'); -const path = require('path'); -const Sinon = require('sinon'); -const SM = require('@aws-sdk/client-sagemaker-runtime'); - -const { modelInterfaces } = require('../src/ml/modelInterfaces.js'); +import tape from 'tape'; +import fs from 'node:fs'; +import { MockAgent, setGlobalDispatcher } from 'undici'; +import path from 'node:path'; +import Sinon from 'sinon'; +import SM from '@aws-sdk/client-sagemaker-runtime'; + +import { modelInterfaces } from '../src/ml/modelInterfaces.js'; process.env.REGION = 'us-east-2'; process.env.STAGE = 'dev'; From 4390aff09c849bea312639ac2db16b27815e01c8 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 21 Jul 2023 16:27:46 -0600 Subject: [PATCH 06/25] Fix Lints --- src/api/db/models/Camera.js | 12 ++++++------ src/api/handler.js | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/api/db/models/Camera.js b/src/api/db/models/Camera.js index ac63bc55..43e56b52 100644 --- a/src/api/db/models/Camera.js +++ b/src/api/db/models/Camera.js @@ -1,9 +1,9 @@ -import { ApolloError, ForbiddenError } from 'apollo-server-errors'); -import { CameraRegistrationError } from '../../errors'); -import WirelessCamera from '../schemas/WirelessCamera'); -import retry from 'async-retry'); -import { WRITE_CAMERA_REGISTRATION_ROLES } from '../../auth/roles'); -import { hasRole, idMatch } from './utils'); +import { ApolloError, ForbiddenError } from 'apollo-server-errors'; +import { CameraRegistrationError } from '../../errors'; +import WirelessCamera from '../schemas/WirelessCamera'; +import retry from 'async-retry'; +import { WRITE_CAMERA_REGISTRATION_ROLES } from '../../auth/roles'; +import { hasRole, idMatch } from './utils'; const generateCameraModel = ({ user } = {}) => ({ getWirelessCameras: async (_ids) => { diff --git a/src/api/handler.js b/src/api/handler.js index 72d3b1c3..970932cb 100644 --- a/src/api/handler.js +++ b/src/api/handler.js @@ -12,7 +12,7 @@ import Query from './resolvers/Query.js'; import Mutation from './resolvers/Mutation.js'; import Fields from './resolvers/Fields.js'; import Scalars from './resolvers/Scalars.js'; -import typeDefs from './type-defs.js'; +import typeDefs from './type-defs/index.js'; import { getConfig } from '../config/config.js'; import { connectToDatabase } from './db/connect.js'; import { getUserInfo } from './auth/authorization.js'; @@ -54,7 +54,7 @@ const context = async ({ event, context }) => { }; }; -const server = new ApolloServer({ +const srv = new ApolloServer({ includeStacktraceInErrorResponses: process.env.STAGE === 'dev', typeDefs, resolvers, @@ -67,7 +67,7 @@ const server = new ApolloServer({ } }); -const server = server.createHandler(); +const server = srv.createHandler(); export { server From 96f2fb925691a73c494b7e797c35407c46167ccb Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 09:10:04 -0600 Subject: [PATCH 07/25] Finalize ES6 Refactor --- package-lock.json | 37 +++++++++++----------- src/api/db/models/Batch.js | 8 ++--- src/api/db/models/BatchError.js | 6 ++-- src/api/db/models/Camera.js | 8 ++--- src/api/db/models/Image.js | 56 +++++++++++++++++++-------------- src/api/db/models/ImageError.js | 6 ++-- src/api/db/schemas/Image.js | 9 ++++-- src/api/db/schemas/Project.js | 4 +-- src/api/errors.js | 2 +- src/api/resolvers/Fields.js | 2 +- src/api/resolvers/Scalars.js | 2 +- src/api/type-defs/index.js | 12 ++++--- src/automation/index.js | 9 ++++-- 13 files changed, 90 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec415ab3..69832f32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -927,6 +927,7 @@ "version": "3.374.0", "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.374.0.tgz", "integrity": "sha512-Ta7YEFcgc+d4Rt7foV/fbgnXP8IgMAb+JVzZVYcHTwQf836+PdjGfKbamYkh8cM2xE47hzZqPe+BacCjePqH7g==", + "deprecated": "This package has moved to @smithy/hash-stream-node", "dependencies": { "@smithy/hash-stream-node": "^1.0.1", "tslib": "^2.5.0" @@ -1147,9 +1148,9 @@ } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.374.0.tgz", - "integrity": "sha512-WtQhTHsA/JGiDVZA3wRav1/HIBK22HkD+JX5ECZX85tC9dA/1n0ID8joHsjXWIo7aaMH2IPNbfgv/ECAzEtTig==", + "version": "3.375.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.375.0.tgz", + "integrity": "sha512-C6hAM7Vl7DjO5Txs+9infZlEqelVH3piCu+GPox+x2IiELOdQ/PeaOcHnmaejNyAwF/oS0OYbRmdCI04bUYQ8Q==", "dependencies": { "@aws-sdk/signature-v4-multi-region": "3.370.0", "@aws-sdk/types": "3.370.0", @@ -1339,9 +1340,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", + "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -3183,9 +3184,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "20.4.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", - "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" + "version": "20.4.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.4.tgz", + "integrity": "sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -3893,9 +3894,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1419.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1419.0.tgz", - "integrity": "sha512-JcD8gb8I5fH/TGdObG8UYyyXfnqVYk50wx9TGao6G/xBYT3YoYeQXj020W568YQpO+dBKRuR4U2LRYdKBNmQ/g==", + "version": "2.1420.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1420.0.tgz", + "integrity": "sha512-BvGzkKGgOXNj9WAeazvOLu48sCbU52mKLGIY5AjBKX4EuY8APcKKvl1R54kdUoJDnMwv0HwQpGvrVvLTDdOv/A==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -4320,9 +4321,9 @@ } }, "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "dev": true, "engines": { "node": ">=6" @@ -6105,9 +6106,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", diff --git a/src/api/db/models/Batch.js b/src/api/db/models/Batch.js index 186a363d..930b4c12 100644 --- a/src/api/db/models/Batch.js +++ b/src/api/db/models/Batch.js @@ -9,7 +9,7 @@ import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; import Batch from '../schemas/Batch.js'; import BatchError from '../schemas/BatchError.js'; import retry from 'async-retry'; -import utils from './utils.js'; +import { hasRole } from './utils.js'; const generateBatchModel = ({ user } = {}) => ({ queryByFilter: async (input) => { @@ -90,7 +90,7 @@ const generateBatchModel = ({ user } = {}) => ({ }, get stopBatch() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { @@ -131,7 +131,7 @@ const generateBatchModel = ({ user } = {}) => ({ }, get updateBatch() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { @@ -162,7 +162,7 @@ const generateBatchModel = ({ user } = {}) => ({ }, get createUpload() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { diff --git a/src/api/db/models/BatchError.js b/src/api/db/models/BatchError.js index 6faffbff..80ac9081 100644 --- a/src/api/db/models/BatchError.js +++ b/src/api/db/models/BatchError.js @@ -1,12 +1,12 @@ import { ApolloError, ForbiddenError } from 'apollo-server-errors'; import { WRITE_IMAGES_ROLES } from '../../auth/roles.js'; import BatchError from '../schemas/BatchError.js'; -import retry from 'async-retey'; -import utils from './utils.js'; +import retry from 'async-retry'; +import { hasRole } from './utils.js'; const generateBatchErrorModel = ({ user } = {}) => ({ get createError() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { diff --git a/src/api/db/models/Camera.js b/src/api/db/models/Camera.js index 43e56b52..fc4ca694 100644 --- a/src/api/db/models/Camera.js +++ b/src/api/db/models/Camera.js @@ -1,9 +1,9 @@ import { ApolloError, ForbiddenError } from 'apollo-server-errors'; -import { CameraRegistrationError } from '../../errors'; -import WirelessCamera from '../schemas/WirelessCamera'; +import { CameraRegistrationError } from '../../errors.js'; +import WirelessCamera from '../schemas/WirelessCamera.js'; import retry from 'async-retry'; -import { WRITE_CAMERA_REGISTRATION_ROLES } from '../../auth/roles'; -import { hasRole, idMatch } from './utils'; +import { WRITE_CAMERA_REGISTRATION_ROLES } from '../../auth/roles.js'; +import { hasRole, idMatch } from './utils.js'; const generateCameraModel = ({ user } = {}) => ({ getWirelessCameras: async (_ids) => { diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index f08e8042..ae48aa7e 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -10,15 +10,25 @@ import Image from '../schemas/Image.js'; import ImageError from '../schemas/ImageError.js'; import WirelessCamera from '../schemas/WirelessCamera.js'; import Batch from '../schemas/Batch.js'; -import automation from '../../../automation.js'; +import { handleEvent } from '../../../automation/index.js'; import { WRITE_OBJECTS_ROLES, WRITE_IMAGES_ROLES, EXPORT_DATA_ROLES } from '../../auth/roles.js'; -import utils from './utils.js'; +import { + hasRole, + buildPipeline, + mapImgToDep, + sanitizeMetadata, + isLabelDupe, + createImageRecord, + createLabelRecord, + isImageReviewed, + findActiveProjReg +} from './utils.js'; import { idMatch } from './utils.js'; import retry from 'async-retry'; const generateImageModel = ({ user } = {}) => ({ countImages: async (input) => { - const pipeline = utils.buildPipeline(input.filters, user['curr_project']); + const pipeline = buildPipeline(input.filters, user['curr_project']); pipeline.push({ $count: 'count' }); const res = await Image.aggregate(pipeline); return res[0] ? res[0].count : 0; @@ -46,7 +56,7 @@ const generateImageModel = ({ user } = {}) => ({ queryByFilter: async (input) => { try { const result = await MongoPaging.aggregate(Image.collection, { - aggregation: utils.buildPipeline(input.filters, user['curr_project']), + aggregation: buildPipeline(input.filters, user['curr_project']), limit: input.limit, paginatedField: input.paginatedField, sortAscending: input.sortAscending, @@ -99,11 +109,11 @@ const generateImageModel = ({ user } = {}) => ({ // some issues occur due to the camera record not being created fast enough // for some of the new images? Investigate get createImage() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input, context) => { const successfulOps = []; - const md = utils.sanitizeMetadata(input.md); + const md = sanitizeMetadata(input.md); let projectId = 'default_project'; // Images will be attempted to be stored in the database to preserve the state of the image @@ -144,7 +154,7 @@ const generateImageModel = ({ user } = {}) => ({ successfulOps.push({ op: 'cam-created', info: { cameraId } }); } else { - projectId = utils.findActiveProjReg(existingCam); + projectId = findActiveProjReg(existingCam); } } @@ -155,7 +165,7 @@ const generateImageModel = ({ user } = {}) => ({ let deployment = { _id: null, timezone: project.timezone }; try { - deployment = utils.mapImgToDep(md, camConfig, project.timezone); + deployment = mapImgToDep(md, camConfig, project.timezone); } catch (err) { if (err.code === 'NoDeployments') errors.push(err); else throw err; @@ -175,12 +185,12 @@ const generateImageModel = ({ user } = {}) => ({ const image = await retry(async (bail, attempt) => { if (attempt > 1) console.log(`Retrying saveImage! Try #: ${attempt}`); - const newImage = utils.createImageRecord(md); + const newImage = createImageRecord(md); return await newImage.save(); }, { retries: 2 }); if (!errors.length) { - await automation.handleEvent({ event: 'image-added', image }, context); + await handleEvent({ event: 'image-added', image }, context); } else { for (let i = 0; i < errors.length; i++) { errors[i] = new ImageError({ image: image._id, batch: md.batchId, error: errors[i].message }); @@ -224,7 +234,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get createObject() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async ({ imageId, object }) => { @@ -253,7 +263,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get updateObject() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async ({ imageId, objectId, diffs }) => { @@ -288,7 +298,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get deleteObject() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async ({ imageId, objectId }) => { @@ -319,7 +329,7 @@ const generateImageModel = ({ user } = {}) => ({ // TODO: make this only accept a single label at a time // to make dealing with errors simpler get createLabels() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input, context) => { const operation = async ({ imageId, objectId, label }) => { @@ -327,9 +337,9 @@ const generateImageModel = ({ user } = {}) => ({ // find image, create label record const image = await this.queryById(imageId); - if (utils.isLabelDupe(image, label)) throw new DuplicateLabelError(); + if (isLabelDupe(image, label)) throw new DuplicateLabelError(); const authorId = label.mlModel || label.userId; - const labelRecord = utils.createLabelRecord(label, authorId); + const labelRecord = createLabelRecord(label, authorId); // if objectId was specified, find object and save label to it // else try to match to existing object bbox and merge label into that @@ -367,7 +377,7 @@ const generateImageModel = ({ user } = {}) => ({ const res = await operation({ ...input, label }); image = res.image; if (label.mlModel) { - await automation.handleEvent({ + await handleEvent({ event: 'label-added', label: res.newLabel, image @@ -385,7 +395,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get updateLabel() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { @@ -416,7 +426,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get deleteLabel() { - if (!utils.hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_OBJECTS_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async ({ imageId, objectId, labelId }) => { @@ -454,13 +464,13 @@ const generateImageModel = ({ user } = {}) => ({ let multiReviewerCount = 0; try { - const pipeline = utils.buildPipeline(input.filters, user['curr_project']); + const pipeline = buildPipeline(input.filters, user['curr_project']); const images = await Image.aggregate(pipeline); imageCount = images.length; for (const img of images) { // increment reviewedCount - utils.isImageReviewed(img) ? reviewed++ : notReviewed++; + isImageReviewed(img) ? reviewed++ : notReviewed++; // build reviwer list let reviewers = []; @@ -515,7 +525,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get export() { - if (!utils.hasRole(user, EXPORT_DATA_ROLES)) throw new ForbiddenError; + if (!hasRole(user, EXPORT_DATA_ROLES)) throw new ForbiddenError; return async (input, context) => { const s3 = new S3.S3Client({ region: process.env.AWS_DEFAULT_REGION }); @@ -556,7 +566,7 @@ const generateImageModel = ({ user } = {}) => ({ }, get getExportStatus() { - if (!utils.hasRole(user, EXPORT_DATA_ROLES)) throw new ForbiddenError; + if (!hasRole(user, EXPORT_DATA_ROLES)) throw new ForbiddenError; return async ({ documentId }, context) => { const s3 = new S3.S3Client({ region: process.env.AWS_DEFAULT_REGION }); const bucket = context.config['/EXPORTS/EXPORTED_DATA_BUCKET']; diff --git a/src/api/db/models/ImageError.js b/src/api/db/models/ImageError.js index 506c4c1f..71f50908 100644 --- a/src/api/db/models/ImageError.js +++ b/src/api/db/models/ImageError.js @@ -2,11 +2,11 @@ import { ApolloError, ForbiddenError } from 'apollo-server-errors'; import { WRITE_IMAGES_ROLES } from '../../auth/roles.js'; import ImageError from '../schemas/ImageError.js'; import retry from 'async-retry'; -import utils from './utils.js'; +import { hasRole } from './utils.js'; const generateImageErrorModel = ({ user } = {}) => ({ get createError() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { @@ -40,7 +40,7 @@ const generateImageErrorModel = ({ user } = {}) => ({ }, get clearErrors() { - if (!utils.hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; return async (input) => { const operation = async (input) => { diff --git a/src/api/db/schemas/Image.js b/src/api/db/schemas/Image.js index a5e27542..380ec4a4 100644 --- a/src/api/db/schemas/Image.js +++ b/src/api/db/schemas/Image.js @@ -1,6 +1,9 @@ import mongoose from 'mongoose'; import MongoPaging from 'mongo-cursor-pagination'; -import shared from './shared.js'; +import { + LocationSchema, + ObjectSchema +} from './shared/index.js'; const Schema = mongoose.Schema; @@ -29,9 +32,9 @@ const ImageSchema = new Schema({ mimeType: { type: String }, userSetData: { type: Map, of: String }, model: { type: String }, - location: { type: shared.LocationSchema }, + location: { type: LocationSchema }, triggerSource: { type: String }, - objects: { type: [shared.ObjectSchema] } + objects: { type: [ObjectSchema] } }); ImageSchema.index( diff --git a/src/api/db/schemas/Project.js b/src/api/db/schemas/Project.js index 98d3a736..75b17c19 100644 --- a/src/api/db/schemas/Project.js +++ b/src/api/db/schemas/Project.js @@ -1,5 +1,5 @@ import mongoose from 'mongoose'; -import shared = from './shared.js'; +import { LocationSchema } from './shared/index.js'; const Schema = mongoose.Schema; @@ -54,7 +54,7 @@ const ViewSchema = new Schema({ const DeploymentSchema = new Schema({ name: { type: String, required: true }, description: { type: String }, - location: { type: shared.LocationSchema }, + location: { type: LocationSchema }, timezone: { type: String, required: true }, startDate: { type: Date }, editable: { type: Boolean } diff --git a/src/api/errors.js b/src/api/errors.js index 01bdae2e..475ee9a2 100644 --- a/src/api/errors.js +++ b/src/api/errors.js @@ -3,7 +3,7 @@ import { formatApolloErrors, toApolloError } from 'apollo-server-errors'; -import { GraphQLError } from 'graphql/error/GraphQLError'; +import { GraphQLError } from 'graphql/error/GraphQLError.js'; // Apollo errors docs: // https://www.apollographql.com/docs/apollo-server/data/errors/ diff --git a/src/api/resolvers/Fields.js b/src/api/resolvers/Fields.js index f998d9ff..477e2e14 100644 --- a/src/api/resolvers/Fields.js +++ b/src/api/resolvers/Fields.js @@ -24,7 +24,7 @@ const Project = { } }; -export { +export default { Project // Camera, // Image, diff --git a/src/api/resolvers/Scalars.js b/src/api/resolvers/Scalars.js index 653171f7..312c80b4 100644 --- a/src/api/resolvers/Scalars.js +++ b/src/api/resolvers/Scalars.js @@ -26,7 +26,7 @@ const Date = new GraphQLScalarType({ } }); -export { +export default { JSONObject, Date }; diff --git a/src/api/type-defs/index.js b/src/api/type-defs/index.js index 46495366..faed2444 100644 --- a/src/api/type-defs/index.js +++ b/src/api/type-defs/index.js @@ -2,15 +2,17 @@ import fs from 'node:fs'; import path from 'node:path'; const typeDefStrings = []; -for (const entry_top of fs.readdirSync(path.resolve(__dirname))) { - if (!fs.lstatSync(path.resolve(__dirname, entry_top)).isDirectory()) continue; +const base = new URL(path.parse(import.meta.url).dir).pathname; - for (const entry_sub of fs.readdirSync(path.resolve(__dirname, entry_top))) { - const full = path.resolve(__dirname, entry_top, entry_sub); +for (const entry_top of fs.readdirSync(base)) { + if (!fs.lstatSync(path.resolve(base, entry_top)).isDirectory()) continue; + + for (const entry_sub of fs.readdirSync(path.resolve(base, entry_top))) { + const full = path.resolve(path.resolve(base, entry_top, entry_sub)); if (!fs.lstatSync(full).isFile()) continue; if (path.parse(full).ext !== '.js') continue; - typeDefStrings.push((await import(path.resolve(__dirname, entry_top, entry_sub))).default); + typeDefStrings.push((await import(path.resolve(base, entry_top, entry_sub))).default); } } diff --git a/src/automation/index.js b/src/automation/index.js index 0151e2fe..908e64ba 100644 --- a/src/automation/index.js +++ b/src/automation/index.js @@ -1,6 +1,9 @@ import { ApolloError } from 'apollo-server-errors'; import SQS from '@aws-sdk/client-sqs'; -import utils from './utils.js'; +import { + buildCatConfig, + buildCallstack +} from './utils.js'; import { sendEmail } from './alerts.js'; const sqs = new SQS.SQSClient(); @@ -11,7 +14,7 @@ const executeRule = { const mlModel = rule.action.mlModel; const modelSources = await context.models.MLModel.getMLModels([mlModel]); const modelSource = modelSources[0]; - const catConfig = utils.buildCatConfig(modelSource, rule); + const catConfig = buildCatConfig(modelSource, rule); const message = { modelSource, catConfig, ...payload }; @@ -43,7 +46,7 @@ const executeRule = { const handleEvent = async (payload, context) => { try { - const callstack = await utils.buildCallstack(payload, context); + const callstack = await buildCallstack(payload, context); if (callstack.length === 0) return; console.log(`automation rule callstack for ${payload.image.originalFileName}: `, callstack); From c7406f6c8eada84f153735d8abdffd4bc0fd726b Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 09:11:12 -0600 Subject: [PATCH 08/25] Update mongoose to bugfixed version --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69832f32..9aab8da0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8494,9 +8494,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mongoose": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.0.tgz", - "integrity": "sha512-oHE1eqodfKzugXRlQxpo+msIea7jPcRoayDuEMr50+bYwM/juA5f+1stjkWlXcg6vo1PdJFVA6DGaKOPLuG5mA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.1.tgz", + "integrity": "sha512-o3E5KHHiHdaiwCJG3+9r70sncRKki71Ktf/TfXdW6myu+53rtZ56uLl5ylkQiCf60V3COJuOeekcxXVsjQ7cBA==", "dependencies": { "bson": "^5.4.0", "kareem": "2.5.1", From 0a19ac2e31a3825c3266125a28f385adbdb48dbe Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 11:20:15 -0600 Subject: [PATCH 09/25] Switch to ECR Image Call --- .github/workflows/test.yml | 4 ++-- Dockerfile | 17 ++--------------- Dockerfile-test | 18 ++++++++++++++++++ serverless.yml | 24 ++++++++++++++++++------ 4 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 Dockerfile-test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 27ec680b..51b627d5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,7 +22,7 @@ jobs: ref: ${{github.event.pull_request.head.sha || github.sha}} - name: Docker API Build - run: docker build -t api . + run: docker build -t test -f Dockerfile-test . - name: Docker API Test Run - run: docker run api + run: docker run test diff --git a/Dockerfile b/Dockerfile index 29a25961..c7023e84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,5 @@ -FROM ubuntu:22.04 +FROM public.ecr.aws/lambda/nodejs:18 -ENV HOME=/home/animl -WORKDIR $HOME -COPY ./ $HOME/ - -RUN apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y curl git - -RUN export NODEV='18.16.0' \ - && curl "https://nodejs.org/dist/v${NODEV}/node-v${NODEV}-linux-x64.tar.gz" | tar -xzv \ - && cp ./node-v${NODEV}-linux-x64/bin/node /usr/bin/ \ - && ./node-v${NODEV}-linux-x64/bin/npm install -g npm +COPY . ${LAMBDA_TASK_ROOT}/ RUN npm install - -CMD npm run lint && npm test - diff --git a/Dockerfile-test b/Dockerfile-test new file mode 100644 index 00000000..29a25961 --- /dev/null +++ b/Dockerfile-test @@ -0,0 +1,18 @@ +FROM ubuntu:22.04 + +ENV HOME=/home/animl +WORKDIR $HOME +COPY ./ $HOME/ + +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y curl git + +RUN export NODEV='18.16.0' \ + && curl "https://nodejs.org/dist/v${NODEV}/node-v${NODEV}-linux-x64.tar.gz" | tar -xzv \ + && cp ./node-v${NODEV}-linux-x64/bin/node /usr/bin/ \ + && ./node-v${NODEV}-linux-x64/bin/npm install -g npm + +RUN npm install + +CMD npm run lint && npm test + diff --git a/serverless.yml b/serverless.yml index 677059eb..3aa4bbae 100644 --- a/serverless.yml +++ b/serverless.yml @@ -1,7 +1,6 @@ org: animl app: animl service: animl-api -# variablesResolutionMode: 20210326 plugins: - serverless-offline @@ -12,7 +11,6 @@ package: provider: name: aws - runtime: nodejs18.x stage: ${opt:stage, 'dev'} region: us-west-2 profile: animl @@ -20,6 +18,12 @@ provider: REGION: ${self:provider.region} STAGE: ${self:provider.stage} ACCOUNT: ${aws:accountId} + + ecr: + images: + base: + path: . + iam: role: statements: @@ -90,7 +94,9 @@ provider: functions: graphql: - handler: src/api/handler.server + image: + name: base + command: src/api/handler.server events: - http: path: / @@ -113,7 +119,9 @@ functions: memorySize: 3008 timeout: 30 inference: - handler: src/ml/handler.inference + image: + name: base + command: src/ml/handler.inference reservedConcurrency: 20 events: - sqs: @@ -125,11 +133,15 @@ functions: functionResponseType: ReportBatchItemFailures timeout: 120 batchinference: - handler: src/ml/handler.inference + image: + name: base + command: src/ml/handler.inference reservedConcurrency: 8 timeout: 120 export: - handler: src/export/handler.export + image: + name: base + command: src/export/handler.export reservedConcurrency: 10 events: - sqs: From c5155ad4b9130030dda262737e50b0e3aa5107e9 Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 11:27:44 -0600 Subject: [PATCH 10/25] Fix Lint Errors --- src/api/db/connect.js | 6 +++--- src/api/db/models/Image.js | 18 +++++++++--------- src/api/db/schemas/Image.js | 4 ++-- src/api/handler.js | 6 +++--- src/automation/index.js | 4 ++-- src/export/handler.js | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/api/db/connect.js b/src/api/db/connect.js index 0284d2c8..dce1e5fe 100644 --- a/src/api/db/connect.js +++ b/src/api/db/connect.js @@ -27,8 +27,8 @@ async function connectToDatabase(config) { } catch (err) { throw new ApolloError(err); } -}; +} export { - connectToDatabase -} + connectToDatabase +}; diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index ae48aa7e..e1f79a3e 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -13,15 +13,15 @@ import Batch from '../schemas/Batch.js'; import { handleEvent } from '../../../automation/index.js'; import { WRITE_OBJECTS_ROLES, WRITE_IMAGES_ROLES, EXPORT_DATA_ROLES } from '../../auth/roles.js'; import { - hasRole, - buildPipeline, - mapImgToDep, - sanitizeMetadata, - isLabelDupe, - createImageRecord, - createLabelRecord, - isImageReviewed, - findActiveProjReg + hasRole, + buildPipeline, + mapImgToDep, + sanitizeMetadata, + isLabelDupe, + createImageRecord, + createLabelRecord, + isImageReviewed, + findActiveProjReg } from './utils.js'; import { idMatch } from './utils.js'; import retry from 'async-retry'; diff --git a/src/api/db/schemas/Image.js b/src/api/db/schemas/Image.js index 380ec4a4..81487ca8 100644 --- a/src/api/db/schemas/Image.js +++ b/src/api/db/schemas/Image.js @@ -1,8 +1,8 @@ import mongoose from 'mongoose'; import MongoPaging from 'mongo-cursor-pagination'; import { - LocationSchema, - ObjectSchema + LocationSchema, + ObjectSchema } from './shared/index.js'; const Schema = mongoose.Schema; diff --git a/src/api/handler.js b/src/api/handler.js index 970932cb..1eff5061 100644 --- a/src/api/handler.js +++ b/src/api/handler.js @@ -5,7 +5,7 @@ import generateProjectModel from './db/models/Project.js'; import generateImageModel from './db/models/Image.js'; import generateCameraModel from './db/models/Camera.js'; import generateMLModelModel from './db/models/MLModel.js'; -import generateBatchModel from'./db/models/Batch.js'; +import generateBatchModel from './db/models/Batch.js'; import generateBatchErrorModel from './db/models/BatchError.js'; import generateImageErrorModel from './db/models/ImageError.js'; import Query from './resolvers/Query.js'; @@ -70,5 +70,5 @@ const srv = new ApolloServer({ const server = srv.createHandler(); export { - server -} + server +}; diff --git a/src/automation/index.js b/src/automation/index.js index 908e64ba..98216006 100644 --- a/src/automation/index.js +++ b/src/automation/index.js @@ -1,8 +1,8 @@ import { ApolloError } from 'apollo-server-errors'; import SQS from '@aws-sdk/client-sqs'; import { - buildCatConfig, - buildCallstack + buildCatConfig, + buildCallstack } from './utils.js'; import { sendEmail } from './alerts.js'; diff --git a/src/export/handler.js b/src/export/handler.js index 94c8ee85..6bbb73d3 100644 --- a/src/export/handler.js +++ b/src/export/handler.js @@ -32,4 +32,4 @@ export default async function(event) { } return true; -}; +} From 1ee24688da069efd08b44fc53c7424af747c4145 Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 11:31:43 -0600 Subject: [PATCH 11/25] Update use of __dirname in tests --- test/ml-inference-mega.test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/ml-inference-mega.test.js b/test/ml-inference-mega.test.js index 81ef8178..9c44e673 100644 --- a/test/ml-inference-mega.test.js +++ b/test/ml-inference-mega.test.js @@ -7,6 +7,8 @@ import SM from '@aws-sdk/client-sagemaker-runtime'; import { modelInterfaces } from '../src/ml/modelInterfaces.js'; +const base = new URL(path.parse(import.meta.url).dir).pathname; + process.env.REGION = 'us-east-2'; process.env.STAGE = 'dev'; @@ -19,7 +21,7 @@ tape('ML-Inference Megadetector', async (t) => { mockPool.intercept({ path: '/original/1-original.png', method: 'GET' - }).reply(200, fs.readFileSync(path.resolve(__dirname, './fixtures/cat.jpg'))); + }).reply(200, fs.readFileSync(path.resolve(base, './fixtures/cat.jpg'))); Sinon.stub(SM.SageMakerRuntimeClient.prototype, 'send').callsFake((command) => { if (command instanceof SM.InvokeEndpointCommand) { @@ -98,7 +100,7 @@ tape('ML-Inference Megadetector - Batch Image', async (t) => { mockPool.intercept({ path: '/original/1-original.png', method: 'GET' - }).reply(200, fs.readFileSync(path.resolve(__dirname, './fixtures/cat.jpg'))); + }).reply(200, fs.readFileSync(path.resolve(base, './fixtures/cat.jpg'))); Sinon.stub(SM.SageMakerRuntimeClient.prototype, 'send').callsFake((command) => { if (command instanceof SM.InvokeEndpointCommand) { From 9b42c8507d516d09f4749152a7515883af0f754b Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 14:29:56 -0600 Subject: [PATCH 12/25] Call deleteMany for ImageError --- src/api/db/models/ImageError.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/db/models/ImageError.js b/src/api/db/models/ImageError.js index 71f50908..f28ea886 100644 --- a/src/api/db/models/ImageError.js +++ b/src/api/db/models/ImageError.js @@ -45,12 +45,14 @@ const generateImageErrorModel = ({ user } = {}) => ({ return async (input) => { const operation = async (input) => { return await retry(async () => { - return await ImageError.batch(input); + return await ImageError.deleteMany(input); }, { retries: 2 }); }; try { - await operation(input); + await operation({ + batch: input.batch + }); return { message: 'Cleared' }; } catch (err) { From 52333a8fabf81be9130a4435ace5c1ddf4fdf2b9 Mon Sep 17 00:00:00 2001 From: ingalls Date: Mon, 24 Jul 2023 14:37:57 -0600 Subject: [PATCH 13/25] Keep the linter happy --- src/api/db/models/ImageError.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/db/models/ImageError.js b/src/api/db/models/ImageError.js index f28ea886..cfd51f4e 100644 --- a/src/api/db/models/ImageError.js +++ b/src/api/db/models/ImageError.js @@ -51,7 +51,7 @@ const generateImageErrorModel = ({ user } = {}) => ({ try { await operation({ - batch: input.batch + batch: input.batch }); return { message: 'Cleared' }; From 44ab59a86cf266c8d7a6f248d76114abed03d0bd Mon Sep 17 00:00:00 2001 From: ingalls Date: Tue, 25 Jul 2023 09:26:41 -0600 Subject: [PATCH 14/25] MVP of Batch Redrive Task --- src/api/db/models/Batch.js | 55 +++++++++++++++---- src/api/resolvers/Mutation.js | 5 ++ src/api/type-defs/inputs/RedriveBatchInput.js | 4 ++ src/api/type-defs/root/Mutation.js | 1 + 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/api/type-defs/inputs/RedriveBatchInput.js diff --git a/src/api/db/models/Batch.js b/src/api/db/models/Batch.js index 930b4c12..85b234db 100644 --- a/src/api/db/models/Batch.js +++ b/src/api/db/models/Batch.js @@ -95,17 +95,14 @@ const generateBatchModel = ({ user } = {}) => ({ return async (input) => { const operation = async (input) => { return await retry(async (bail, attempt) => { - if (attempt > 1) { - console.log(`Retrying updateObject operation! Try #: ${attempt}`); - } + if (attempt > 1) console.log(`Retrying stopBatch operation! Try #: ${attempt}`); + return await this.queryById(input._id); }, { retries: 2 }); }; try { - const batch = await operation({ - _id: input.batch - }); + const batch = await operation({ _id: input.batch }); if (batch.processingEnd) throw new Error('Stack has already terminated'); const lambda = new Lambda.LambdaClient({ region: process.env.REGION }); @@ -118,9 +115,44 @@ const generateBatchModel = ({ user } = {}) => ({ }) })); - return { - message: 'Batch Scheduled for Deletion' - }; + return { message: 'Batch Scheduled for Deletion' }; + } catch (err) { + console.error(err); + // if error is uncontrolled, throw new ApolloError + if (err instanceof ApolloError) throw err; + throw new ApolloError(err); + } + }; + }, + + get redriveBatch() { + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + + return async (input) => { + const operation = async (input) => { + return await retry(async (bail, attempt) => { + if (attempt > 1) console.log(`Retrying redriveBatch operation! Try #: ${attempt}`); + + // Ensure the batch actually exists + const batch = await this.queryById(input.batch); + if (batch.processingEnd) throw new Error('Stack has already terminated'); + + const sqs = new SQS.SQSClient({ region: process.env.REGION }); + + await sqs.send(new SQS.StartMessageMoveTaskCommand({ + SourceArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}`, + DestinationArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}-dlq` + })); + + return batch; + + }, { retries: 2 }); + }; + + try { + await operation(input); + + return { message: 'Batch Redrive Initiated' }; } catch (err) { console.error(err); // if error is uncontrolled, throw new ApolloError @@ -136,9 +168,8 @@ const generateBatchModel = ({ user } = {}) => ({ return async (input) => { const operation = async (input) => { return await retry(async (bail, attempt) => { - if (attempt > 1) { - console.log(`Retrying updateObject operation! Try #: ${attempt}`); - } + if (attempt > 1) console.log(`Retrying updateBatch operation! Try #: ${attempt}`); + // find image, apply object updates, and save const batch = await this.queryById(input._id); diff --git a/src/api/resolvers/Mutation.js b/src/api/resolvers/Mutation.js index 7b587dfe..0a9c59d5 100644 --- a/src/api/resolvers/Mutation.js +++ b/src/api/resolvers/Mutation.js @@ -24,6 +24,11 @@ const Mutation = { return { batch }; }, + redriveBatch: async (_, { input }, context) => { + const res = await context.models.Batch.redriveBatch(input, context); + return { ...res }; + }, + stopBatch: async (_, { input }, context) => { const res = await context.models.Batch.stopBatch(input, context); return { ...res }; diff --git a/src/api/type-defs/inputs/RedriveBatchInput.js b/src/api/type-defs/inputs/RedriveBatchInput.js new file mode 100644 index 00000000..d9bcc5a7 --- /dev/null +++ b/src/api/type-defs/inputs/RedriveBatchInput.js @@ -0,0 +1,4 @@ +export default ` + input RedriveBatchInput { + batch: String +}`; diff --git a/src/api/type-defs/root/Mutation.js b/src/api/type-defs/root/Mutation.js index 0e9e3d3a..e9bac824 100644 --- a/src/api/type-defs/root/Mutation.js +++ b/src/api/type-defs/root/Mutation.js @@ -5,6 +5,7 @@ export default ` createUpload(input: CreateUploadInput!): CreateUploadPayload updateBatch(input: UpdateBatchInput!): BatchPayload stopBatch(input: StopBatchInput!): StandardPayload + redriveBatch(input: RedriveBatchInput!): StandardPayload createBatchError(input: CreateBatchErrorInput!): BatchError createImageError(input: CreateImageErrorInput!): ImageError From 9ac082b96acb05375929ff549bfd781aedf61844 Mon Sep 17 00:00:00 2001 From: ingalls Date: Tue, 25 Jul 2023 10:32:59 -0600 Subject: [PATCH 15/25] Flip Source/Dest --- src/api/db/models/Batch.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/db/models/Batch.js b/src/api/db/models/Batch.js index 85b234db..00f2f451 100644 --- a/src/api/db/models/Batch.js +++ b/src/api/db/models/Batch.js @@ -140,8 +140,8 @@ const generateBatchModel = ({ user } = {}) => ({ const sqs = new SQS.SQSClient({ region: process.env.REGION }); await sqs.send(new SQS.StartMessageMoveTaskCommand({ - SourceArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}`, - DestinationArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}-dlq` + SourceArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}-dlq`, + DestinationArn: `arn:aws:sqs:${process.env.REGION}:${process.env.ACCOUNT}:animl-ingest-${process.env.STAGE}-${batch._id}` })); return batch; From efde06599b79ca4a4fd4f2847c474d6cad7dfb54 Mon Sep 17 00:00:00 2001 From: ingalls Date: Tue, 25 Jul 2023 14:11:06 -0600 Subject: [PATCH 16/25] Add ability to clear BatchErrors --- src/api/db/models/BatchError.js | 24 +++++++++++++++++++ src/api/resolvers/Mutation.js | 5 ++++ .../type-defs/inputs/ClearBatchErrorsInput.js | 4 ++++ src/api/type-defs/root/Mutation.js | 1 + 4 files changed, 34 insertions(+) create mode 100644 src/api/type-defs/inputs/ClearBatchErrorsInput.js diff --git a/src/api/db/models/BatchError.js b/src/api/db/models/BatchError.js index 80ac9081..2ddd94b5 100644 --- a/src/api/db/models/BatchError.js +++ b/src/api/db/models/BatchError.js @@ -35,6 +35,30 @@ const generateBatchErrorModel = ({ user } = {}) => ({ throw new ApolloError(err); } }; + }, + + get clearErrors() { + if (!hasRole(user, WRITE_IMAGES_ROLES)) throw new ForbiddenError; + + return async (input) => { + const operation = async (input) => { + return await retry(async () => { + return await BatchError.deleteMany(input); + }, { retries: 2 }); + }; + + try { + await operation({ + batch: input.batch + }); + + return { message: 'Cleared' }; + } catch (err) { + // if error is uncontrolled, throw new ApolloError + if (err instanceof ApolloError) throw err; + throw new ApolloError(err); + } + }; } }); diff --git a/src/api/resolvers/Mutation.js b/src/api/resolvers/Mutation.js index 0a9c59d5..377c0d7e 100644 --- a/src/api/resolvers/Mutation.js +++ b/src/api/resolvers/Mutation.js @@ -14,6 +14,11 @@ const Mutation = { return { ...res }; }, + clearBatchErrors: async (_, { input }, context) => { + const res = await context.models.BatchError.clearErrors(input, context); + return { ...res }; + }, + createUpload: async (_, { input }, context) => { const res = await context.models.Batch.createUpload(input, context); return { ...res }; diff --git a/src/api/type-defs/inputs/ClearBatchErrorsInput.js b/src/api/type-defs/inputs/ClearBatchErrorsInput.js new file mode 100644 index 00000000..06012c37 --- /dev/null +++ b/src/api/type-defs/inputs/ClearBatchErrorsInput.js @@ -0,0 +1,4 @@ +export default ` + input ClearBatchErrorsInput { + batch: String! +}`; diff --git a/src/api/type-defs/root/Mutation.js b/src/api/type-defs/root/Mutation.js index e9bac824..f76df58b 100644 --- a/src/api/type-defs/root/Mutation.js +++ b/src/api/type-defs/root/Mutation.js @@ -10,6 +10,7 @@ export default ` createBatchError(input: CreateBatchErrorInput!): BatchError createImageError(input: CreateImageErrorInput!): ImageError clearImageErrors(input: ClearImageErrorsInput!): StandardPayload + clearBatchErrors(input: ClearBatchErrorsInput!): StandardPayload registerCamera(input: RegisterCameraInput!): RegisterCameraPayload unregisterCamera(input: UnregisterCameraInput!): UnregisterCameraPayload From 0d589b6692eb68b2dbd29fd4cae51150538f7e49 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 09:09:57 -0600 Subject: [PATCH 17/25] Gracefully handle unknown DateTimeOriginals --- src/api/db/models/Image.js | 30 ++++++++++++++---------------- src/api/db/models/utils.js | 10 ++++++++-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index e1f79a3e..3fa3fda0 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -1,10 +1,11 @@ import { text } from 'node:stream/consumers'; +import { DateTime } from 'luxon'; import _ from 'lodash'; import S3 from '@aws-sdk/client-s3'; import SQS from '@aws-sdk/client-sqs'; import { ApolloError, ForbiddenError } from 'apollo-server-errors'; import { DuplicateError, DuplicateLabelError, DBValidationError } from '../../errors.js'; -import crypto from 'crypto'; +import crypto from 'node:crypto'; import MongoPaging from 'mongo-cursor-pagination'; import Image from '../schemas/Image.js'; import ImageError from '../schemas/ImageError.js'; @@ -12,17 +13,7 @@ import WirelessCamera from '../schemas/WirelessCamera.js'; import Batch from '../schemas/Batch.js'; import { handleEvent } from '../../../automation/index.js'; import { WRITE_OBJECTS_ROLES, WRITE_IMAGES_ROLES, EXPORT_DATA_ROLES } from '../../auth/roles.js'; -import { - hasRole, - buildPipeline, - mapImgToDep, - sanitizeMetadata, - isLabelDupe, - createImageRecord, - createLabelRecord, - isImageReviewed, - findActiveProjReg -} from './utils.js'; +import { hasRole, buildPipeline, mapImgToDep, sanitizeMetadata, isLabelDupe, createImageRecord, createLabelRecord, isImageReviewed, findActiveProjReg } from './utils.js'; import { idMatch } from './utils.js'; import retry from 'async-retry'; @@ -136,10 +127,18 @@ const generateImageModel = ({ user } = {}) => ({ if (!cameraId || cameraId === 'unknown') { errors.push(new Error('Unknown Serial Number')); - } else if (md.batchId) { + } + + if (!md.dateTimeOriginal === 'unknown') { + errors.push(new Error('Unknown DateTimeOriginal')); + // Required to get an Image entry into the DB so we can attach an error + md.dateTimeOriginal = DateTime.fromJSDate(new Date()); + } + + if (!errors.length && md.batchId) { // create camera config if there isn't one yet await context.models.Project.createCameraConfig(projectId, cameraId); - } else { + } else if (!errors.length) { // handle image from wireless camera // find wireless camera record & active registration or create new one const [existingCam] = await context.models.Camera.getWirelessCameras([cameraId]); @@ -152,8 +151,7 @@ const generateImageModel = ({ user } = {}) => ({ }, context); successfulOps.push({ op: 'cam-created', info: { cameraId } }); - } - else { + } else { projectId = findActiveProjReg(existingCam); } } diff --git a/src/api/db/models/utils.js b/src/api/db/models/utils.js index 2d081f71..5d63a9ea 100644 --- a/src/api/db/models/utils.js +++ b/src/api/db/models/utils.js @@ -196,8 +196,14 @@ const sanitizeMetadata = (md) => { // in the GraphQL layer's Date Scalar b/c the input type-def for createImage // is a JSONObject of unknown shape. So the parsing has to live in the model // layer somewhere, I'm just not sure this is the best place for it. - const dto = DateTime.fromISO(sanitized.dateTimeOriginal); - sanitized.dateTimeOriginal = dto; + if (sanitized.dateTimeOriginal && sanitized.dateTimeOriginal !== 'unknown') { + const dto = DateTime.fromISO(sanitized.dateTimeOriginal); + sanitized.dateTimeOriginal = dto; + } else { + // The IngestImage function should generally set this to unknown if it isn't parsable + // but this is included just to be sure + sanitized.dateTimeOriginal = 'unknown'; + } return sanitized; }; From a5abffdc65786f7757703ab7e1575762956d15b0 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 10:30:32 -0600 Subject: [PATCH 18/25] Avoid lookup up non-existant Deployments when an error is created early on --- src/api/db/models/Image.js | 62 +++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index 3fa3fda0..6f79ba92 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -135,38 +135,44 @@ const generateImageModel = ({ user } = {}) => ({ md.dateTimeOriginal = DateTime.fromJSDate(new Date()); } - if (!errors.length && md.batchId) { - // create camera config if there isn't one yet - await context.models.Project.createCameraConfig(projectId, cameraId); - } else if (!errors.length) { - // handle image from wireless camera - // find wireless camera record & active registration or create new one - const [existingCam] = await context.models.Camera.getWirelessCameras([cameraId]); - if (!existingCam) { - await context.models.Camera.createWirelessCamera({ - projectId, - cameraId, - make: md.make, - ...(md.model && { model: md.model }) - }, context); + let project; + let deployment = { _id: null, timezone: project.timezone }; - successfulOps.push({ op: 'cam-created', info: { cameraId } }); - } else { - projectId = findActiveProjReg(existingCam); + if (!errors.length) { + if (md.batchId) { + // create camera config if there isn't one yet + await context.models.Project.createCameraConfig(projectId, cameraId); + } else if (!errors.length) { + // handle image from wireless camera + // find wireless camera record & active registration or create new one + const [existingCam] = await context.models.Camera.getWirelessCameras([cameraId]); + if (!existingCam) { + await context.models.Camera.createWirelessCamera({ + projectId, + cameraId, + make: md.make, + ...(md.model && { model: md.model }) + }, context); + + successfulOps.push({ op: 'cam-created', info: { cameraId } }); + } else { + projectId = findActiveProjReg(existingCam); + } } - } - // map image to deployment - const [project] = await context.models.Project.getProjects([projectId]); - const camConfig = project.cameraConfigs.find((cc) => idMatch(cc._id, cameraId)); + // map image to deployment + [project] = await context.models.Project.getProjects([projectId]); + const camConfig = project.cameraConfigs.find((cc) => idMatch(cc._id, cameraId)); - let deployment = { _id: null, timezone: project.timezone }; - - try { - deployment = mapImgToDep(md, camConfig, project.timezone); - } catch (err) { - if (err.code === 'NoDeployments') errors.push(err); - else throw err; + try { + deployment = mapImgToDep(md, camConfig, project.timezone); + } catch (err) { + if (err.code === 'NoDeployments') errors.push(err); + else throw err; + } + } else { + // Get Default Project as there are errors - There will be no deployments added + [project] = await context.models.Project.getProjects([projectId]); } // create image record From b9153c680d0999d4f8ff71300957aa1082899bf8 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 10:53:53 -0600 Subject: [PATCH 19/25] Fix timezone mapping --- src/api/db/models/Image.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index 6f79ba92..fc915b28 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -136,7 +136,7 @@ const generateImageModel = ({ user } = {}) => ({ } let project; - let deployment = { _id: null, timezone: project.timezone }; + let deployment = { _id: null, timezone: null }; if (!errors.length) { if (md.batchId) { @@ -178,7 +178,7 @@ const generateImageModel = ({ user } = {}) => ({ // create image record md.projectId = projectId; md.deploymentId = deployment._id; - md.timezone = deployment.timezone; + md.timezone = deployment.timezone || project.timezone; // Image Size Limit if (md.imageBytes >= 4 * 1000000) { From 092ad4d45b7acacd750c84ee4bc14526903d8d86 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 10:54:32 -0600 Subject: [PATCH 20/25] Populate Deployment.timezone --- src/api/db/models/Image.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index fc915b28..35d11c18 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -173,12 +173,13 @@ const generateImageModel = ({ user } = {}) => ({ } else { // Get Default Project as there are errors - There will be no deployments added [project] = await context.models.Project.getProjects([projectId]); + deployment.timezone = project.timezone; } // create image record md.projectId = projectId; md.deploymentId = deployment._id; - md.timezone = deployment.timezone || project.timezone; + md.timezone = deployment.timezone; // Image Size Limit if (md.imageBytes >= 4 * 1000000) { From 2552344b9191dd13ed307eb44e11d541d0018874 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 12:55:33 -0600 Subject: [PATCH 21/25] Ensure null deployments are omitted from API response --- src/api/db/models/Image.js | 4 +--- src/api/db/models/utils.js | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/api/db/models/Image.js b/src/api/db/models/Image.js index 35d11c18..2f70d087 100644 --- a/src/api/db/models/Image.js +++ b/src/api/db/models/Image.js @@ -72,9 +72,7 @@ const generateImageModel = ({ user } = {}) => ({ { $unwind: '$objects' }, { $unwind: '$objects.labels' }, { $match: { 'objects.labels.validation.validated': { $not: { $eq: false } } } }, - { $group: { _id: null, uniqueCategories: { - $addToSet: '$objects.labels.category' - } } } + { $group: { _id: null, uniqueCategories: { $addToSet: '$objects.labels.category' } } } ]); const categories = categoriesAggregate diff --git a/src/api/db/models/utils.js b/src/api/db/models/utils.js index 5d63a9ea..8cb8ade2 100644 --- a/src/api/db/models/utils.js +++ b/src/api/db/models/utils.js @@ -37,6 +37,12 @@ const buildPipeline = ({ pipeline.push({ '$match': { 'projectId': projectId } }); } + // Ignore Null Deployments - If we eventually add required: true to deployments, remove this + pipeline.push({ '$match': { + 'deploymentId': { $ne: null } + } + }); + // match cameras filter if (cameras) { pipeline.push({ '$match': { 'cameraId': { $in: cameras } } }); From ac2b3e9b5efa78f12a0222aaec1d190f57eb79af Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 13:10:31 -0600 Subject: [PATCH 22/25] Fix ES Export for ML Fn --- src/ml/handler.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ml/handler.js b/src/ml/handler.js index 5381c5d4..8749a66e 100644 --- a/src/ml/handler.js +++ b/src/ml/handler.js @@ -74,7 +74,7 @@ async function singleInference(config, record) { } } -exports.inference = async (event) => { +async function inference(event) { const config = await getConfig(); console.log('event: ', event); @@ -104,3 +104,7 @@ exports.inference = async (event) => { return { batchItemFailures }; }; + +export { + inference +} From 08a9d7aab3e3d2259efde00160a513d1eee9b67e Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 13:27:46 -0600 Subject: [PATCH 23/25] Fix lints --- src/api/db/models/utils.js | 2 +- src/ml/handler.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api/db/models/utils.js b/src/api/db/models/utils.js index 8cb8ade2..c2e88508 100644 --- a/src/api/db/models/utils.js +++ b/src/api/db/models/utils.js @@ -40,7 +40,7 @@ const buildPipeline = ({ // Ignore Null Deployments - If we eventually add required: true to deployments, remove this pipeline.push({ '$match': { 'deploymentId': { $ne: null } - } + } }); // match cameras filter diff --git a/src/ml/handler.js b/src/ml/handler.js index 8749a66e..af698ba5 100644 --- a/src/ml/handler.js +++ b/src/ml/handler.js @@ -103,8 +103,8 @@ async function inference(event) { } return { batchItemFailures }; -}; +} export { - inference -} + inference +}; From 4d93a3fea714b0771c1cbeb56ebac5899808a3f8 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 27 Jul 2023 13:49:26 -0600 Subject: [PATCH 24/25] Fix export handler --- serverless.yml | 2 +- src/export/handler.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index 3aa4bbae..1a643e74 100644 --- a/serverless.yml +++ b/serverless.yml @@ -141,7 +141,7 @@ functions: export: image: name: base - command: src/export/handler.export + command: src/export/handler.handler reservedConcurrency: 10 events: - sqs: diff --git a/src/export/handler.js b/src/export/handler.js index 6bbb73d3..705e6c74 100644 --- a/src/export/handler.js +++ b/src/export/handler.js @@ -3,7 +3,7 @@ import { getConfig } from '../config/config.js'; import { connectToDatabase } from '../api/db/connect.js'; import { ApolloError } from 'apollo-server-lambda'; -export default async function(event) { +async function handler(event) { if (!event.Records || !event.Records.length) return; const config = await getConfig(); await connectToDatabase(config); @@ -33,3 +33,7 @@ export default async function(event) { return true; } + +export { + handler +}; From 4c11a1c598135b36ee13f81837ab67b7bf877016 Mon Sep 17 00:00:00 2001 From: Nathaniel Rindlaub Date: Thu, 27 Jul 2023 14:10:07 -0700 Subject: [PATCH 25/25] log inference predition results --- src/ml/modelInterfaces.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ml/modelInterfaces.js b/src/ml/modelInterfaces.js index 1d97b9df..3fcf96f3 100644 --- a/src/ml/modelInterfaces.js +++ b/src/ml/modelInterfaces.js @@ -27,7 +27,7 @@ async function megadetector(params) { const res = await smr.send(command); const body = Buffer.from(res.Body).toString('utf8'); const detections = JSON.parse(body); - console.log(`detections returned from megadetector endpoint for image ${image._id}: ${detections}`); + console.log(`detections returned from megadetector endpoint for image ${image._id}: ${body}`); const formatedDets = detections.map((det) => ({ mlModel: modelSource._id, @@ -87,7 +87,7 @@ async function mirav2(params) { const res = await smr.send(command); const body = Buffer.from(res.Body).toString('utf8'); const predictions = JSON.parse(body); - console.log(`mirav2 predictions for image ${image._id}: ${predictions}`); + console.log(`mirav2 predictions for image ${image._id}: ${body}`); const filteredDets = []; Object.keys(predictions).forEach((category) => { @@ -135,7 +135,7 @@ async function nzdoc(params) { const res = await smr.send(command); const body = Buffer.from(res.Body).toString('utf8'); const predictions = JSON.parse(body); - console.log(`nzdoc predictions for image ${image._id}: ${predictions}`); + console.log(`nzdoc predictions for image ${image._id}: ${body}`); const filteredDets = []; Object.keys(predictions).forEach((category) => {