diff --git a/package-lock.json b/package-lock.json index 629b73c..2168226 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "@krauters/logger", - "version": "2.0.0", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@krauters/logger", - "version": "2.0.0", + "version": "2.1.0", "license": "ISC", "dependencies": { - "@aws-sdk/client-cloudwatch": "^3.714.0", - "@aws-sdk/client-s3": "^3.714.0", + "@aws-sdk/client-cloudwatch": "^3.726.1", + "@aws-sdk/client-s3": "^3.726.1", "@krauters/environment": "^0.5.2", "@krauters/structures": "^1.3.0", - "@types/aws-lambda": "^8.10.146", + "@types/aws-lambda": "^8.10.147", "@types/uuid": "^10.0.0", "nanoid": "^5.0.9", "winston": "^3.17.0" @@ -27,7 +27,7 @@ "nodemon": "^3.1.9", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", - "typescript": "^5.7.2" + "typescript": "^5.7.3" } }, "node_modules/@ampproject/remapping": { @@ -247,707 +247,707 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.714.0.tgz", - "integrity": "sha512-eNZYqb/gjA0WkRZtiVKwef01ovWDWglQox2lioWF3T5LkwEwHi0wV9Lc4k8s/6NW2wxXUPPUik1Kh4yG4JBEfA==", + "version": "3.726.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.726.1.tgz", + "integrity": "sha512-WL3eOvZmynBQfMoBe1DYeVAw2SPeZpX5qMyEMMdu0d+Dyd3w0BiMzKYud1yWh93nITybtJgLO7kJycFpbsfc1A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.714.0", - "@aws-sdk/client-sts": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-compression": "^3.1.5", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.2.0", + "@aws-sdk/client-sso-oidc": "3.726.0", + "@aws-sdk/client-sts": "3.726.1", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-node": "3.726.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.726.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-compression": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.714.0.tgz", - "integrity": "sha512-DqzfbecKrhUEpsYTsYRIm4cKKlIvAl4I/A2NpzDPDSiA2EmCWLy0T5fK1ivUA4XL+09+4pHJGNVTpMyDs7n6vg==", + "version": "3.726.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.726.1.tgz", + "integrity": "sha512-UpOGcob87DiuS2d3fW6vDZg94g57mNiOSkzvR/6GOdvBSlUgk8LLwVzGASB71FdKMl1EGEr4MeD5uKH9JsG+dw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.714.0", - "@aws-sdk/client-sts": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-bucket-endpoint": "3.714.0", - "@aws-sdk/middleware-expect-continue": "3.714.0", - "@aws-sdk/middleware-flexible-checksums": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-location-constraint": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-sdk-s3": "3.714.0", - "@aws-sdk/middleware-ssec": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/signature-v4-multi-region": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@aws-sdk/xml-builder": "3.709.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/eventstream-serde-browser": "^3.0.14", - "@smithy/eventstream-serde-config-resolver": "^3.0.11", - "@smithy/eventstream-serde-node": "^3.0.13", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-blob-browser": "^3.1.10", - "@smithy/hash-node": "^3.0.11", - "@smithy/hash-stream-node": "^3.1.10", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/md5-js": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.2.0", + "@aws-sdk/client-sso-oidc": "3.726.0", + "@aws-sdk/client-sts": "3.726.1", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-node": "3.726.0", + "@aws-sdk/middleware-bucket-endpoint": "3.726.0", + "@aws-sdk/middleware-expect-continue": "3.723.0", + "@aws-sdk/middleware-flexible-checksums": "3.723.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-location-constraint": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-sdk-s3": "3.723.0", + "@aws-sdk/middleware-ssec": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/signature-v4-multi-region": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.726.0", + "@aws-sdk/xml-builder": "3.723.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/eventstream-serde-browser": "^4.0.0", + "@smithy/eventstream-serde-config-resolver": "^4.0.0", + "@smithy/eventstream-serde-node": "^4.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-blob-browser": "^4.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/hash-stream-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/md5-js": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz", - "integrity": "sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.726.0.tgz", + "integrity": "sha512-NM5pjv2qglEc4XN3nnDqtqGsSGv1k5YTmzDo3W3pObItHmpS8grSeNfX9zSH+aVl0Q8hE4ZIgvTPNZ+GzwVlqg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.726.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz", - "integrity": "sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.726.0.tgz", + "integrity": "sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-node": "3.726.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.726.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "@aws-sdk/client-sts": "^3.726.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz", - "integrity": "sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ==", + "version": "3.726.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.726.1.tgz", + "integrity": "sha512-qh9Q9Vu1hrM/wMBOBIaskwnE4GTFaZu26Q6WHwyWNfj7J8a40vBxpW16c2vYXHLBtwRKM1be8uRLkmDwghpiNw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-node": "3.714.0", - "@aws-sdk/middleware-host-header": "3.714.0", - "@aws-sdk/middleware-logger": "3.714.0", - "@aws-sdk/middleware-recursion-detection": "3.714.0", - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/region-config-resolver": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@aws-sdk/util-user-agent-browser": "3.714.0", - "@aws-sdk/util-user-agent-node": "3.714.0", - "@smithy/config-resolver": "^3.0.13", - "@smithy/core": "^2.5.5", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/hash-node": "^3.0.11", - "@smithy/invalid-dependency": "^3.0.11", - "@smithy/middleware-content-length": "^3.0.13", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-retry": "^3.0.30", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.30", - "@smithy/util-defaults-mode-node": "^3.0.30", - "@smithy/util-endpoints": "^2.1.7", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/client-sso-oidc": "3.726.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-node": "3.726.0", + "@aws-sdk/middleware-host-header": "3.723.0", + "@aws-sdk/middleware-logger": "3.723.0", + "@aws-sdk/middleware-recursion-detection": "3.723.0", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/region-config-resolver": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@aws-sdk/util-user-agent-browser": "3.723.0", + "@aws-sdk/util-user-agent-node": "3.726.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.714.0.tgz", - "integrity": "sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.723.0.tgz", + "integrity": "sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/core": "^2.5.5", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", + "@aws-sdk/types": "3.723.0", + "@smithy/core": "^3.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/signature-v4": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz", - "integrity": "sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz", + "integrity": "sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz", - "integrity": "sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz", + "integrity": "sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/property-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-stream": "^3.3.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz", - "integrity": "sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.726.0.tgz", + "integrity": "sha512-seTtcKL2+gZX6yK1QRPr5mDJIBOatrpoyrO8D5b8plYtV/PDbDW3mtDJSWFHet29G61ZmlNElyXRqQCXn9WX+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/credential-provider-env": "3.714.0", - "@aws-sdk/credential-provider-http": "3.714.0", - "@aws-sdk/credential-provider-process": "3.714.0", - "@aws-sdk/credential-provider-sso": "3.714.0", - "@aws-sdk/credential-provider-web-identity": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/credential-provider-env": "3.723.0", + "@aws-sdk/credential-provider-http": "3.723.0", + "@aws-sdk/credential-provider-process": "3.723.0", + "@aws-sdk/credential-provider-sso": "3.726.0", + "@aws-sdk/credential-provider-web-identity": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "@aws-sdk/client-sts": "^3.726.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz", - "integrity": "sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.726.0.tgz", + "integrity": "sha512-jjsewBcw/uLi24x8JbnuDjJad4VA9ROCE94uVRbEnGmUEsds75FWOKp3fWZLQlmjLtzsIbJOZLALkZP86liPaw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.714.0", - "@aws-sdk/credential-provider-http": "3.714.0", - "@aws-sdk/credential-provider-ini": "3.714.0", - "@aws-sdk/credential-provider-process": "3.714.0", - "@aws-sdk/credential-provider-sso": "3.714.0", - "@aws-sdk/credential-provider-web-identity": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/credential-provider-env": "3.723.0", + "@aws-sdk/credential-provider-http": "3.723.0", + "@aws-sdk/credential-provider-ini": "3.726.0", + "@aws-sdk/credential-provider-process": "3.723.0", + "@aws-sdk/credential-provider-sso": "3.726.0", + "@aws-sdk/credential-provider-web-identity": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz", - "integrity": "sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz", + "integrity": "sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz", - "integrity": "sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.726.0.tgz", + "integrity": "sha512-WxkN76WeB08j2yw7jUH9yCMPxmT9eBFd9ZA/aACG7yzOIlsz7gvG3P2FQ0tVg25GHM0E4PdU3p/ByTOawzcOAg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.714.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/token-providers": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/client-sso": "3.726.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/token-providers": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz", - "integrity": "sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz", + "integrity": "sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.714.0" + "@aws-sdk/client-sts": "^3.723.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz", - "integrity": "sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.726.0.tgz", + "integrity": "sha512-vpaP80rZqwu0C3ELayIcRIW84/nd1tadeoqllT+N9TDshuEvq4UJ+w47OBHB7RkHFJoc79lXXNYle0fdQdaE/A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz", - "integrity": "sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.723.0.tgz", + "integrity": "sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.714.0.tgz", - "integrity": "sha512-y5I2mRmTDRQ/SYa+F30RRE4xchTHmDPDiYKFRRoENxFhVcrv/FbjA3hfhB8Z95JfSalzJVr+XQjd+N+t4M2gMw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.723.0.tgz", + "integrity": "sha512-JY76mrUCLa0FHeMZp8X9+KK6uEuZaRZaQrlgq6zkXX/3udukH0T3YdFC+Y9uw5ddbiwZ5+KwgmlhnPpiXKfP4g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz", - "integrity": "sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz", + "integrity": "sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz", - "integrity": "sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.723.0.tgz", + "integrity": "sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz", - "integrity": "sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz", + "integrity": "sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz", - "integrity": "sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz", + "integrity": "sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz", - "integrity": "sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.723.0.tgz", + "integrity": "sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/core": "^2.5.5", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-arn-parser": "3.723.0", + "@smithy/core": "^3.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/signature-v4": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-stream": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz", - "integrity": "sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.723.0.tgz", + "integrity": "sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz", - "integrity": "sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.726.0.tgz", + "integrity": "sha512-hZvzuE5S0JmFie1r68K2wQvJbzyxJFdzltj9skgnnwdvLe8F/tz7MqLkm28uV0m4jeHk0LpiBo6eZaPkQiwsZQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@aws-sdk/util-endpoints": "3.714.0", - "@smithy/core": "^2.5.5", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@aws-sdk/core": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@aws-sdk/util-endpoints": "3.726.0", + "@smithy/core": "^3.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz", - "integrity": "sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz", + "integrity": "sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", + "@aws-sdk/types": "3.723.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz", - "integrity": "sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.723.0.tgz", + "integrity": "sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/signature-v4": "^4.2.4", - "@smithy/types": "^3.7.2", + "@aws-sdk/middleware-sdk-s3": "3.723.0", + "@aws-sdk/types": "3.723.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/signature-v4": "^5.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz", - "integrity": "sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz", + "integrity": "sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.714.0" + "@aws-sdk/client-sso-oidc": "^3.723.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", - "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.723.0.tgz", + "integrity": "sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", - "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", + "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz", - "integrity": "sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.726.0.tgz", + "integrity": "sha512-sLd30ASsPMoPn3XBK50oe/bkpJ4N8Bpb7SbhoxcY3Lk+fSASaWxbbXE81nbvCnkxrZCvkPOiDHzJCp1E2im71A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", - "@smithy/util-endpoints": "^2.1.7", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { @@ -963,31 +963,31 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz", - "integrity": "sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz", + "integrity": "sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.714.0", - "@smithy/types": "^3.7.2", + "@aws-sdk/types": "3.723.0", + "@smithy/types": "^4.0.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz", - "integrity": "sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g==", + "version": "3.726.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.726.0.tgz", + "integrity": "sha512-iEj6KX9o6IQf23oziorveRqyzyclWai95oZHDJtYav3fvLJKStwSjygO4xSF7ycHcTYeCHSLO1FFOHgGVs4Viw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.714.0", - "@aws-sdk/types": "3.714.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", + "@aws-sdk/middleware-user-agent": "3.726.0", + "@aws-sdk/types": "3.723.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -999,16 +999,16 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz", - "integrity": "sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==", + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.723.0.tgz", + "integrity": "sha512-5xK2SqGU1mzzsOeemy7cy3fGKxR1sEpUs4pEiIjaT0OIvU+fZaDVUEYWOqsgns6wI90XZEQJlXtI8uAHX/do5Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@babel/code-frame": { @@ -2423,714 +2423,741 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.9.tgz", - "integrity": "sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", + "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", - "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", - "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^3.0.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.13.tgz", - "integrity": "sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", + "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/core": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.5.tgz", - "integrity": "sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.0.tgz", + "integrity": "sha512-swFv0wQiK7TGHeuAp6lfF5Kw1dHWsTrCuc+yh4Kh05gEShjsE2RUxHucEerR9ih9JITNtaHcSpUThn5Y/vDw0A==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-stream": "^3.3.2", - "@smithy/util-utf8": "^3.0.0", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz", - "integrity": "sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", + "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz", - "integrity": "sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz", + "integrity": "sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.7.2", - "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz", - "integrity": "sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz", + "integrity": "sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.13", - "@smithy/types": "^3.7.2", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz", - "integrity": "sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz", + "integrity": "sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz", - "integrity": "sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz", + "integrity": "sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.13", - "@smithy/types": "^3.7.2", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz", - "integrity": "sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz", + "integrity": "sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.10", - "@smithy/types": "^3.7.2", + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.2.tgz", - "integrity": "sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", + "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.8", - "@smithy/querystring-builder": "^3.0.11", - "@smithy/types": "^3.7.2", - "@smithy/util-base64": "^3.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz", - "integrity": "sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz", + "integrity": "sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==", "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^4.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.1", - "@smithy/types": "^3.7.2", + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.11.tgz", - "integrity": "sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", + "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz", - "integrity": "sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz", + "integrity": "sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.1.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz", - "integrity": "sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", + "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.11.tgz", - "integrity": "sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz", + "integrity": "sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.1.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-compression": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-3.1.5.tgz", - "integrity": "sha512-14rZ++nuQwiFERvqPtdDr1uLL8tvWZbDcphMGRw67NfXnBgpKx5QFMSfcQDD+CswQ3Y+0aQRjHJTP+BBjU2TiA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-4.0.1.tgz", + "integrity": "sha512-Augprrhjo1KCmZnkiHEtkHwojYac4+zftriMUdFpEo5CYFEhL+HPaiCTSYeK0nMB8HWTvZ6EMg+AezzWHz+JNA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-utf8": "^3.0.0", + "@smithy/core": "^3.1.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", "fflate": "0.8.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz", - "integrity": "sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", + "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.5.tgz", - "integrity": "sha512-VhJNs/s/lyx4weiZdXSloBgoLoS8osV0dKIain8nGmx7of3QFKu5BSdEuk1z/U8x9iwes1i+XCiNusEvuK1ijg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.1.tgz", + "integrity": "sha512-hCCOPu9+sRI7Wj0rZKKnGylKXBEd9cQJetzjQqe8cT4PWvtQAbvNVa6cgAONiZg9m8LaXtP9/waxm3C3eO4hiw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/middleware-serde": "^3.0.11", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", - "@smithy/url-parser": "^3.0.11", - "@smithy/util-middleware": "^3.0.11", + "@smithy/core": "^3.1.0", + "@smithy/middleware-serde": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.30.tgz", - "integrity": "sha512-6323RL2BvAR3VQpTjHpa52kH/iSHyxd/G9ohb2MkBk2Ucu+oMtRXT8yi7KTSIS9nb58aupG6nO0OlXnQOAcvmQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.1.tgz", + "integrity": "sha512-n3g2zZFgOWaz2ZYCy8+4wxSmq+HSTD8QKkRhFDv+nkxY1o7gzyp4PDz/+tOdcNPMPZ/A6Mt4aVECYNjQNiaHJw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/protocol-http": "^4.1.8", - "@smithy/service-error-classification": "^3.0.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-retry": "^3.0.11", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.0", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz", - "integrity": "sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.1.tgz", + "integrity": "sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz", - "integrity": "sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", + "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz", - "integrity": "sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", + "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.12", - "@smithy/types": "^3.7.2", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.2.tgz", - "integrity": "sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.1.tgz", + "integrity": "sha512-ddQc7tvXiVLC5c3QKraGWde761KSk+mboCheZoWtuqnXh5l0WKyFy3NfDIM/dsKrI9HlLVH/21pi9wWK2gUFFA==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.9", - "@smithy/protocol-http": "^4.1.8", - "@smithy/querystring-builder": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.11.tgz", - "integrity": "sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", + "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", + "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz", - "integrity": "sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", + "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", - "@smithy/util-uri-escape": "^3.0.0", + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz", - "integrity": "sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", + "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", + "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2" + "@smithy/types": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", + "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz", - "integrity": "sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", + "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.5.0.tgz", - "integrity": "sha512-Y8FeOa7gbDfCWf7njrkoRATPa5eNLUEjlJS5z5rXatYuGkCb80LbHcu8AQR8qgAZZaNHCLyo2N+pxPsV7l+ivg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.0.tgz", + "integrity": "sha512-NiboZnrsrZY+Cy5hQNbYi+nVNssXVi2I+yL4CIKNIanOhH8kpC5PKQ2jx/MQpwVr21a3XcVoQBArlpRF36OeEQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/middleware-endpoint": "^3.2.5", - "@smithy/middleware-stack": "^3.0.11", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-stream": "^3.3.2", + "@smithy/core": "^3.1.0", + "@smithy/middleware-endpoint": "^4.0.1", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.11.tgz", - "integrity": "sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", + "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.30.tgz", - "integrity": "sha512-nLuGmgfcr0gzm64pqF2UT4SGWVG8UGviAdayDlVzJPNa6Z4lqvpDzdRXmLxtOdEjVlTOEdpZ9dd3ZMMu488mzg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.1.tgz", + "integrity": "sha512-nkQifWzWUHw/D0aLPgyKut+QnJ5X+5E8wBvGfvrYLLZ86xPfVO6MoqfQo/9s4bF3Xscefua1M6KLZtobHMWrBg==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.0", + "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.30.tgz", - "integrity": "sha512-OD63eWoH68vp75mYcfYyuVH+p7Li/mY4sYOROnauDrtObo1cS4uWfsy/zhOTW8F8ZPxQC1ZXZKVxoxvMGUv2Ow==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.1.tgz", + "integrity": "sha512-LeAx2faB83litC9vaOdwFaldtto2gczUHxfFf8yoRwDU3cwL4/pDm7i0hxsuBCRk5mzHsrVGw+3EVCj32UZMdw==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.13", - "@smithy/credential-provider-imds": "^3.2.8", - "@smithy/node-config-provider": "^3.1.12", - "@smithy/property-provider": "^3.1.11", - "@smithy/smithy-client": "^3.5.0", - "@smithy/types": "^3.7.2", + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz", - "integrity": "sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", + "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.12", - "@smithy/types": "^3.7.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.11.tgz", - "integrity": "sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", + "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", + "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.11", - "@smithy/types": "^3.7.2", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.2.tgz", - "integrity": "sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.1.tgz", + "integrity": "sha512-Js16gOgU6Qht6qTPfuJgb+1YD4AEO+5Y1UPGWKSp3BNo8ONl/qhXSYDhFKJtwybRJynlCqvP5IeiaBsUmkSPTQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/node-http-handler": "^3.3.2", - "@smithy/types": "^3.7.2", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.2.0.tgz", - "integrity": "sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz", + "integrity": "sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.9", - "@smithy/types": "^3.7.2", + "@smithy/abort-controller": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@stylistic/eslint-plugin-ts": { @@ -3180,9 +3207,9 @@ "license": "MIT" }, "node_modules/@types/aws-lambda": { - "version": "8.10.146", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.146.tgz", - "integrity": "sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==", + "version": "8.10.147", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", + "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", "license": "MIT" }, "node_modules/@types/babel__core": { @@ -9313,9 +9340,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index c66890a..0c6ce78 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@krauters/logger", "description": "TypeScript wrapper for Winston, optimized for structured Lambda logs and CloudWatch.", - "version": "2.0.0", + "version": "2.1.0", "main": "dist/src/index.js", "type": "commonjs", "scripts": { @@ -40,17 +40,17 @@ "nodemon": "^3.1.9", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", - "typescript": "^5.7.2" + "typescript": "^5.7.3" }, "files": [ "dist" ], "dependencies": { - "@aws-sdk/client-cloudwatch": "^3.714.0", - "@aws-sdk/client-s3": "^3.714.0", + "@aws-sdk/client-cloudwatch": "^3.726.1", + "@aws-sdk/client-s3": "^3.726.1", "@krauters/environment": "^0.5.2", "@krauters/structures": "^1.3.0", - "@types/aws-lambda": "^8.10.146", + "@types/aws-lambda": "^8.10.147", "@types/uuid": "^10.0.0", "nanoid": "^5.0.9", "winston": "^3.17.0" diff --git a/src/config.ts b/src/config.ts index bee5263..f4b03a4 100644 --- a/src/config.ts +++ b/src/config.ts @@ -3,101 +3,16 @@ import { EnvironmentBuilder } from '@krauters/environment' import { Env, Stage } from '@krauters/structures' import { hostname } from 'os' +import type { ConfigOptions } from './structures' + import { empty, LogLevel } from './structures' import { isFalsy } from './utils' export type Config = ReturnType -/** - * Configuration options for retrieving and building the logger environment configuration. - */ -export interface ConfigOptions { - CODENAME: string - - /** - * The current environment (e.g. Development, Production). - */ - ENV: Env - - /** - * An optional prefix to apply to environment variables. - */ - ENVIRONMENT_PREFIX?: string - - /** - * The hostname of the machine or environment running the code. - */ - HOST: string - - /** - * The output format of logs, either 'friendly' or 'structured'. - */ - LOG_FORMAT: string - - /** - * Fields to be hidden from friendly log format output. - */ - LOG_FRIENDLY_FIELDS_HIDE?: string[] - - /** - * The minimum log level at which logs are recorded. - */ - LOG_LEVEL: LogLevel - - /** - * A string prefix applied to every log message. - */ - LOG_PREFIX: string - - /** - * A string used to separate sections within a log message. - */ - LOG_SECTION_SEPARATOR: string - - /** - * Fields to be hidden from structured log format output. - */ - LOG_STRUCTURED_FIELDS_HIDE?: string[] - - /** - * The package or application name. - */ - PACKAGE: string - - /** - * If true, values can be pulled from environment variables. Defaults to true if not provided. - */ - PULL_FROM_ENVIRONMENT?: boolean - - /** - * A static request ID to be used in logs. If not provided, one will be generated. - */ - REQUEST_ID?: string - - /** - * If true, enables simpler log formatting without full request IDs. - */ - SIMPLE_LOGS: boolean - - /** - * The current stage or tier (e.g. Beta, Production). - */ - STAGE: Stage - - /** - * The format of timestamps in log messages. - */ - TIMESTAMP_FORMAT: string - - /** - * The current version of the application or service. - */ - VERSION: string -} - /** * Retrieves the application's environment configuration, allowing overrides via an options object. - * If pullFromEnv is false, will not load values from environment variables. + * If PULL_FROM_ENVIRONMENT is false, will not load values from environment variables. * * @param options Optional configuration overrides. * @returns The environment variable configuration. @@ -115,14 +30,16 @@ export function getConfig(options?: Partial) { 'LOG_LEVEL', 'LOG_PREFIX', 'LOG_SECTION_SEPARATOR', + 'OBFUSCATION_ENABLED', + 'OBFUSCATION_PATTERNS', 'PACKAGE', 'SIMPLE_LOGS', 'STAGE', 'TIMESTAMP_FORMAT', 'VERSION', ) - .optionals('LOG_FRIENDLY_FIELDS_HIDE', 'LOG_STRUCTURED_FIELDS_HIDE', 'REQUEST_ID') - .transform((value) => !isFalsy(value), 'SIMPLE_LOGS') + .optionals('LOG_FRIENDLY_FIELDS_HIDE', 'LOG_STRUCTURED_FIELDS_HIDE', 'REQUEST_ID', 'LOG_PROCESSOR') + .transform((value) => !isFalsy(value), 'SIMPLE_LOGS', 'OBFUSCATION_ENABLED') .transform( (value) => (value.trim() === '' ? [] : value.replace(/\s/g, '').split(',')), 'LOG_FRIENDLY_FIELDS_HIDE', @@ -131,15 +48,24 @@ export function getConfig(options?: Partial) { .transform((value) => value as Env, 'ENV') .transform((value) => value as Stage, 'STAGE') .transform((value) => value as LogLevel, 'LOG_LEVEL') + .transform( + (value) => (typeof value === 'string' && value.trim() !== '' ? [new RegExp(value.trim())] : []), + 'OBFUSCATION_PATTERNS', + ) .defaults({ // Actual Defaults CODENAME: empty, + CUSTOM_LOG_PROCESSOR: undefined, ENV: Env.Unknown, HOST: hostname(), LOG_FORMAT: 'friendly', LOG_LEVEL: LogLevel.Info, LOG_PREFIX: '', LOG_SECTION_SEPARATOR: ' | ', + OBFUSCATION_ENABLED: true, + + // Object.values(SensitivePatterns).map((pattern) => new RegExp(pattern)) + OBFUSCATION_PATTERNS: [], PACKAGE: empty, SIMPLE_LOGS: false, STAGE: Stage.Unknown, diff --git a/src/index.ts b/src/index.ts index 406b694..2444fe8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ export * from './config' export * from './container' export type * from './logger' +export * from './sensitive-patterns' export * from './structures' diff --git a/src/logger.ts b/src/logger.ts index 9ec5277..0cbb8ba 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -11,7 +11,14 @@ import { v4 as uuidv4 } from 'uuid' import { addColors, createLogger, format, transports, config as winstonConfig } from 'winston' import type { Config } from './config' -import type { GetLogObjectParams, LoggerOptions, LogOptions, Metadata, PublishMetricOptions } from './structures' +import type { + GetLogObjectParams, + LoggerOptions, + LogOptions, + LogProcessor, + Metadata, + PublishMetricOptions, +} from './structures' import { getConfig } from './config' import { empty, LogLevel } from './structures' @@ -23,9 +30,10 @@ export class Logger { public metadata: Metadata = {} private colors: Record private levels: Record + private readonly MASK: string = '****MASKED****' public constructor(options: LoggerOptions = {}) { - const { configOptions, context, format: customFormat, transports: customTransports } = options + const { configOptions, context, format: customFormat, logProcessor, transports: customTransports } = options this.config = getConfig(configOptions) const requestId = this.getRequestId(context) @@ -37,7 +45,7 @@ export class Logger { addColors(this.colors) this.logger = createLogger({ - format: customFormat ?? this.getFormatter(), + format: customFormat ?? this.getFormatter(logProcessor), level: this.config.LOG_LEVEL, levels: this.levels, transports: customTransports ?? [new transports.Console()], @@ -71,10 +79,10 @@ export class Logger { ].join(separator) } - public getFormatter(): Format { + public getFormatter(logProcessor?: LogProcessor): Format { const formatters = { - friendly: this.getFriendlyFormat.bind(this), - structured: this.getStructuredFormat.bind(this), + friendly: this.getFriendlyFormat.bind(this, logProcessor), + structured: this.getStructuredFormat.bind(this, logProcessor), } const formatType = this.config.LOG_FORMAT as keyof typeof formatters @@ -85,7 +93,7 @@ export class Logger { return formatters[formatType]() } - public getFriendlyFormat(): Format { + public getFriendlyFormat(logProcessor?: LogProcessor): Format { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const separator: string = this.config.LOG_SECTION_SEPARATOR! const prefix: string = this.config.LOG_PREFIX ?? '' @@ -93,13 +101,19 @@ export class Logger { return format.combine( format.colorize({ all: true }), format.timestamp({ format: this.config.TIMESTAMP_FORMAT }), - format.printf((info) => - this.formatLogMessage( - this.getLogObject({ fieldsToHide: this.config.LOG_FRIENDLY_FIELDS_HIDE, info }), - separator, - prefix, - ), - ), + format.printf((info) => { + let logObject = this.getLogObject({ fieldsToHide: this.config.LOG_FRIENDLY_FIELDS_HIDE, info }) + + if (this.config.OBFUSCATION_ENABLED && this.config.OBFUSCATION_PATTERNS) { + logObject = this.applyObfuscation(logObject) + } + + if (logProcessor) { + logObject = logProcessor(logObject) + } + + return this.formatLogMessage(logObject, separator, prefix) + }), ) } @@ -115,19 +129,29 @@ export class Logger { } public getRequestId(context?: LambdaContext): string { - if (this.config?.REQUEST_ID) return this.config.REQUEST_ID + if (this.config.REQUEST_ID) return this.config.REQUEST_ID if (context?.awsRequestId) return context.awsRequestId if (this.config.SIMPLE_LOGS) return uuidv4().split('-')[0] return uuidv4() } - public getStructuredFormat(): Format { + public getStructuredFormat(logProcessor?: LogProcessor): Format { return format.combine( format.timestamp({ format: this.config.TIMESTAMP_FORMAT }), - format.printf((info) => - JSON.stringify(this.getLogObject({ fieldsToHide: this.config.LOG_STRUCTURED_FIELDS_HIDE, info })), - ), + format.printf((info) => { + let logObject = this.getLogObject({ fieldsToHide: this.config.LOG_STRUCTURED_FIELDS_HIDE, info }) + + if (this.config.OBFUSCATION_ENABLED && this.config.OBFUSCATION_PATTERNS) { + logObject = this.applyObfuscation(logObject) + } + + if (logProcessor) { + logObject = logProcessor(logObject) + } + + return JSON.stringify(logObject) + }), ) } @@ -180,7 +204,7 @@ export class Logger { } public updateInstance(options: LoggerOptions): void { - const { configOptions, context, format: customFormat, transports: customTransports } = options + const { configOptions, context, format: customFormat, logProcessor, transports: customTransports } = options if (configOptions) { this.config = getConfig(configOptions) @@ -195,13 +219,14 @@ export class Logger { this.metadata = { ...this.getBaseMetadata(newRequestId), ...userFields } - this.logger.format = this.getFormatter() + this.logger.format = this.getFormatter(logProcessor) // Explicitly update log level this.logger.level = this.config.LOG_LEVEL as string } else if (context) { const newRequestId = this.getRequestId(context) const userFields = { ...this.metadata } + for (const key of Object.keys(this.getBaseMetadata(newRequestId))) { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete userFields[key] @@ -209,7 +234,7 @@ export class Logger { this.metadata = { ...this.getBaseMetadata(newRequestId), ...userFields } - this.logger.format = this.getFormatter() + this.logger.format = this.getFormatter(logProcessor) } if (customFormat) { @@ -222,6 +247,10 @@ export class Logger { this.logger.add(transport) } } + + if (options.logProcessor) { + this.logger.format = this.getFormatter(options.logProcessor) + } } public updateLevels(newLevels: Record, newColors: Record): void { @@ -246,6 +275,26 @@ export class Logger { this.log({ level: LogLevel.Warn, message, metadata: data }) } + /** + * Applies obfuscation to the log object based on configured regex patterns. + * + * @param logObject The original log object. + * @returns The obfuscated log object. + */ + private applyObfuscation(logObject: Record): Record { + const obfuscated = { ...logObject } + + for (const key in obfuscated) { + if (typeof obfuscated[key] === 'string') { + for (const pattern of this.config.OBFUSCATION_PATTERNS ?? []) { + obfuscated[key] = (obfuscated[key] as string).replace(pattern, this.MASK) + } + } + } + + return obfuscated + } + private getBaseMetadata(requestId: string): Metadata { const base = { codename: this.config.CODENAME, diff --git a/src/sensitive-patterns.ts b/src/sensitive-patterns.ts new file mode 100644 index 0000000..e7cc567 --- /dev/null +++ b/src/sensitive-patterns.ts @@ -0,0 +1,42 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +export const SensitivePatterns = { + Address: /^\d{1,5}\s[A-Za-z]{2,}\s(?:Street|St|Avenue|Ave|Boulevard|Blvd|Road|Rd|Lane|Ln|Drive|Dr)$/, + BankAccountNumber: /^\d{9,18}$/, + BankRoutingNumber: /^\d{9}$/, + BiometricData: /^BiometricID:\s?[A-Z0-9]{8}$/, + CitizenId: /^CID\s?\d{10}$/, + + /** + * CreditCard: + * - Matches both standard and non-standard groupings: + * - Standard: 4-4-4-4, 5-4-4-4, 3-6-5, 6-4-4-4 + * - Non-Standard: 4-4-4-3, 4-4-4-2 + * - Allows optional separators: spaces or dashes + * - Accepts continuous digits ranging from 13 to 16 + */ + CreditCard: /^(?:\d{4}[- ]?){3}\d{2,4}$|^\d{13,16}$/, + CreditScore: /^(?:[3-9]\d{2}|1000)$/, + // eslint-disable-next-line no-useless-escape + Dob: /^(0[1-9]|1[0-2])[\/.-](0[1-9]|[12]\d|3[01])[\/.-]\d{4}$/, + DriversLicense: /^[A-Z]\d{7}$/, + Email: /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/, + EmployeeId: /^EID\s?\d{6}$/, + GovernmentId: /^GID\s?\d{8}$/, + HealthInsuranceNumber: /^HIN\s?\d{10}$/, + InsurancePolicyNumber: /^IPN\s?\d{12}$/, + IpAddress: /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}$/, + LinkedInId: /^LIID\s?[A-Za-z0-9]{10}$/, + MedicalLicense: /^ML\d{5,6}$/, + MedicalRecordNumber: /^MRN\s?\d{6}$/, + NationalId: /^NID\s?\d{10}$/, + PassportSeriesNumber: /^PSN\s?\d{9}$/, + Password: /^password:\s+\S+$/, + PersonalIdentificationNumber: /^PIN\s?\d{4,6}$/, + PersonalTaxCode: /^PTC\s?\d{11}$/, + PhoneNumber: /^\d{3}[-.]?\d{3}[-.]?\d{4}$/, + SsinitNumber: /^SSNIT\s?\d{11}$/, + Ssn: /^\d{3}-\d{2}-\d{4}$/, + StudentId: /^SID\s?\d{8}$/, + TaxIdentificationNumber: /^TIN\s?\d{9}$/, + TelecomCustomerId: /^TCID\s?\d{10}$/, +} as const diff --git a/src/structures.ts b/src/structures.ts index 1215967..ca2f3eb 100644 --- a/src/structures.ts +++ b/src/structures.ts @@ -1,10 +1,10 @@ -import type { Env } from '@krauters/structures' +/* eslint-disable @stylistic/ts/lines-around-comment */ +/* eslint-disable @typescript-eslint/naming-convention */ +import type { Env, Stage } from '@krauters/structures' import type { Context as LambdaContext } from 'aws-lambda' import type { Format } from 'logform' import type TransportStream from 'winston-transport' -import type { ConfigOptions } from './config' - export enum LogLevel { Debug = 'debug', Error = 'error', @@ -23,6 +23,7 @@ export interface LoggerOptions { configOptions?: Partial context?: LambdaContext format?: Format + logProcessor?: LogProcessor transports?: TransportStream[] } @@ -33,11 +34,12 @@ export interface LogOptions { metadata?: Record } +export type LogProcessor = (logObject: Record) => Record + export interface PublishMetricOptions { dimensions?: { - // eslint-disable-next-line @typescript-eslint/naming-convention Name: string - // eslint-disable-next-line @typescript-eslint/naming-convention + Value: string }[] metricName: string @@ -47,6 +49,108 @@ export interface PublishMetricOptions { export const empty = 'NOTSET' +export interface ConfigOptions { + /** + * The codename of the application or service. + */ + CODENAME: string + + /** + * A custom function to process log objects before logging. + */ + CUSTOM_LOG_PROCESSOR?: (logObject: Record) => Record + + /** + * The current environment (e.g., Development, Production). + */ + ENV: Env + + /** + * An optional prefix to apply to environment variables. + */ + ENVIRONMENT_PREFIX?: string + + /** + * The hostname of the machine or environment running the code. + */ + HOST: string + + /** + * The output format of logs, either 'friendly' or 'structured'. + */ + LOG_FORMAT: string + + /** + * Fields to be hidden from friendly log format output. + */ + LOG_FRIENDLY_FIELDS_HIDE?: string[] + + /** + * The minimum log level at which logs are recorded. + */ + LOG_LEVEL: LogLevel + + /** + * A string prefix applied to every log message. + */ + LOG_PREFIX: string + + /** + * A string used to separate sections within a log message. + */ + LOG_SECTION_SEPARATOR: string + + /** + * Fields to be hidden from structured log format output. + */ + LOG_STRUCTURED_FIELDS_HIDE?: string[] + + /** + * If true, enables obfuscation of sensitive information in logs. Defaults to true. + */ + OBFUSCATION_ENABLED?: boolean + + /** + * A list of regex patterns used to identify sensitive information in logs. + */ + OBFUSCATION_PATTERNS?: RegExp[] + + /** + * The package or application name. + */ + PACKAGE: string + + /** + * If true, values can be pulled from environment variables. Defaults to true if not provided. + */ + PULL_FROM_ENVIRONMENT?: boolean + + /** + * A static request ID to be used in logs. If not provided, one will be generated. + */ + REQUEST_ID?: string + + /** + * If true, enables simpler log formatting without full request IDs. + */ + SIMPLE_LOGS: boolean + + /** + * The current stage or tier (e.g., Beta, Production). + */ + STAGE: Stage + + /** + * The format of timestamps in log messages. + */ + TIMESTAMP_FORMAT: string + + /** + * The current version of the application or service. + */ + VERSION: string +} + export interface GetLogObjectParams { fieldsToHide?: string[] info: Record diff --git a/test/config.test.ts b/test/config.test.ts index be4733d..d2dfa66 100644 --- a/test/config.test.ts +++ b/test/config.test.ts @@ -1,7 +1,8 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { Env, Stage } from '@krauters/structures' -import type { Config, ConfigOptions } from '../src/config' +import type { Config } from '../src/config' +import type { ConfigOptions } from '../src/structures' import { getConfig } from '../src/config' import { LogLevel } from '../src/structures' @@ -64,10 +65,12 @@ describe('getConfig Simplified Tests', () => { LOG_FRIENDLY_FIELDS_HIDE: ['admin'], LOG_LEVEL: LogLevel.Error, LOG_PREFIX: '[env-test] ', + LOG_PROCESSOR: undefined, LOG_SECTION_SEPARATOR: ' || ', LOG_STRUCTURED_FIELDS_HIDE: ['secret', 'apiKey'], + OBFUSCATION_ENABLED: true, + OBFUSCATION_PATTERNS: [], PACKAGE: 'env-package', - PULL_FROM_ENVIRONMENT: undefined, REQUEST_ID: undefined, SIMPLE_LOGS: true, STAGE: Stage.Beta, diff --git a/test/container.test.ts b/test/container.test.ts index f31eb79..6ef8d31 100644 --- a/test/container.test.ts +++ b/test/container.test.ts @@ -1,8 +1,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { Env, Stage } from '@krauters/structures' -import type { ConfigOptions } from '../src/config' -import type { LoggerOptions } from '../src/structures' +import type { ConfigOptions, LoggerOptions } from '../src/structures' import { container, getLogger } from '../src/container' import { Logger } from '../src/logger' diff --git a/test/logger.test.ts b/test/logger.test.ts index 58daa14..2eafb39 100644 --- a/test/logger.test.ts +++ b/test/logger.test.ts @@ -1,4 +1,3 @@ -// test/logger.test.ts /* eslint-disable @typescript-eslint/naming-convention */ import type { TransformableInfo } from 'logform' @@ -7,9 +6,9 @@ import { mocked } from 'jest-mock' import { v4 as uuidv4 } from 'uuid' import Transport from 'winston-transport' -import type { LoggerOptions } from '../src/structures' +import type { ConfigOptions, LoggerOptions } from '../src/structures' -import { type ConfigOptions, getConfig } from '../src/config' +import { getConfig } from '../src/config' import { Logger } from '../src/logger' import { LogLevel } from '../src/structures' @@ -19,6 +18,7 @@ jest.mock('../src/config', () => ({ getConfig: jest.fn() })) class TestTransport extends Transport { logs: string[] = [] + // Updated to accept additional arguments to prevent TypeScript errors log(info: TransformableInfo, callback: () => void): void { const finalMessage = info[Symbol.for('message')] as string this.logs.push(finalMessage) @@ -62,17 +62,13 @@ describe('logger', () => { let logger: Logger beforeEach(() => { - // Reset all mocks before each test jest.clearAllMocks() ;(mocked(uuidv4) as unknown as jest.Mock).mockReturnValue('generated-uuid') - // Reset currentConfig to baseConfig before each test currentConfig = { ...baseConfig } - // Initialize TestTransport testTransport = new TestTransport() - // Initialize Logger with TestTransport const loggerOptions: LoggerOptions = { configOptions: baseConfig, transports: [testTransport], @@ -169,10 +165,12 @@ describe('logger', () => { // Ensure output is valid JSON // eslint-disable-next-line @typescript-eslint/no-unsafe-return expect(() => JSON.parse(output)).not.toThrow() - const parsed: { hello: string; message: string; requestId: string } = JSON.parse(output) + const parsed: { hello: string; message: string; requestId?: string } = JSON.parse(output) expect(parsed.hello).toBe('world') expect(parsed.message).toBe('structured-test') - expect(parsed.requestId).toBeDefined() + + // Adjusted expectation: requestId should still be present + expect(parsed.requestId).toBe('generated-uuid') }) it('handles SIMPLE_LOGS and shorter request ids', () => { @@ -211,4 +209,278 @@ describe('logger', () => { expect(output).toContain('Failed to publish metric [FailMetric]') sendSpy.mockRestore() }) + + // === Additional Test Cases Below === + + describe('Additional Logging Methods', () => { + it('logs debug messages when level is set to debug', async () => { + logger.updateInstance({ configOptions: { LOG_LEVEL: LogLevel.Debug } }) + + logger.debug('debug-message', { debugKey: 'debugValue' }) + + await new Promise((resolve) => setImmediate(resolve)) + const output = testTransport.logs.join('\n') + expect(output).toContain('debug-message') + expect(output).toContain('debugKey: debugValue') + }) + + it('logs error messages', () => { + logger.error('error-message', { errorKey: 'errorValue' }) + const output = testTransport.logs.join('\n') + expect(output).toContain('error-message') + expect(output).toContain('errorKey: errorValue') + }) + + it('logs trace messages when level is set to trace', async () => { + logger.updateLevels({ trace: 8 }, { trace: 'magenta' }) + logger.updateInstance({ configOptions: { LOG_LEVEL: LogLevel.Trace } }) + + logger.trace('trace-message', { traceKey: 'traceValue' }) + + await new Promise((resolve) => setImmediate(resolve)) + const output = testTransport.logs.join('\n') + expect(output).toContain('trace-message') + expect(output).toContain('traceKey: traceValue') + }) + + it('logs warn messages', () => { + logger.warn('warn-message', { warnKey: 'warnValue' }) + const output = testTransport.logs.join('\n') + expect(output).toContain('warn-message') + expect(output).toContain('warnKey: warnValue') + }) + }) + + describe('Obfuscation Functionality', () => { + beforeEach(() => { + // Enable obfuscation and set patterns to match entire field values where necessary + currentConfig = { + ...currentConfig, + OBFUSCATION_ENABLED: true, + OBFUSCATION_PATTERNS: [/^mypassword$/i, /secret/i, /token:\s*\w+/], + } + logger.updateInstance({ + configOptions: { + OBFUSCATION_ENABLED: true, + OBFUSCATION_PATTERNS: [/^mypassword$/i, /secret/i, /token:\s*\w+/], + }, + }) + }) + + it('obfuscates specified fields in friendly format', () => { + logger.info('obfuscate-test', { normalField: 'visible', password: 'mypassword', secretInfo: 'topsecret' }) + const output = testTransport.logs.join('\n') + expect(output).toContain('password: ****MASKED****') + expect(output).toContain('secretInfo: top****MASKED****') + expect(output).toContain('normalField: visible') + }) + + it('obfuscates specified fields in structured format', () => { + // Switch to structured format + currentConfig = { + ...currentConfig, + LOG_FORMAT: 'structured', + } + logger.updateInstance({ configOptions: { LOG_FORMAT: 'structured' } }) + + logger.info('structured-obfuscate-test', { + normalField: 'visible', + password: 'mypassword', + secretInfo: 'topsecret', + }) + const output = testTransport.logs[0] + const parsed = JSON.parse(output) + expect(parsed.password).toBe('****MASKED****') + expect(parsed.secretInfo).toBe('top****MASKED****') + expect(parsed.normalField).toBe('visible') + }) + }) + + describe('Dynamic Level and Color Updates', () => { + it('updates logging levels and colors correctly', () => { + // Add a new custom level + const newLevels = { verbose: 9 } + const newColors = { verbose: 'cyan' } + logger.updateLevels(newLevels, newColors) + logger.log({ + level: 'verbose' as LogLevel, + message: 'verbose-message', + metadata: { verboseKey: 'verboseValue' }, + }) + + const output = testTransport.logs.join('\n') + expect(output).toContain('verbose-message') + expect(output).toContain('verboseKey: verboseValue') + }) + + it('logs message indicating levels and colors update', () => { + const newLevels = { verbose: 9 } + const newColors = { verbose: 'cyan' } + logger.updateLevels(newLevels, newColors) + + const output = testTransport.logs.join('\n') + expect(output).toContain('Logger levels and colors have been updated.') + }) + }) + + describe('Formatter Behaviors', () => { + it('formats log messages correctly in friendly format', () => { + logger.info('friendly-format-test', { key1: 'value1', key2: 'value2' }) + const output = testTransport.logs.join('\n') + + // Adjusted regex to accommodate timezone offsets like -07:00 + expect(output).toMatch(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}/) + expect(output).toContain('info') + expect(output).toContain('[test] friendly-format-test') + expect(output).toContain('key1: value1') + expect(output).toContain('key2: value2') + }) + + it('formats log messages correctly in structured format', () => { + // Switch to structured format + currentConfig = { + ...currentConfig, + LOG_FORMAT: 'structured', + } + logger.updateInstance({ configOptions: { LOG_FORMAT: 'structured' } }) + + logger.info('structured-format-test', { key1: 'value1', key2: 'value2' }) + const output = testTransport.logs[0] + const parsed = JSON.parse(output) + expect(parsed.message).toBe('structured-format-test') + expect(parsed.key1).toBe('value1') + expect(parsed.key2).toBe('value2') + expect(parsed.requestId).toBe('generated-uuid') + }) + }) + + describe('Metadata Management', () => { + it('adds multiple fields to all logs', () => { + logger.addToAllLogs('field1', 'value1') + logger.addToAllLogs('field2', 'value2') + logger.info('multiple-fields-test') + const output = testTransport.logs.join('\n') + expect(output).toContain('multiple-fields-test') + expect(output).toContain('field1: value1') + expect(output).toContain('field2: value2') + }) + + it('removes multiple fields from all logs', () => { + logger.addToAllLogs('field1', 'value1') + logger.addToAllLogs('field2', 'value2') + logger.removeFromAllLogs('field1', 'field2') + logger.info('remove-multiple-fields-test') + const output = testTransport.logs.join('\n') + expect(output).toContain('remove-multiple-fields-test') + expect(output).not.toContain('field1:') + expect(output).not.toContain('field2:') + }) + + it('handles removal of non-existent fields gracefully', () => { + logger.removeFromAllLogs('nonExistentField') + logger.info('no-error-on-remove') + const output = testTransport.logs.join('\n') + expect(output).toContain('no-error-on-remove') + }) + }) + + describe('Utility Methods', () => { + it('generates a request ID when none is provided', () => { + // Reset REQUEST_ID and SIMPLE_LOGS + currentConfig = { + ...currentConfig, + REQUEST_ID: undefined, + SIMPLE_LOGS: false, + } + logger.updateInstance({ configOptions: { REQUEST_ID: undefined, SIMPLE_LOGS: false } }) + + logger.info('request-id-test') + const output = testTransport.logs.join('\n') + expect(output).toContain('requestId: generated-uuid') + }) + + it('uses provided REQUEST_ID from config', () => { + currentConfig = { + ...currentConfig, + REQUEST_ID: 'fixed-request-id', + } + logger.updateInstance({ configOptions: { REQUEST_ID: 'fixed-request-id' } }) + + logger.info('fixed-request-id-test') + const output = testTransport.logs.join('\n') + expect(output).toContain('requestId: fixed-request-id') + }) + }) + + describe('Error Handling in Logging', () => { + it('handles logging with undefined metadata gracefully', () => { + expect(() => logger.info('undefined-metadata-test')).not.toThrow() + const output = testTransport.logs.join('\n') + expect(output).toContain('undefined-metadata-test') + }) + + it('handles logging with null metadata gracefully', () => { + expect(() => logger.info('null-metadata-test', null as never)).not.toThrow() + const output = testTransport.logs.join('\n') + expect(output).toContain('null-metadata-test') + }) + + it('handles logging with non-string messages gracefully', () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + expect(() => logger.info(12345, { key: 'value' })).not.toThrow() + const output = testTransport.logs.join('\n') + expect(output).toContain('12345') + expect(output).toContain('key: value') + }) + }) + + describe('Obfuscation Patterns Edge Cases', () => { + beforeEach(() => { + // Enable obfuscation and set patterns + currentConfig = { + ...currentConfig, + OBFUSCATION_ENABLED: true, + OBFUSCATION_PATTERNS: [/^mypassword$/i, /secret/i, /token:\s*\w+/], + } + logger.updateInstance({ + configOptions: { + OBFUSCATION_ENABLED: true, + OBFUSCATION_PATTERNS: [/^mypassword$/i, /secret/i, /token:\s*\w+/], + }, + }) + }) + + it('does not obfuscate fields that do not match patterns', () => { + logger.info('no-obfuscate-test', { email: 'john@example.com', username: 'john_doe' }) + const output = testTransport.logs.join('\n') + expect(output).toContain('username: john_doe') + expect(output).toContain('email: john@example.com') + expect(output).not.toContain('****MASKED****') + }) + + it('obfuscates multiple fields matching different patterns', () => { + logger.info('multi-obfuscate-test', { + normalField: 'visible', + password: 'mypassword', + secretInfo: 'topsecret', + token: 'abc123', + }) + const output = testTransport.logs.join('\n') + expect(output).toContain('password: ****MASKED****') + expect(output).toContain('secretInfo: top****MASKED****') + expect(output).toContain('token: ****MASKED****') + expect(output).toContain('normalField: visible') + }) + + it('handles obfuscation when patterns overlap', () => { + logger.info('overlap-obfuscate-test', { + password: 'mypassword', + passwordField: 'anotherPassword456', + }) + const output = testTransport.logs.join('\n') + expect(output).toContain('password: ****MASKED****') + expect(output).toContain('passwordField: ****MASKED****') + }) + }) }) diff --git a/test/sensitive-patterns.test.ts b/test/sensitive-patterns.test.ts new file mode 100644 index 0000000..c246aa2 --- /dev/null +++ b/test/sensitive-patterns.test.ts @@ -0,0 +1,702 @@ +/* eslint-disable no-inline-comments */ +/* eslint-disable max-lines */ +import { SensitivePatterns } from '../src/sensitive-patterns' + +// eslint-disable-next-line max-lines-per-function +describe('SensitivePatterns', () => { + it('should have all expected patterns defined', () => { + const expectedKeys = [ + 'Address', + 'BankAccountNumber', + 'BankRoutingNumber', + 'BiometricData', + 'CitizenId', + 'CreditCard', + 'CreditScore', + 'Dob', + 'DriversLicense', + 'Email', + 'EmployeeId', + 'GovernmentId', + 'HealthInsuranceNumber', + 'InsurancePolicyNumber', + 'IpAddress', + 'LinkedInId', + 'MedicalLicense', + 'MedicalRecordNumber', + 'NationalId', + 'PassportSeriesNumber', + 'Password', + 'PersonalIdentificationNumber', + 'PersonalTaxCode', + 'PhoneNumber', + 'SsinitNumber', + 'Ssn', + 'StudentId', + 'TaxIdentificationNumber', + 'TelecomCustomerId', + ] + + const actualKeys = Object.keys(SensitivePatterns) + expect(actualKeys.sort()).toEqual(expectedKeys.sort()) + }) + + describe('Address pattern', () => { + const regex = SensitivePatterns.Address + + it('should match valid addresses', () => { + const validAddresses = [ + '123 Main Street', + '456 Elm St', + '789 Oak Avenue', + '101 Pine Blvd', + '202 Maple Road', + '303 Birch Rd', + '404 Cedar Lane', + '505 Spruce Ln', + '606 Walnut Drive', + '707 Cherry Dr', + ] + + validAddresses.forEach((address) => { + expect(address).toMatch(regex) + }) + }) + + it('should not match invalid addresses', () => { + const invalidAddresses = ['Main Street', '1234', 'Street 123', '123 Main', '123 Main Blvd Avenue'] + + invalidAddresses.forEach((address) => { + expect(address).not.toMatch(regex) + }) + }) + }) + + describe('BankAccountNumber pattern', () => { + const regex = SensitivePatterns.BankAccountNumber + + it('should match valid bank account numbers', () => { + const validNumbers = ['123456789', '987654321012', '123456789012345678'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid bank account numbers', () => { + const invalidNumbers = ['12345678', '1234567890123456789', '12345abc789', '123-456-789'] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('BankRoutingNumber pattern', () => { + const regex = SensitivePatterns.BankRoutingNumber + + it('should match valid bank routing numbers', () => { + const validNumbers = ['123456789', '987654321'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid bank routing numbers', () => { + const invalidNumbers = ['12345678', '1234567890', '12345abc9', '123-456-789'] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('BiometricData pattern', () => { + const regex = SensitivePatterns.BiometricData + + it('should match valid biometric data', () => { + const validData = ['BiometricID: ABCD1234', 'BiometricID: 12345678', 'BiometricID: A1B2C3D4'] + + validData.forEach((data) => { + expect(data).toMatch(regex) + }) + }) + + it('should not match invalid biometric data', () => { + const invalidData = [ + 'BiometricID: ABC123', + 'BiometricID: ABCDEFGH9', + 'Biometric ID: ABCD1234', + 'BioMetricID: ABCD1234', + ] + + invalidData.forEach((data) => { + expect(data).not.toMatch(regex) + }) + }) + }) + + describe('CitizenId pattern', () => { + const regex = SensitivePatterns.CitizenId + + it('should match valid Citizen IDs', () => { + const validIds = ['CID 1234567890', 'CID1234567890'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid Citizen IDs', () => { + const invalidIds = ['CID 123456789', 'CID12345678901', 'CID ABCDEFGHIJ', 'CITIZENID1234567890'] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('CreditCard pattern', () => { + const regex = SensitivePatterns.CreditCard + + it('should match valid credit card numbers', () => { + const validCards = [ + '5500-0000-0000-0004', // Mastercard + '3400 0000 0000 009', // AMEX-like (4-4-4-3) + '3000 0000 0000 04', // Diners Club-like (4-4-4-2) + '6011-0000-0000-0004', // Discover + '2014 0000 0000 009', // Diners Club-like (4-4-4-3) + '3088 0000 0000 0009', // Diners Club-like (4-4-4-3) + '1234567890123', // Diners Club-like (13 digits) + '1234567890123456', // Non-standard (16 digits) + ] + + validCards.forEach((card) => { + expect(card).toMatch(regex) + }) + }) + + it('should not match invalid credit card numbers', () => { + const invalidCards = ['4111 1111 1111', '5500-0000-0000-00044', '3400 0000 0000 00A', 'abcd efgh ijkl mnop'] + + invalidCards.forEach((card) => { + expect(card).not.toMatch(regex) + }) + }) + }) + + describe('CreditScore pattern', () => { + const regex = SensitivePatterns.CreditScore + + it('should match valid credit scores', () => { + const validScores = ['300', '450', '600', '750', '900', '1000'] + + validScores.forEach((score) => { + expect(score).toMatch(regex) + }) + }) + + it('should not match invalid credit scores', () => { + const invalidScores = ['299', '1001', 'abc', '700a', '75'] + + invalidScores.forEach((score) => { + expect(score).not.toMatch(regex) + }) + }) + }) + + describe('Dob pattern', () => { + const regex = SensitivePatterns.Dob + + it('should match valid dates of birth', () => { + const validDobs = ['01/01/1990', '12-31-2000', '07.04.1976', '09/15/1985', '10-10-2010'] + + validDobs.forEach((dob) => { + expect(dob).toMatch(regex) + }) + }) + + it('should not match invalid dates of birth', () => { + const invalidDobs = [ + '1/1/1990', + '13/01/1990', + '00-31-2000', + '07.32.1976', + '07.04.76', + 'July 4, 1976', + '07/04/1976a', + ] + + invalidDobs.forEach((dob) => { + expect(dob).not.toMatch(regex) + }) + }) + }) + + describe('DriversLicense pattern', () => { + const regex = SensitivePatterns.DriversLicense + + it("should match valid driver's licenses", () => { + const validLicenses = ['A1234567', 'B7654321', 'C0000000'] + + validLicenses.forEach((license) => { + expect(license).toMatch(regex) + }) + }) + + it("should not match invalid driver's licenses", () => { + const invalidLicenses = ['AA1234567', '12345678', 'A123456', 'A12345678', 'a1234567', 'A12345B7'] + + invalidLicenses.forEach((license) => { + expect(license).not.toMatch(regex) + }) + }) + }) + + describe('Email pattern', () => { + const regex = SensitivePatterns.Email + + it('should match valid email addresses', () => { + const validEmails = [ + 'user@example.com', + 'user.name+tag+sorting@example.com', + 'user_name@example.co.uk', + 'user-name@sub.example.com', + 'user123@example.io', + 'test+sub@gmail.com', + ] + + validEmails.forEach((email) => { + expect(email).toMatch(regex) + }) + }) + + it('should not match invalid email addresses', () => { + const invalidEmails = [ + 'plainaddress', + '@no-local-part.com', + 'Outlook Contact ', + 'no-at.domain.com', + 'user@.com.my', + 'user@domain..com', + 'user@domain.c', + 'user@domain,com', + 'user@domain@domain.com', + ] + + invalidEmails.forEach((email) => { + expect(email).not.toMatch(regex) + }) + }) + }) + + describe('EmployeeId pattern', () => { + const regex = SensitivePatterns.EmployeeId + + it('should match valid employee IDs', () => { + const validIds = ['EID123456', 'EID654321', 'EID000001'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid employee IDs', () => { + const invalidIds = ['EID12345', 'EID1234567', 'EID12A456', 'EMP123456', 'EID123-456'] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('GovernmentId pattern', () => { + const regex = SensitivePatterns.GovernmentId + + it('should match valid government IDs', () => { + const validIds = ['GID12345678', 'GID87654321', 'GID00000000'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid government IDs', () => { + const invalidIds = ['GID1234567', 'GID123456789', 'GID12345A7', 'GOVID12345678', 'GID123-45678'] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('HealthInsuranceNumber pattern', () => { + const regex = SensitivePatterns.HealthInsuranceNumber + + it('should match valid health insurance numbers', () => { + const validNumbers = ['HIN1234567890', 'HIN0987654321', 'HIN0000000000'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid health insurance numbers', () => { + const invalidNumbers = [ + 'HIN123456789', + 'HIN12345678901', + 'HIN12345A7890', + 'HEALTH12345678', + 'HIN123-4567890', + ] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('InsurancePolicyNumber pattern', () => { + const regex = SensitivePatterns.InsurancePolicyNumber + + it('should match valid insurance policy numbers', () => { + const validNumbers = ['IPN123456789012', 'IPN098765432109', 'IPN000000000000'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid insurance policy numbers', () => { + const invalidNumbers = [ + 'IPN1234567890', + 'IPN1234567890123', + 'IPN12345A789012', + 'INSURANCE123456', + 'IPN123-456789012', + ] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('IpAddress pattern', () => { + const regex = SensitivePatterns.IpAddress + + it('should match valid IP addresses', () => { + const validIps = ['192.168.1.1', '10.0.0.255', '172.16.0.0', '8.8.8.8', '255.255.255.255'] + + validIps.forEach((ip) => { + expect(ip).toMatch(regex) + }) + }) + + it('should not match invalid IP addresses', () => { + const invalidIps = [ + '256.256.256.256', + '192.168.1', + '192.168.1.1.1', + '192.168.1.a', + '192.168.01.1', + '192.168.1.-1', + ] + + invalidIps.forEach((ip) => { + expect(ip).not.toMatch(regex) + }) + }) + }) + + describe('LinkedInId pattern', () => { + const regex = SensitivePatterns.LinkedInId + + it('should match valid LinkedIn IDs', () => { + const validIds = ['LIIDABCDEFG123', 'LIID1234567890', 'LIIDA1B2C3D4E5'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid LinkedIn IDs', () => { + const invalidIds = [ + 'LIIDABC', + 'LIID123456789012345', + 'LIID12345A678', + 'LINKID1234567890', + 'LIID123-4567890', + ] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('MedicalLicense pattern', () => { + const regex = SensitivePatterns.MedicalLicense + + it('should match valid medical licenses', () => { + const validLicenses = ['ML12345', 'ML678901', 'ML00000'] + + validLicenses.forEach((license) => { + expect(license).toMatch(regex) + }) + }) + + it('should not match invalid medical licenses', () => { + const invalidLicenses = ['ML1234', 'ML1234567', 'ML12A45', 'MEDLICENSE12345', 'ML123-456'] + + invalidLicenses.forEach((license) => { + expect(license).not.toMatch(regex) + }) + }) + }) + + describe('MedicalRecordNumber pattern', () => { + const regex = SensitivePatterns.MedicalRecordNumber + + it('should match valid medical record numbers', () => { + const validNumbers = ['MRN123456', 'MRN654321', 'MRN000001'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid medical record numbers', () => { + const invalidNumbers = ['MRN12345', 'MRN1234567', 'MRN12A456', 'MEDREC123456', 'MRN123-456'] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('NationalId pattern', () => { + const regex = SensitivePatterns.NationalId + + it('should match valid national IDs', () => { + const validIds = ['NID1234567890', 'NID0987654321', 'NID0000000000'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid national IDs', () => { + const invalidIds = ['NID123456789', 'NID12345678901', 'NID12345A7890', 'NATIONAL12345678', 'NID123-4567890'] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('Password pattern', () => { + const regex = SensitivePatterns.Password + + it('should match valid password entries', () => { + const validPasswords = ['password: myP@ssw0rd', 'password: 12345678', 'password: abcdefgh'] + + validPasswords.forEach((entry) => { + expect(entry).toMatch(regex) + }) + }) + + it('should not match invalid password entries', () => { + const invalidPasswords = [ + 'pass: myP@ssw0rd', + 'password myP@ssw0rd', + 'password: ', + 'password:12345678', + 'PASSWORD: myP@ssw0rd', + ] + + invalidPasswords.forEach((entry) => { + expect(entry).not.toMatch(regex) + }) + }) + }) + + describe('PersonalIdentificationNumber pattern', () => { + const regex = SensitivePatterns.PersonalIdentificationNumber + + it('should match valid personal identification numbers', () => { + const validPins = ['PIN1234', 'PIN567890'] + + validPins.forEach((pin) => { + expect(pin).toMatch(regex) + }) + }) + + it('should not match invalid personal identification numbers', () => { + const invalidPins = ['PIN123', 'PIN1234567', 'PIN12A4', 'PERSONALPIN1234', 'PIN123-456'] + + invalidPins.forEach((pin) => { + expect(pin).not.toMatch(regex) + }) + }) + }) + + describe('PersonalTaxCode pattern', () => { + const regex = SensitivePatterns.PersonalTaxCode + + it('should match valid personal tax codes', () => { + const validCodes = ['PTC12345678901', 'PTC09876543210', 'PTC00000000000'] + + validCodes.forEach((code) => { + expect(code).toMatch(regex) + }) + }) + + it('should not match invalid personal tax codes', () => { + const invalidCodes = [ + 'PTC1234567890', + 'PTC1234567890123', + 'PTC12345A789012', + 'PERSONTAX1234567', + 'PTC123-45678901', + ] + + invalidCodes.forEach((code) => { + expect(code).not.toMatch(regex) + }) + }) + }) + + describe('PhoneNumber pattern', () => { + const regex = SensitivePatterns.PhoneNumber + + it('should match valid phone numbers', () => { + const validNumbers = ['123-456-7890', '123.456.7890', '1234567890', '123-4567890', '123456-7890'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid phone numbers', () => { + const invalidNumbers = ['12-3456-7890', '123-45-67890', '123456789', '123-4567-890', 'phone1234567'] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('SsinitNumber pattern', () => { + const regex = SensitivePatterns.SsinitNumber + + it('should match valid SSNIT numbers', () => { + const validNumbers = ['SSNIT12345678901', 'SSNIT09876543210', 'SSNIT00000000000'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid SSNIT numbers', () => { + const invalidNumbers = [ + 'SSNIT1234567890', + 'SSNIT123456789012', + 'SSNIT12345A78901', + 'SSINIT1234567890', + 'SSNIT123-45678901', + ] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('Ssn pattern', () => { + const regex = SensitivePatterns.Ssn + + it('should match valid SSNs', () => { + const validSsns = ['123-45-6789', '987-65-4321', '000-00-0000'] + + validSsns.forEach((ssn) => { + expect(ssn).toMatch(regex) + }) + }) + + it('should not match invalid SSNs', () => { + const invalidSsns = ['123-456-789', '123-45-67890', '123456789', '12-345-6789', '123-45-678a'] + + invalidSsns.forEach((ssn) => { + expect(ssn).not.toMatch(regex) + }) + }) + }) + + describe('StudentId pattern', () => { + const regex = SensitivePatterns.StudentId + + it('should match valid student IDs', () => { + const validIds = ['SID12345678', 'SID87654321', 'SID00000000'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid student IDs', () => { + const invalidIds = ['SID1234567', 'SID123456789', 'SID12A4567', 'STUDENT123456', 'SID123-4567'] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) + + describe('TaxIdentificationNumber pattern', () => { + const regex = SensitivePatterns.TaxIdentificationNumber + + it('should match valid tax identification numbers', () => { + const validNumbers = ['TIN123456789', 'TIN098765432', 'TIN000000000'] + + validNumbers.forEach((number) => { + expect(number).toMatch(regex) + }) + }) + + it('should not match invalid tax identification numbers', () => { + const invalidNumbers = ['TIN12345678', 'TIN1234567890', 'TIN12345A789', 'TAX123456789', 'TIN123-456789'] + + invalidNumbers.forEach((number) => { + expect(number).not.toMatch(regex) + }) + }) + }) + + describe('TelecomCustomerId pattern', () => { + const regex = SensitivePatterns.TelecomCustomerId + + it('should match valid telecom customer IDs', () => { + const validIds = ['TCID1234567890', 'TCID0987654321', 'TCID0000000000'] + + validIds.forEach((id) => { + expect(id).toMatch(regex) + }) + }) + + it('should not match invalid telecom customer IDs', () => { + const invalidIds = [ + 'TCID123456789', + 'TCID12345678901', + 'TCID12345A7890', + 'TELCID1234567890', + 'TCID123-4567890', + ] + + invalidIds.forEach((id) => { + expect(id).not.toMatch(regex) + }) + }) + }) +})