diff --git a/.github/workflows/sast.yml b/.github/workflows/sast.yml index 154cb5422..256fec7f6 100644 --- a/.github/workflows/sast.yml +++ b/.github/workflows/sast.yml @@ -1,10 +1,11 @@ name: 'CodeQL' on: - push: pull_request: + push: schedule: - cron: '43 3 * * 5' + workflow_dispatch: permissions: contents: read diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c2dd6b54d..6988161dc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,7 @@ permissions: jobs: tests: - name: Tests + name: Tests (unit & fuzz) runs-on: ubuntu-latest strategy: @@ -34,4 +34,4 @@ jobs: - name: Unit tests run: | - npm run test:packages:unit + npm run test:packages:all diff --git a/package-lock.json b/package-lock.json index fe83c348f..6f8ea3d75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,14 @@ "@commitlint/cli": "^19.0.0", "@commitlint/config-conventional": "^19.0.0", "aws-sdk-client-mock": "^4.0.0", + "fast-check": "^3.0.0", "husky": "^9.0.0", "lint-staged": "^15.0.0", "prettier": "^3.0.0", "tinybench": "^3.0.0", "ts-standard": "^12.0.0", "tsd": "^0.31.0", - "typescript": "^5.4.3" + "typescript": "^5.0.0" }, "engines": { "node": ">=20" @@ -264,48 +265,48 @@ } }, "node_modules/@aws-sdk/client-apigatewaymanagementapi": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewaymanagementapi/-/client-apigatewaymanagementapi-3.709.0.tgz", - "integrity": "sha512-dY7aJ+52C+OO3ZiUpPgBu+tWsrZNjlILXwo3TXgrzAdqO+PcbwmJRd/f3vZk5uXYytw9Pdq777oh3YIbYRl8OA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewaymanagementapi/-/client-apigatewaymanagementapi-3.716.0.tgz", + "integrity": "sha512-rRcBTmJjg8rXEbXpD3gjSzZvtFqgdW0lzjGvToM+j3Uk/REf3UKw0xM7QfOAhSEO8tO2gqPZv7wxWxwceOniLQ==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -317,48 +318,48 @@ } }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.709.0.tgz", - "integrity": "sha512-Xw2hwAJ9KoE2J1wsX+q0AzN3POGLskd0CkGtLs2T24w3CcaPWJVDE01/x2qu+vYbRr1barCF16cQIztx/3W58w==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.716.0.tgz", + "integrity": "sha512-+gaQ7rP3H0dx4nYi6cWcQSaWFlUW17vlPR4e5+xHZQXU3thxLpAb1/+DKL3EYBbDHGZAaST0nNFTDCLIBMeULQ==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -371,48 +372,48 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.709.0.tgz", - "integrity": "sha512-I5a8ilF+jKAz6fmOOuHy2UEcod9ikRGBjACcC6ayxs4z4VqTnWynD6ALKvtUR3lk1Ur6nzAG1tTm/qAYKKmyBg==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.716.0.tgz", + "integrity": "sha512-tXMp76f1ZzrZtJwVPnLe28YINbNmwxv595Z6kpi9yc3nB/YUdeBUND8u1dgQd/sVNwZzmgcR6nyXnT+GQkeoUg==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -424,49 +425,49 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.709.0.tgz", - "integrity": "sha512-p/GVuEgfPccFUm5lxr7EPi5gQAsUO4SDdKcIV+v/dNwtH2SXEgnFN0o1TEIJtuVY3BsQyXyR1aMjeQ81O832kw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.716.0.tgz", + "integrity": "sha512-/brlrkp5ShSgxSmzj1b7S6ds7iYpqnTlwxdX0ld+bIRrFJH2PS91CAuT1rZiqLG9rarWfk3Of5G0BrclroVnhA==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-endpoint-discovery": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.0", + "@aws-sdk/middleware-endpoint-discovery": "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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -481,35 +482,35 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.709.0.tgz", - "integrity": "sha512-IvC7coELoQ4YenTdULArVdL5yk6jNRVUALX1aqv9JlPdrXxb3Om6YrM9e7AlSTLxrULTsAe1ubm8i/DmcSY/Ng==", + "version": "3.717.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.717.0.tgz", + "integrity": "sha512-jzaH8IskAXVnqlZ3/H/ROwrB2HCnq/atlN7Hi7FIfjWvMPf5nfcJKfzJ1MXFX0EQR5qO6X4TbK7rgi7Bjw9NjQ==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-bucket-endpoint": "3.709.0", - "@aws-sdk/middleware-expect-continue": "3.709.0", - "@aws-sdk/middleware-flexible-checksums": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-location-constraint": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-sdk-s3": "3.709.0", - "@aws-sdk/middleware-ssec": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/signature-v4-multi-region": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.0", + "@aws-sdk/middleware-bucket-endpoint": "3.714.0", + "@aws-sdk/middleware-expect-continue": "3.714.0", + "@aws-sdk/middleware-flexible-checksums": "3.717.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.716.0", + "@aws-sdk/middleware-ssec": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.716.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/signature-v4-multi-region": "3.716.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.716.0", "@aws-sdk/xml-builder": "3.709.0", "@smithy/config-resolver": "^3.0.13", "@smithy/core": "^2.5.5", @@ -523,21 +524,21 @@ "@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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -551,48 +552,48 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.709.0.tgz", - "integrity": "sha512-AiNuMTCqc2gt6n5sjtcnEGvDgW+PJPcDSWi9BB/0dUStqRsrJ6LqqQXWs0sXixHWX1PSkCZeYCt/4dw5VOwwag==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.716.0.tgz", + "integrity": "sha512-j2JboOSR3PMoT5msr4uIMwkIm1owzkqgWI8i40IPDa1oeJXmZIx/xkCQq6Hxu5Ve1b2xtrw/8k1LN+TMCvuIfA==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -606,48 +607,48 @@ } }, "node_modules/@aws-sdk/client-servicediscovery": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-servicediscovery/-/client-servicediscovery-3.709.0.tgz", - "integrity": "sha512-Ht3cjFcsptgHKTqF3OiV+YxdN1DhzZM7n86awwKUGpEqpInxs/aOjaD8Y2V3fraLdcuNMSsviPJAyNprZVJRqw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-servicediscovery/-/client-servicediscovery-3.716.0.tgz", + "integrity": "sha512-IyAtNGgY/BbQ+ZkMX6NiXXFbaG4h/M3ZOJ0kV+ak+I/RzHKhZVIom82YynGP8RSG1s9KCFJlyMBKo0wRHCCFxA==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -661,28 +662,28 @@ } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.709.0.tgz", - "integrity": "sha512-qVMDxAnUbA/BnMf+utUZ+eoy6F4T7RsHnwor674/Bn5TsRPfGXYPTCpqqGZDTj4DYew6/G8ePpb3YwClVOqNRg==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.716.0.tgz", + "integrity": "sha512-nDpnXvmo65dDGw+/c/c6e/ic9HUvJRayzs9Rc4DdatsnAZE71gcWoLUBupJ/IOkNwgoVau0TDs9SRlmsuDsm1w==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-sdk-sqs": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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-sdk-sqs": "3.716.0", + "@aws-sdk/middleware-user-agent": "3.716.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.716.0", "@smithy/config-resolver": "^3.0.13", "@smithy/core": "^2.5.5", "@smithy/fetch-http-handler": "^4.1.2", @@ -690,21 +691,21 @@ "@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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -716,48 +717,48 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.709.0.tgz", - "integrity": "sha512-WSm2RY7Tiix5+0V5oNqdmcKDgd10XZy8BYLPYPy0+dBHv0XcIYit5UmCHsrpgu4WBU0ppXq5XevCcMhBbJZu1A==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.716.0.tgz", + "integrity": "sha512-da2wTUBCLGRoQf5Ahm/LuUIR/OkQ09kaX7yYRC2Vw+TOcMXbozJSzXbm99SXsOL4u8a8PRq+Vwfptc36e18Feg==", "dev": true, "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.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -772,45 +773,45 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.709.0.tgz", - "integrity": "sha512-Qxeo8cN0jNy6Wnbqq4wucffAGJM6sJjofoTgNtPA6cC7sPYx7aYC6OAAAo6NaMRY+WywOKdS9Wgjx2QYRxKx7w==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.716.0.tgz", + "integrity": "sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/core": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -822,46 +823,46 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.709.0.tgz", - "integrity": "sha512-1w6egz17QQy661lNCRmZZlqIANEbD6g2VFAQIJbVwSiu7brg+GUns+mT1eLLLHAMQc1sL0Ds8/ybSK2SrgGgIA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.716.0.tgz", + "integrity": "sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -872,51 +873,51 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.709.0" + "@aws-sdk/client-sts": "^3.716.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.709.0.tgz", - "integrity": "sha512-cBAvlPg6yslXNL385UUGFPw+XY+lA9BzioNdIFkMo3fEUlTShogTtiWz4LsyLHoN6LhKojssP9DSmmWKWjCZIw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.716.0.tgz", + "integrity": "sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==", "dev": true, "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.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/middleware-host-header": "3.709.0", - "@aws-sdk/middleware-logger": "3.709.0", - "@aws-sdk/middleware-recursion-detection": "3.709.0", - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/region-config-resolver": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", - "@aws-sdk/util-user-agent-browser": "3.709.0", - "@aws-sdk/util-user-agent-node": "3.709.0", + "@aws-sdk/client-sso-oidc": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.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.716.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.716.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-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", "@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/smithy-client": "^3.5.1", "@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-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", "@smithy/util-endpoints": "^2.1.7", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -928,19 +929,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.709.0.tgz", - "integrity": "sha512-7kuSpzdOTAE026j85wq/fN9UDZ70n0OHw81vFqMWwlEFtm5IQ/MRCLKcC4HkXxTdfy1PqFlmoXxWqeBa15tujw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.716.0.tgz", + "integrity": "sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@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/smithy-client": "^3.5.1", "@smithy/types": "^3.7.2", "@smithy/util-middleware": "^3.0.11", "fast-xml-parser": "4.4.1", @@ -951,14 +952,14 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.709.0.tgz", - "integrity": "sha512-WLzDcYo7pob8fPeeOhgVqYuV21uUKWb1RobITQzZhv0ZSToIl1KjuyRQsznC23Sot9CFl+0V2QLFFNwRiIuH7w==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.716.0.tgz", + "integrity": "sha512-iHmyB3Z6KjAQcpWW01LRjqbOM2OFVfaiGH6tRylPvJN/GnlITLUnUZi/PBAFk1f+TZ94dQWN961c1L/LFCSg9Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/client-cognito-identity": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/property-provider": "^3.1.11", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -968,14 +969,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.709.0.tgz", - "integrity": "sha512-ZMAp9LSikvHDFVa84dKpQmow6wsg956Um20cKuioPpX2GGreJFur7oduD+tRJT6FtIOHn+64YH+0MwiXLhsaIQ==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.716.0.tgz", + "integrity": "sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/property-provider": "^3.1.11", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -985,19 +986,19 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.709.0.tgz", - "integrity": "sha512-lIS7XLwCOyJnLD70f+VIRr8DNV1HPQe9oN6aguYrhoczqz7vDiVZLe3lh714cJqq9rdxzFypK5DqKHmcscMEPQ==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.716.0.tgz", + "integrity": "sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.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/smithy-client": "^3.5.1", "@smithy/types": "^3.7.2", "@smithy/util-stream": "^3.3.2", "tslib": "^2.6.2" @@ -1007,19 +1008,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.709.0.tgz", - "integrity": "sha512-qCF8IIGcPoUp+Ib3ANhbF5gElxFd+kIrtv2/1tKdvhudMANstQbMiWV0LTH47ZZR6c3as4iSrm09NZnpEoD/pA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.716.0.tgz", + "integrity": "sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-env": "3.709.0", - "@aws-sdk/credential-provider-http": "3.709.0", - "@aws-sdk/credential-provider-process": "3.709.0", - "@aws-sdk/credential-provider-sso": "3.709.0", - "@aws-sdk/credential-provider-web-identity": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-env": "3.716.0", + "@aws-sdk/credential-provider-http": "3.716.0", + "@aws-sdk/credential-provider-process": "3.716.0", + "@aws-sdk/credential-provider-sso": "3.716.0", + "@aws-sdk/credential-provider-web-identity": "3.716.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", @@ -1030,23 +1031,23 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.709.0" + "@aws-sdk/client-sts": "^3.716.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.709.0.tgz", - "integrity": "sha512-4HRX9KYWPSjO5O/Vg03YAsebKpvTjTvpK1n7zHYBmlLMBLxUrVsL1nNKKC5p2/7OW3RL8XR1ki3QkoV7kGRxUQ==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.716.0.tgz", + "integrity": "sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.709.0", - "@aws-sdk/credential-provider-http": "3.709.0", - "@aws-sdk/credential-provider-ini": "3.709.0", - "@aws-sdk/credential-provider-process": "3.709.0", - "@aws-sdk/credential-provider-sso": "3.709.0", - "@aws-sdk/credential-provider-web-identity": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/credential-provider-env": "3.716.0", + "@aws-sdk/credential-provider-http": "3.716.0", + "@aws-sdk/credential-provider-ini": "3.716.0", + "@aws-sdk/credential-provider-process": "3.716.0", + "@aws-sdk/credential-provider-sso": "3.716.0", + "@aws-sdk/credential-provider-web-identity": "3.716.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", @@ -1058,14 +1059,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.709.0.tgz", - "integrity": "sha512-IAC+jPlGQII6jhIylHOwh3RgSobqlgL59nw2qYTURr8hMCI0Z1p5y2ee646HTVt4WeCYyzUAXfxr6YI/Vitv+Q==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.716.0.tgz", + "integrity": "sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.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", @@ -1076,16 +1077,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.709.0.tgz", - "integrity": "sha512-rYdTDOxazS2GdGScelsRK5CAkktRLCCdRjlwXaxrcW57j749hEqxcF5uTv9RD6WBwInfedcSywErNZB+hylQlg==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.716.0.tgz", + "integrity": "sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/token-providers": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/client-sso": "3.716.0", + "@aws-sdk/core": "3.716.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", @@ -1096,14 +1097,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.709.0.tgz", - "integrity": "sha512-2lbDfE0IQ6gma/7BB2JpkjW5G0wGe4AS0x80oybYAYYviJmUtIR3Cn2pXun6bnAWElt4wYKl4su7oC36rs5rNA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.716.0.tgz", + "integrity": "sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/property-provider": "^3.1.11", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1112,29 +1113,29 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.709.0" + "@aws-sdk/client-sts": "^3.716.0" } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.709.0.tgz", - "integrity": "sha512-v1OfAWhYhAz7XPtjWlQ3jDLZHCpuNrLP2bRWTEjRty8yZLN92ANehincULUGvUNszFO8rfpq2g4dmtk8XmqTzA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.709.0", - "@aws-sdk/client-sso": "3.709.0", - "@aws-sdk/client-sts": "3.709.0", - "@aws-sdk/core": "3.709.0", - "@aws-sdk/credential-provider-cognito-identity": "3.709.0", - "@aws-sdk/credential-provider-env": "3.709.0", - "@aws-sdk/credential-provider-http": "3.709.0", - "@aws-sdk/credential-provider-ini": "3.709.0", - "@aws-sdk/credential-provider-node": "3.709.0", - "@aws-sdk/credential-provider-process": "3.709.0", - "@aws-sdk/credential-provider-sso": "3.709.0", - "@aws-sdk/credential-provider-web-identity": "3.709.0", - "@aws-sdk/types": "3.709.0", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.716.0.tgz", + "integrity": "sha512-UsalnK1MMfbI8Chb7BFghUvXf+zdqqiZLpSJp9ytXe0/thoafsi2jo0pyFeU08uarU/YA3Usl15I4SdK5uQr1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.716.0", + "@aws-sdk/client-sso": "3.716.0", + "@aws-sdk/client-sts": "3.716.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-cognito-identity": "3.716.0", + "@aws-sdk/credential-provider-env": "3.716.0", + "@aws-sdk/credential-provider-http": "3.716.0", + "@aws-sdk/credential-provider-ini": "3.716.0", + "@aws-sdk/credential-provider-node": "3.716.0", + "@aws-sdk/credential-provider-process": "3.716.0", + "@aws-sdk/credential-provider-sso": "3.716.0", + "@aws-sdk/credential-provider-web-identity": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/credential-provider-imds": "^3.2.8", "@smithy/property-provider": "^3.1.11", "@smithy/types": "^3.7.2", @@ -1159,13 +1160,13 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.709.0.tgz", - "integrity": "sha512-03+tJOd7KIZOiqWH7Z8BOfQIWkKJgjcpKOJKZ6FR2KjWGUOE1G+bo11wF4UuHQ0RmpKnApt+pQghZmSnE7WEeg==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@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", @@ -1178,14 +1179,14 @@ } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.709.0.tgz", - "integrity": "sha512-6CSHoAy3sVBJdeGiBpoRqVHpqLPqv5QuDxKsEMHoGdbGATmffyn2whTFfo5hfRYsN9WPz/XxUX2iynqQCnlrzw==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.714.0.tgz", + "integrity": "sha512-WttOa+M6/aPCK0OHPlWPBaQDTVhfKsWYnmDNvS2d0qvoJEjZuGRyf5DxcA2gWt3MMekxwq9IxOpdA5R9T70HiA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/endpoint-cache": "3.693.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/node-config-provider": "^3.1.12", "@smithy/protocol-http": "^4.1.8", "@smithy/types": "^3.7.2", @@ -1196,13 +1197,13 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.709.0.tgz", - "integrity": "sha512-Tbl/DFvE4rHl8lMb9IzetwK4tf5R3VeHZkvEXQalsWoK0tbEQ8kXWi7wAYO4qbE7bFVvaxKX+irjJjTxf3BrCQ==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/protocol-http": "^4.1.8", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1212,17 +1213,17 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.709.0.tgz", - "integrity": "sha512-wbYm9tkyCaqMeU82yjaXw7V5BxCSlSLNupENW63LC7Fvyo/aQzj6LjSMHcBpR2QwjBEhXCtF47L7aQ8SPTNhdw==", + "version": "3.717.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.717.0.tgz", + "integrity": "sha512-a5kY5r7/7bDZZlOQQGWOR1ulQewdtNexdW1Ex5DD0FLKlFY7RD0va24hxQ6BP7mWHol+Dx4pj6UQ8ahk0ap1tw==", "dev": true, "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.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.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", @@ -1237,13 +1238,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.709.0.tgz", - "integrity": "sha512-8gQYCYAaIw4lOCd5WYdf15Y/61MgRsAnrb2eiTl+icMlUOOzl8aOl5iDwm/Idp0oHZTflwxM4XSvGXO83PRWcw==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz", + "integrity": "sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/protocol-http": "^4.1.8", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1253,13 +1254,13 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.709.0.tgz", - "integrity": "sha512-5YQWPXfZq7OE0jB2G0PP8K10GBod/YPJXb+1CfJS6FbQaglRoIm8KZmVEvJNnptSKyGtE62veeCcCQcfAUfFig==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, @@ -1268,13 +1269,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.709.0.tgz", - "integrity": "sha512-jDoGSccXv9zebnpUoisjWd5u5ZPIalrmm6TjvPzZ8UqzQt3Beiz0tnQwmxQD6KRc7ADweWP5Ntiqzbw9xpVajg==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz", + "integrity": "sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, @@ -1283,13 +1284,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.709.0.tgz", - "integrity": "sha512-PObL/wLr4lkfbQ0yXUWaoCWu/jcwfwZzCjsUiXW/H6hW9b/00enZxmx7OhtJYaR6xmh/Lcx5wbhIoDCbzdv0tw==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/protocol-http": "^4.1.8", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1299,20 +1300,20 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.709.0.tgz", - "integrity": "sha512-FwtOG9t9xsLoLOQZ6qAdsWOjx9dsO6t28IjIDV1l6Ixiu2oC0Yks7goONjJUH0IDE4pDDDGzmuq0sn1XtHhheA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.716.0.tgz", + "integrity": "sha512-Qzz5OfRA/5brqfvq+JHTInwS1EuJ1+tC6qMtwKWJN3czMnVJVdnnsPTf+G5IM/1yYaGEIjY8rC1ExQLcc8ApFQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/core": "3.716.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/smithy-client": "^3.5.1", "@smithy/types": "^3.7.2", "@smithy/util-config-provider": "^3.0.0", "@smithy/util-middleware": "^3.0.11", @@ -1325,14 +1326,14 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.709.0.tgz", - "integrity": "sha512-K4FXDa/0VIl0zAOvuwpBN3vIKOXAVt7r+FK5MlhIwRHzUC6Ig5NoZd2nmxzSVwj/MjbXwZTNnUGTs1+EGCPh6Q==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.716.0.tgz", + "integrity": "sha512-dAkFlLv4W0GO9lP419eXxFZ7UgO/mTGC/WlS6OYrSDFemzySSpxE+PNL6Eg2rqVNLiwhW4U9+6e8CC8RE++lEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", - "@smithy/smithy-client": "^3.5.0", + "@aws-sdk/types": "3.714.0", + "@smithy/smithy-client": "^3.5.1", "@smithy/types": "^3.7.2", "@smithy/util-hex-encoding": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -1343,13 +1344,13 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.709.0.tgz", - "integrity": "sha512-2muiLe7YkmlwZp2SKz+goZrDThGfRq3o0FcJF3Puc0XGmcEPEDjih537mCoTrGgcXNFlBc7YChd84r3t72ySaQ==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz", + "integrity": "sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, @@ -1358,15 +1359,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.709.0.tgz", - "integrity": "sha512-ooc9ZJvgkjPhi9q05XwSfNTXkEBEIfL4hleo5rQBKwHG3aTHvwOM7LLzhdX56QZVa6sorPBp6fwULuRDSqiQHw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.716.0.tgz", + "integrity": "sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.709.0", - "@aws-sdk/types": "3.709.0", - "@aws-sdk/util-endpoints": "3.709.0", + "@aws-sdk/core": "3.716.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", @@ -1377,16 +1378,16 @@ } }, "node_modules/@aws-sdk/rds-signer": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/rds-signer/-/rds-signer-3.709.0.tgz", - "integrity": "sha512-2TzmWJxkgqVDCetF5HAOjdYodIh26arBlJ7YzmmOjTbglLY+OMg7U5mU9jCHmI7frCinVu9lXVudGTGwp6+5PQ==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/rds-signer/-/rds-signer-3.716.0.tgz", + "integrity": "sha512-ZM+4RzVxwI+v2dvkOorzJeS7bUhxY3AH8mt4qE1Ed5HkuUPMRk4kYB19InW/N/mqt1OiwdxKb7c/MLcZjQus9w==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/credential-providers": "3.709.0", - "@aws-sdk/util-format-url": "3.709.0", + "@aws-sdk/credential-providers": "3.716.0", + "@aws-sdk/util-format-url": "3.714.0", "@smithy/config-resolver": "^3.0.13", "@smithy/hash-node": "^3.0.11", "@smithy/invalid-dependency": "^3.0.11", @@ -1401,13 +1402,13 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.709.0.tgz", - "integrity": "sha512-/NoCAMEVKAg3kBKOrNtgOfL+ECt6nrl+L7q2SyYmrcY4tVCmwuECVqewQaHc03fTnJijfKLccw0Fj+6wOCnB6w==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@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", @@ -1419,14 +1420,14 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.709.0.tgz", - "integrity": "sha512-m0vhJEy6SLbjL11K9cHzX/ZhCIj//1GkTbYk2d4tTQFSuPyJEkjmoeHk9dYm2mJy0wH48j29OJadI1JUsR5bOw==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.716.0.tgz", + "integrity": "sha512-k0goWotZKKz+kV6Ln0qeAMSeSVi4NipuIIz5R8A0uCF2zBK4CXWdZR7KeaIoLBhJwQnHj1UU7E+2MK74KIUBzA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/middleware-sdk-s3": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/protocol-http": "^4.1.8", "@smithy/signature-v4": "^4.2.4", "@smithy/types": "^3.7.2", @@ -1437,13 +1438,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.709.0.tgz", - "integrity": "sha512-q5Ar6k71nci43IbULFgC8a89d/3EHpmd7HvBzqVGRcHnoPwh8eZDBfbBXKH83NGwcS1qPSRYiDbVfeWPm4/1jA==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.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", @@ -1453,13 +1454,13 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.709.0" + "@aws-sdk/client-sso-oidc": "^3.714.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.709.0.tgz", - "integrity": "sha512-ArtLTMxgjf13Kfu3gWH3Ez9Q5TkDdcRZUofpKH3pMGB/C6KAbeSCtIIDKfoRTUABzyGlPyCrZdnFjKyH+ypIpg==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", + "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1484,9 +1485,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.709.0.tgz", - "integrity": "sha512-rGr9+Po6Ma2BHV2hIhfXdn8hWxLtmgFzFRqqtxOlRRIDN55wkb2AYXz/ydzf4kgb+PzT8sQxtn6hf7pDkl+yAg==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.716.0.tgz", + "integrity": "sha512-lXAbIj+TvMxgeV5Rr9Q1U+g6ovkTMVi7+Ihp6vz8KAyySwAr5zhzOalWq7sRML350yn0TCCwyvFxfLRClJxRUw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1496,17 +1497,17 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.709.0" + "@aws-sdk/client-dynamodb": "^3.716.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.709.0.tgz", - "integrity": "sha512-Mbc7AtL5WGCTKC16IGeUTz+sjpC3ptBda2t0CcK0kMVw3THDdcSq6ZlNKO747cNqdbwUvW34oHteUiHv4/z88Q==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/types": "^3.7.2", "@smithy/util-endpoints": "^2.1.7", "tslib": "^2.6.2" @@ -1516,13 +1517,13 @@ } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.709.0.tgz", - "integrity": "sha512-HGR11hx1KeFfoub/TACf+Yyal37lR85791Di2QPaElQThaqztLlppxale3EohKboOFf7Q/zvslJyM0fmgrlpQw==", + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.714.0.tgz", + "integrity": "sha512-PA/ES6BeKmYzFOsZ3az/8MqSLf6uzXAS7GsYONZMF6YASn4ewd/AspuvQMp6+x9VreAPCq7PecF+XL9KXejtPg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/querystring-builder": "^3.0.11", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1545,27 +1546,27 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.709.0.tgz", - "integrity": "sha512-/rL2GasJzdTWUURCQKFldw2wqBtY4k4kCiA2tVZSKg3y4Ey7zO34SW8ebaeCE2/xoWOyLR2/etdKyphoo4Zrtg==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.709.0", + "@aws-sdk/types": "3.714.0", "@smithy/types": "^3.7.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.709.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.709.0.tgz", - "integrity": "sha512-trBfzSCVWy7ILgqhEXgiuM7hfRCw4F4a8IK90tjk9YL0jgoJ6eJuOp7+DfCtHJaygoBxD3cdMFkOu+lluFmGBA==", + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.716.0.tgz", + "integrity": "sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.709.0", - "@aws-sdk/types": "3.709.0", + "@aws-sdk/middleware-user-agent": "3.716.0", + "@aws-sdk/types": "3.714.0", "@smithy/node-config-provider": "^3.1.12", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -1622,15 +1623,15 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.6.0.tgz", - "integrity": "sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w==", + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.6.1.tgz", + "integrity": "sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==", "dev": true, "license": "MIT", "dependencies": { "@commitlint/format": "^19.5.0", "@commitlint/lint": "^19.6.0", - "@commitlint/load": "^19.5.0", + "@commitlint/load": "^19.6.1", "@commitlint/read": "^19.5.0", "@commitlint/types": "^19.5.0", "tinyexec": "^0.3.0", @@ -1744,9 +1745,9 @@ } }, "node_modules/@commitlint/load": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz", - "integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==", + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.6.1.tgz", + "integrity": "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1756,7 +1757,7 @@ "@commitlint/types": "^19.5.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^5.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0" @@ -1898,9 +1899,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", - "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ "ppc64" ], @@ -1915,9 +1916,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", - "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ "arm" ], @@ -1932,9 +1933,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", - "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], @@ -1949,9 +1950,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", - "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], @@ -1966,9 +1967,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", - "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], @@ -1983,9 +1984,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", - "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], @@ -2000,9 +2001,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", - "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ "arm64" ], @@ -2017,9 +2018,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", - "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ "x64" ], @@ -2034,9 +2035,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", - "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ "arm" ], @@ -2051,9 +2052,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", - "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ "arm64" ], @@ -2068,9 +2069,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", - "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "cpu": [ "ia32" ], @@ -2085,9 +2086,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", - "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "cpu": [ "loong64" ], @@ -2102,9 +2103,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", - "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "cpu": [ "mips64el" ], @@ -2119,9 +2120,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", - "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "cpu": [ "ppc64" ], @@ -2136,9 +2137,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", - "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "cpu": [ "riscv64" ], @@ -2153,9 +2154,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", - "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "cpu": [ "s390x" ], @@ -2170,9 +2171,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", - "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "cpu": [ "x64" ], @@ -2186,10 +2187,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", - "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ "x64" ], @@ -2204,9 +2222,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", - "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "cpu": [ "arm64" ], @@ -2221,9 +2239,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", - "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "cpu": [ "x64" ], @@ -2238,9 +2256,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", - "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "cpu": [ "x64" ], @@ -2255,9 +2273,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", - "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "cpu": [ "arm64" ], @@ -2272,9 +2290,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", - "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "cpu": [ "ia32" ], @@ -2289,9 +2307,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", - "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ "x64" ], @@ -2775,9 +2793,9 @@ } }, "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": "2.5.6", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.6.tgz", + "integrity": "sha512-w494xO+CPwG/5B/N2l0obHv2Fi9U4DAY+sTi1GWT3BVvGpZetJjJXAynIO9IHp4zS1PinGhXtRSZydUXbJO4ag==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2786,7 +2804,7 @@ "@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-stream": "^3.3.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2993,13 +3011,13 @@ } }, "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": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.7.tgz", + "integrity": "sha512-GTxSKf280aJBANGN97MomUQhW1VNxZ6w7HAj/pvZM5MUHbMPOGnWOp1PRYKi4czMaHNj9bdiA+ZarmT3Wkdqiw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", + "@smithy/core": "^2.5.6", "@smithy/middleware-serde": "^3.0.11", "@smithy/node-config-provider": "^3.1.12", "@smithy/shared-ini-file-loader": "^3.1.12", @@ -3013,16 +3031,16 @@ } }, "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": "3.0.32", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.32.tgz", + "integrity": "sha512-v8gVA9HqibuZkFuFpfkC/EcHE8no/3Mv3JvRUGly63Axt4yyas1WDVOasFSdiqm2hZVpY7/k8mRT1Wd5k7r3Yw==", "dev": true, "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/smithy-client": "^3.5.2", "@smithy/types": "^3.7.2", "@smithy/util-middleware": "^3.0.11", "@smithy/util-retry": "^3.0.11", @@ -3078,9 +3096,9 @@ } }, "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": "3.3.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", + "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3199,18 +3217,18 @@ } }, "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": "3.5.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.5.2.tgz", + "integrity": "sha512-h7xn+1wlpbXyLrtvo/teHR1SFGIIrQ3imzG0nz43zVLAJgvfC1Mtdwa1pFhoIOYrt/TiNjt4pD0gSYQEdZSBtg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.5.5", - "@smithy/middleware-endpoint": "^3.2.5", + "@smithy/core": "^2.5.6", + "@smithy/middleware-endpoint": "^3.2.7", "@smithy/middleware-stack": "^3.0.11", "@smithy/protocol-http": "^4.1.8", "@smithy/types": "^3.7.2", - "@smithy/util-stream": "^3.3.2", + "@smithy/util-stream": "^3.3.3", "tslib": "^2.6.2" }, "engines": { @@ -3308,14 +3326,14 @@ } }, "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": "3.0.32", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.32.tgz", + "integrity": "sha512-FAGsnm/xJ19SZeoqGyo9CosqjUlm+XJTmygDMktebvDKw3bKiIiZ40O1MA6Z52KLmekYU2GO7BEK7u6e7ZORKw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.11", - "@smithy/smithy-client": "^3.5.0", + "@smithy/smithy-client": "^3.5.2", "@smithy/types": "^3.7.2", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -3325,9 +3343,9 @@ } }, "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": "3.0.32", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.32.tgz", + "integrity": "sha512-2CzKhkPFCVdd15f3+0D1rldNlvJME8pVRBtVVsea2hy7lcOn0bGB0dTVUwzgfM4LW/aU4IOg3jWf25ZWaxbOiw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3335,7 +3353,7 @@ "@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/smithy-client": "^3.5.2", "@smithy/types": "^3.7.2", "tslib": "^2.6.2" }, @@ -3401,14 +3419,14 @@ } }, "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": "3.3.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.3.tgz", + "integrity": "sha512-bOm0YMMxRjbI3X6QkWwADPFkh2AH2xBMQIB1IQgCsCRqXXpSJatgjUR3oxHthpYwFkw3WPkOt8VgMpJxC0rFqg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^4.1.2", - "@smithy/node-http-handler": "^3.3.2", + "@smithy/node-http-handler": "^3.3.3", "@smithy/types": "^3.7.2", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", @@ -3552,9 +3570,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", - "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.3.tgz", + "integrity": "sha512-JEhMNwUJt7bw728CydvYzntD0XJeTmDnvwLlbfbAhE7Tbslm/ax6bdIiUwTgeVlZTsJQPwZwKpAkyDtIjsvx3g==", "dev": true, "license": "MIT", "dependencies": { @@ -3617,9 +3635,9 @@ } }, "node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "version": "22.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.3.tgz", + "integrity": "sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==", "dev": true, "license": "MIT", "dependencies": { @@ -4141,14 +4159,14 @@ "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -4238,16 +4256,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4257,16 +4275,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4293,20 +4311,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -4621,14 +4638,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", - "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "get-intrinsic": "^1.2.5" + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -4697,9 +4714,9 @@ } }, "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", "engines": { @@ -5040,21 +5057,21 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", - "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, "license": "MIT", "dependencies": { - "jiti": "^1.21.6" + "jiti": "^2.4.1" }, "engines": { - "node": ">=v16" + "node": ">=v18" }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=8.2", - "typescript": ">=4" + "cosmiconfig": ">=9", + "typescript": ">=5" } }, "node_modules/cross-spawn": { @@ -5086,15 +5103,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5104,31 +5121,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -5313,13 +5330,13 @@ } }, "node_modules/dunder-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", - "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", + "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, @@ -5378,58 +5395,61 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.23.8", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", + "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", + "object.assign": "^4.1.7", + "own-keys": "^1.0.0", "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -5459,27 +5479,28 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -5542,9 +5563,9 @@ } }, "node_modules/esbuild": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", - "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5555,30 +5576,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.0", - "@esbuild/android-arm": "0.24.0", - "@esbuild/android-arm64": "0.24.0", - "@esbuild/android-x64": "0.24.0", - "@esbuild/darwin-arm64": "0.24.0", - "@esbuild/darwin-x64": "0.24.0", - "@esbuild/freebsd-arm64": "0.24.0", - "@esbuild/freebsd-x64": "0.24.0", - "@esbuild/linux-arm": "0.24.0", - "@esbuild/linux-arm64": "0.24.0", - "@esbuild/linux-ia32": "0.24.0", - "@esbuild/linux-loong64": "0.24.0", - "@esbuild/linux-mips64el": "0.24.0", - "@esbuild/linux-ppc64": "0.24.0", - "@esbuild/linux-riscv64": "0.24.0", - "@esbuild/linux-s390x": "0.24.0", - "@esbuild/linux-x64": "0.24.0", - "@esbuild/netbsd-x64": "0.24.0", - "@esbuild/openbsd-arm64": "0.24.0", - "@esbuild/openbsd-x64": "0.24.0", - "@esbuild/sunos-x64": "0.24.0", - "@esbuild/win32-arm64": "0.24.0", - "@esbuild/win32-ia32": "0.24.0", - "@esbuild/win32-x64": "0.24.0" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/escalade": { @@ -6079,29 +6101,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -6531,6 +6553,29 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6611,9 +6656,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "license": "ISC", "dependencies": { @@ -6737,16 +6782,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6840,15 +6887,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7018,11 +7065,14 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7270,15 +7320,15 @@ } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7295,14 +7345,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7351,13 +7402,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz", - "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { @@ -7381,9 +7432,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -7415,13 +7466,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7441,13 +7493,13 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7511,19 +7563,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7535,13 +7574,13 @@ } }, "node_modules/is-number-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", - "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -7614,13 +7653,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7643,13 +7682,13 @@ } }, "node_modules/is-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", - "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -7660,15 +7699,15 @@ } }, "node_modules/is-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.0.tgz", - "integrity": "sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7691,13 +7730,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -7733,27 +7772,30 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7854,13 +7896,13 @@ } }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-tokens": { @@ -8047,13 +8089,13 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "15.2.11", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.11.tgz", - "integrity": "sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.3.0.tgz", + "integrity": "sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "~5.3.0", + "chalk": "~5.4.1", "commander": "~12.1.0", "debug": "~4.4.0", "execa": "~8.0.1", @@ -8350,9 +8392,9 @@ } }, "node_modules/math-intrinsics": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -8671,15 +8713,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -8739,13 +8783,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -8814,6 +8859,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -9266,6 +9329,23 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9444,9 +9524,9 @@ } }, "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz", + "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==", "dev": true, "license": "MIT", "dependencies": { @@ -9475,20 +9555,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", - "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "dunder-proto": "^1.0.0", - "es-abstract": "^1.23.5", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", - "which-builtin-type": "^1.2.0" + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -9549,19 +9629,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9718,16 +9801,33 @@ ], "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -10244,24 +10344,25 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10480,9 +10581,9 @@ "license": "MIT" }, "node_modules/tinybench": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-3.0.7.tgz", - "integrity": "sha512-soxV7Dp8eDKvPDv3c4qPJbUjLm1cZxFlsTaIH+FqalsazJzFrLG59dpiIN8OfgVcl11Hfj2b7apD73inCB67Mw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-3.1.0.tgz", + "integrity": "sha512-Km+oMh2xqNCxuyoUsqbRmHgFSd8sATh7v7xreP+kHN6x67w28Pawr83WmBxcaORvxkc0Ex6zgqK951yBnTFaaQ==", "dev": true, "license": "MIT", "engines": { @@ -10490,9 +10591,9 @@ } }, "node_modules/tinyexec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", - "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, @@ -10739,32 +10840,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -10774,19 +10875,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -10831,16 +10932,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10935,17 +11039,17 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", - "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.0", - "is-number-object": "^1.1.0", - "is-string": "^1.1.0", - "is-symbol": "^1.1.0" + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -10955,25 +11059,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -11002,16 +11106,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", - "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -11246,9 +11351,9 @@ } }, "packages/core/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11313,9 +11418,9 @@ } }, "packages/error-logger/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11425,9 +11530,9 @@ } }, "packages/http-error-handler/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11491,9 +11596,9 @@ } }, "packages/http-json-body-parser/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11523,9 +11628,9 @@ } }, "packages/http-multipart-body-parser/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11626,9 +11731,9 @@ } }, "packages/http-urlencode-body-parser/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11655,9 +11760,9 @@ } }, "packages/http-urlencode-path-parser/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11685,9 +11790,9 @@ } }, "packages/input-output-logger/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11720,9 +11825,9 @@ } }, "packages/rds-signer/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11895,9 +12000,9 @@ } }, "packages/util/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "20.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz", + "integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11974,9 +12079,9 @@ } }, "packages/ws-json-body-parser/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { diff --git a/package.json b/package.json index bb7cbc88c..21a1b4320 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,10 @@ "test:lint:ci": "ts-standard", "test:unit": "cd packages/$PACKAGE && npm run test:unit", "test:benchmark": "cd packages/$PACKAGE && npm run test:benchmark", - "test:packages": "npm run test:packages:typings && npm run test:packages:unit", - "test:packages:unit": "node --test --experimental-test-coverage ./packages/**/__tests__/*.js", + "test:packages": "npm run test:packages:typings && npm run test:packages:all", + "test:packages:all": "node --test --experimental-test-coverage ./packages/**/__tests__/*.js", + "test:packages:unit": "node --test --experimental-test-coverage ./packages/**/__tests__/index.js", + "test:packages:fuzz": "node --test --experimental-test-coverage ./packages/**/__tests__/fuzz.js", "test:packages:benchmark": "npm run test:benchmark --workspaces", "test:packages:typings": "ls packages | xargs -I {} tsd packages/{}", "test:llrt": "cd llrt && npm test", @@ -58,13 +60,14 @@ "@commitlint/cli": "^19.0.0", "@commitlint/config-conventional": "^19.0.0", "aws-sdk-client-mock": "^4.0.0", + "fast-check": "^3.0.0", "husky": "^9.0.0", "lint-staged": "^15.0.0", "prettier": "^3.0.0", "tinybench": "^3.0.0", "ts-standard": "^12.0.0", "tsd": "^0.31.0", - "typescript": "^5.4.3" + "typescript": "^5.0.0" }, "workspaces": [ "packages/*" diff --git a/packages/appconfig/__tests__/fuzz.js b/packages/appconfig/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/appconfig/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/appconfig/package.json b/packages/appconfig/package.json index 36d9b2133..a80dafa6a 100644 --- a/packages/appconfig/package.json +++ b/packages/appconfig/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/cloudwatch-metrics/__tests__/fuzz.js b/packages/cloudwatch-metrics/__tests__/fuzz.js new file mode 100644 index 000000000..e5c4bd4c8 --- /dev/null +++ b/packages/cloudwatch-metrics/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +// import middleware from '../index.js' // TODO needs mocking + +const handler = middy((event) => event) // .use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/cloudwatch-metrics/package.json b/packages/cloudwatch-metrics/package.json index 2efd61c19..c71af1b4a 100644 --- a/packages/cloudwatch-metrics/package.json +++ b/packages/cloudwatch-metrics/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/core/__tests__/fuzz.js b/packages/core/__tests__/fuzz.js new file mode 100644 index 000000000..fd5a4d049 --- /dev/null +++ b/packages/core/__tests__/fuzz.js @@ -0,0 +1,22 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../index.js' + +const handler = middy((event) => event) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/core/package.json b/packages/core/package.json index cabcc689b..322e48656 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js", "test:profile": "node --prof __benchmarks__/index.js && node --prof-process --preprocess -j isolate*.log | speedscope -" }, diff --git a/packages/do-not-wait-for-empty-event-loop/__tests__/fuzz.js b/packages/do-not-wait-for-empty-event-loop/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/do-not-wait-for-empty-event-loop/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/do-not-wait-for-empty-event-loop/package.json b/packages/do-not-wait-for-empty-event-loop/package.json index 8e99a1884..d465ae09f 100644 --- a/packages/do-not-wait-for-empty-event-loop/package.json +++ b/packages/do-not-wait-for-empty-event-loop/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/dynamodb/__tests__/fuzz.js b/packages/dynamodb/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/dynamodb/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/dynamodb/package.json b/packages/dynamodb/package.json index b03ea021b..aad7a36d8 100644 --- a/packages/dynamodb/package.json +++ b/packages/dynamodb/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/error-logger/__tests__/fuzz.js b/packages/error-logger/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/error-logger/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/error-logger/package.json b/packages/error-logger/package.json index 05df9c318..cd1c0da5a 100644 --- a/packages/error-logger/package.json +++ b/packages/error-logger/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/event-normalizer/__tests__/fuzz.js b/packages/event-normalizer/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/event-normalizer/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/event-normalizer/package.json b/packages/event-normalizer/package.json index 058b736ff..376fa1f8a 100644 --- a/packages/event-normalizer/package.json +++ b/packages/event-normalizer/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-content-encoding/__tests__/fuzz.js b/packages/http-content-encoding/__tests__/fuzz.js new file mode 100644 index 000000000..8da14ff28 --- /dev/null +++ b/packages/http-content-encoding/__tests__/fuzz.js @@ -0,0 +1,43 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000, + preferredEncoding: 'br' +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + body: fc.anything() + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-content-encoding/index.js b/packages/http-content-encoding/index.js index 900e59e89..6df241deb 100644 --- a/packages/http-content-encoding/index.js +++ b/packages/http-content-encoding/index.js @@ -45,8 +45,8 @@ const httpContentEncodingMiddleware = (opts) => { // Encoding not supported, already encoded, or doesn't need to' const eventCacheControl = - request.event.headers['cache-control'] ?? - request.event.headers['Cache-Control'] + request.event?.headers?.['cache-control'] ?? + request.event?.headers?.['Cache-Control'] if (eventCacheControl?.includes('no-transform')) { addHeaderPart(response, 'Cache-Control', 'no-transform') } @@ -57,6 +57,9 @@ const httpContentEncodingMiddleware = (opts) => { !preferredEncoding || !supportedContentEncodings.includes(preferredEncoding) || !response.body || + (typeof response.body !== 'string' && + !Buffer.isBuffer(response.body) && + !response.body?._readableState) || responseCacheControl?.includes('no-transform') ) { return diff --git a/packages/http-content-encoding/package.json b/packages/http-content-encoding/package.json index 128d60398..adf80c57f 100644 --- a/packages/http-content-encoding/package.json +++ b/packages/http-content-encoding/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-content-negotiation/__tests__/fuzz.js b/packages/http-content-negotiation/__tests__/fuzz.js new file mode 100644 index 000000000..370e4f113 --- /dev/null +++ b/packages/http-content-negotiation/__tests__/fuzz.js @@ -0,0 +1,49 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use( + middleware({ failOnMismatch: false }) +) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.record({ + 'Accept-Charset': fc.string(), + 'Accept-Encoding': fc.string(), + 'Accept-Language': fc.string(), + Accept: fc.string() + }) + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-content-negotiation/package.json b/packages/http-content-negotiation/package.json index 2634e3e0d..a934ef0be 100644 --- a/packages/http-content-negotiation/package.json +++ b/packages/http-content-negotiation/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-cors/__tests__/fuzz.js b/packages/http-cors/__tests__/fuzz.js new file mode 100644 index 000000000..626dd0bc1 --- /dev/null +++ b/packages/http-cors/__tests__/fuzz.js @@ -0,0 +1,42 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.object() + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-cors/__tests__/index.js b/packages/http-cors/__tests__/index.js index 895b4169e..9e75901a1 100644 --- a/packages/http-cors/__tests__/index.js +++ b/packages/http-cors/__tests__/index.js @@ -1,7 +1,7 @@ import { test } from 'node:test' import { equal, deepEqual, doesNotThrow } from 'node:assert/strict' import middy from '../../core/index.js' -import cors from '../index.js' +import httpCors from '../index.js' const context = { getRemainingTimeInMillis: () => 1000 @@ -10,7 +10,7 @@ const context = { test('Should return default headers when { }', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) - handler.use(cors({})) + handler.use(httpCors({})) const event = { httpMethod: 'OPTIONS', @@ -27,7 +27,7 @@ test('Should return default headers when { }', async (t) => { test('Should return default headers when { origin: "*" }', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) - handler.use(cors({ disableBeforePreflightResponse: false, origin: '*' })) + handler.use(httpCors({ disableBeforePreflightResponse: false, origin: '*' })) const event = { httpMethod: 'OPTIONS', @@ -51,7 +51,7 @@ test('It should add headers even onError', async (t) => { handler .use( - cors({ + httpCors({ disableBeforePreflightResponse: true, origin: 'https://example.com' }) @@ -83,7 +83,7 @@ test('It should run handler when { disableBeforePreflightResponse: true }', asyn return { statusCode: 200 } }) - handler.use(cors({ disableBeforePreflightResponse: true })) + handler.use(httpCors({ disableBeforePreflightResponse: true })) const event = { httpMethod: 'OPTIONS', @@ -106,7 +106,7 @@ test('It should respond during `before` when { disableBeforePreflightResponse: f return { statusCode: 200 } }) - handler.use(cors({ disableBeforePreflightResponse: false })) + handler.use(httpCors({ disableBeforePreflightResponse: false })) const event = { httpMethod: 'OPTIONS', @@ -126,7 +126,7 @@ test('It should respond during `before` when { disableBeforePreflightResponse: f test('It should exclude `Access-Control-Allow-Origin`', async (t) => { const handler = middy((event, context) => ({ statusCode: 204 })) - handler.use(cors({})) + handler.use(httpCors({})) const event = { httpMethod: 'OPTIONS', @@ -149,7 +149,7 @@ test('It should not override response Access-Control-Allow-Origin header when { // other middleware that puts the cors header handler.use( - cors({ + httpCors({ origin: 'https://default.com' }) ) @@ -172,7 +172,7 @@ test('It should not override response Access-Control-Allow-Origin header when { test('Access-Control-Allow-Origin header should be "*" when origin is "*"', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) - handler.use(cors({ disableBeforePreflightResponse: false, origin: '*' })) + handler.use(httpCors({ disableBeforePreflightResponse: false, origin: '*' })) const event = { httpMethod: 'OPTIONS', @@ -193,7 +193,7 @@ test('It should use origin specified in options', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origin: 'https://example.com' }) @@ -218,7 +218,7 @@ test('It should use Origin when matching origin specified in options', async (t) const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origin: 'https://example.com' }) @@ -245,7 +245,7 @@ test('It should return whitelisted origin (any)', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['*'] }) @@ -270,7 +270,7 @@ test('It should return whitelisted origin (static)', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://another-example.com'] }) @@ -292,11 +292,36 @@ test('It should return whitelisted origin (static)', async (t) => { }) }) +test('It should return whitelisted origin (static & localhost)', async (t) => { + const handler = middy((event, context) => ({ statusCode: 200 })) + + handler.use( + httpCors({ + origins: ['http://localhost:3000', 'https://example.com'] + }) + ) + + const event = { + httpMethod: 'OPTIONS', + headers: { Origin: 'http://localhost:3000' } + } + + const response = await handler(event, context) + + deepEqual(response, { + statusCode: 200, + headers: { + 'Access-Control-Allow-Origin': 'http://localhost:3000', + Vary: 'Origin' + } + }) +}) + test('It should return whitelisted origin (dynamic sub-domain)', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://*.example.com'] }) @@ -322,7 +347,7 @@ test('It should return whitelisted origin (dynamic sub-sub-domain)', async (t) = const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://*.*.example.com'] }) @@ -348,7 +373,7 @@ test('It should exclude `Access-Control-Allow-Origin` if no match in origins (st const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://another-example.com'] }) @@ -373,7 +398,7 @@ test('It should exclude `Access-Control-Allow-Origin` if no match in origins (dy const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://*.example.com'] }) @@ -398,7 +423,7 @@ test('It should exclude `Access-Control-Allow-Origin` if no match in origins (dy const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, origins: ['https://example.com', 'https://*.*.example.com'] }) @@ -428,7 +453,7 @@ test('It should not override already declared Access-Control-Allow-Headers heade request.response.headers['Access-Control-Allow-Headers'] = 'x-example' }) .use( - cors({ + httpCors({ disableBeforePreflightResponse: true, headers: 'x-example-2' }) @@ -453,7 +478,7 @@ test('It should use allowed headers specified in options', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, headers: 'x-example' }) @@ -483,7 +508,7 @@ test('It should not override already declared Access-Control-Allow-Credentials h request.response.headers['Access-Control-Allow-Credentials'] = 'false' }) .use( - cors({ + httpCors({ disableBeforePreflightResponse: true, credentials: true }) @@ -508,7 +533,7 @@ test('It should not override already declared Access-Control-Allow-Credentials h test('It should not override already declared Access-Control-Allow-Credentials header as true', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) .use( - cors({ + httpCors({ disableBeforePreflightResponse: true, credentials: false }) @@ -539,7 +564,7 @@ test('It should use change credentials as specified in options (true) w/ origin: const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, credentials: true, origin: '*' @@ -569,7 +594,7 @@ test('It should use change credentials as specified in options (true)', async (t const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, credentials: true, origins: ['*'] @@ -599,7 +624,7 @@ test('It should use change credentials as specified in options (true) with lower const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, credentials: true, origins: ['*'] @@ -629,7 +654,7 @@ test('it should set Access-Control-Allow-Methods header if present in config', a const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, methods: 'GET,PUT' }) @@ -656,7 +681,7 @@ test('it should not overwrite Access-Control-Allow-Methods header if already set })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: true, methods: 'GET,PUT' }) @@ -680,7 +705,7 @@ test('it should set Access-Control-Expose-Headers header if present in config', const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, exposeHeaders: 'X-Middleware' }) @@ -707,7 +732,7 @@ test('it should not overwrite Access-Control-Expose-Headers header if already se })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: true, exposeHeaders: 'X-Middleware' }) @@ -731,7 +756,7 @@ test('it should set Access-Control-Max-Age header if present in config', async ( const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, maxAge: '3600' }) @@ -758,7 +783,7 @@ test('it should not overwrite Access-Control-Max-Age header if already set', asy })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: true, maxAge: '3600' }) @@ -782,7 +807,7 @@ test('it should set Cache-Control header if present in config and http method OP const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, cacheControl: 'max-age=3600, s-maxage=3600, proxy-revalidate' }) @@ -807,7 +832,7 @@ for (const httpMethod of ['GET', 'POST', 'PUT', 'PATCH']) { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, cacheControl: 'max-age=3600, s-maxage=3600, proxy-revalidate' }) @@ -830,7 +855,7 @@ test('it should not overwrite Cache-Control header if already set', async (t) => })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: true, cacheControl: 'max-age=3600, s-maxage=3600, proxy-revalidate' }) @@ -857,7 +882,7 @@ test('it should not overwrite Vary header if already set', async (t) => { })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: true, vary: 'Access-Control-Allow-Methods' }) @@ -881,7 +906,7 @@ test('it should set Vary header if present in config', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, vary: 'Access-Control-Allow-Methods' }) @@ -906,7 +931,7 @@ test('It should use custom getOrigin', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, getOrigin: () => 'https://default.com', origin: '*' @@ -933,7 +958,7 @@ test('It should use pass incoming origin to custom getOrigin', async (t) => { const handler = middy((event, context) => ({ statusCode: 200 })) handler.use( - cors({ + httpCors({ disableBeforePreflightResponse: false, getOrigin: (incomingOrigin, options) => incomingOrigin, origin: '*' @@ -962,7 +987,7 @@ test('It should not swallow errors', async (t) => { throw new Error('handler') }) - handler.use(cors({ disableBeforePreflightResponse: true })) + handler.use(httpCors({ disableBeforePreflightResponse: true })) try { await handler() @@ -974,7 +999,7 @@ test('It should not swallow errors', async (t) => { test('it should not throw when not a http event', async (t) => { const handler = middy((event, context) => {}) - handler.use(cors()) + handler.use(httpCors()) const event = {} doesNotThrow(async () => await handler(event, context)) diff --git a/packages/http-cors/package.json b/packages/http-cors/package.json index df194de15..db5fe881f 100644 --- a/packages/http-cors/package.json +++ b/packages/http-cors/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-error-handler/__tests__/fuzz.js b/packages/http-error-handler/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/http-error-handler/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-error-handler/package.json b/packages/http-error-handler/package.json index 55336e8a4..0393d74c5 100644 --- a/packages/http-error-handler/package.json +++ b/packages/http-error-handler/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-event-normalizer/__tests__/fuzz.js b/packages/http-event-normalizer/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/http-event-normalizer/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-event-normalizer/package.json b/packages/http-event-normalizer/package.json index cdb3baef5..410d2eaa0 100644 --- a/packages/http-event-normalizer/package.json +++ b/packages/http-event-normalizer/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-header-normalizer/__tests__/fuzz.js b/packages/http-header-normalizer/__tests__/fuzz.js new file mode 100644 index 000000000..626dd0bc1 --- /dev/null +++ b/packages/http-header-normalizer/__tests__/fuzz.js @@ -0,0 +1,42 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.object() + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-header-normalizer/package.json b/packages/http-header-normalizer/package.json index 4cee446b2..af948d9a1 100644 --- a/packages/http-header-normalizer/package.json +++ b/packages/http-header-normalizer/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-json-body-parser/__tests__/fuzz.js b/packages/http-json-body-parser/__tests__/fuzz.js new file mode 100644 index 000000000..e2889e1c1 --- /dev/null +++ b/packages/http-json-body-parser/__tests__/fuzz.js @@ -0,0 +1,57 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-json-body-parser') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.record({ + 'content-type': fc.constant('application/json') + }), + body: fc.string() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-json-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-json-body-parser/__tests__/index.js b/packages/http-json-body-parser/__tests__/index.js index dd70df0c7..b0032766f 100644 --- a/packages/http-json-body-parser/__tests__/index.js +++ b/packages/http-json-body-parser/__tests__/index.js @@ -109,7 +109,7 @@ test('It should handle invalid JSON as an UnprocessableEntity', async (t) => { } catch (e) { equal(e.statusCode, 415) equal(e.message, 'Invalid or malformed JSON was provided') - match(e.cause.data.message, /^Unexpected token/) + match(e.cause.message, /^Unexpected token/) } }) @@ -133,10 +133,7 @@ test('It should handle undefined as an UnprocessableEntity', async (t) => { } catch (e) { equal(e.statusCode, 415) equal(e.message, 'Invalid or malformed JSON was provided') - match( - e.cause.data.message, - /(^Unexpected token)|"undefined" is not valid JSON/ - ) + equal(e.cause.data, undefined) } }) @@ -225,6 +222,6 @@ test('It should handle invalid base64 JSON as an UnprocessableEntity', async (t) await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed JSON was provided') - match(e.cause.data.message, /^Unexpected token/) + match(e.cause.message, /^Unexpected token/) } }) diff --git a/packages/http-json-body-parser/index.js b/packages/http-json-body-parser/index.js index d013712db..da991d6a3 100644 --- a/packages/http-json-body-parser/index.js +++ b/packages/http-json-body-parser/index.js @@ -11,8 +11,13 @@ const httpJsonBodyParserMiddleware = (opts = {}) => { const options = { ...defaults, ...opts } const httpJsonBodyParserMiddlewareBefore = async (request) => { const { headers, body } = request.event + if (typeof body === 'undefined') { + throw createError(415, 'Invalid or malformed JSON was provided', { + cause: { package: '@middy/http-json-body-parser', data: body } + }) + } - const contentType = headers?.['Content-Type'] ?? headers?.['content-type'] + const contentType = headers?.['content-type'] ?? headers?.['Content-Type'] if (!mimePattern.test(contentType)) { if (options.disableContentTypeError) { @@ -32,7 +37,11 @@ const httpJsonBodyParserMiddleware = (opts = {}) => { } catch (err) { // UnprocessableEntity throw createError(415, 'Invalid or malformed JSON was provided', { - cause: { package: '@middy/http-json-body-parser', data: err } + cause: { + package: '@middy/http-json-body-parser', + data: body, + message: err.message + } }) } } diff --git a/packages/http-json-body-parser/package.json b/packages/http-json-body-parser/package.json index 6db3d2f66..d9e6f1136 100644 --- a/packages/http-json-body-parser/package.json +++ b/packages/http-json-body-parser/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-multipart-body-parser/__tests__/fuzz.js b/packages/http-multipart-body-parser/__tests__/fuzz.js new file mode 100644 index 000000000..bfe495c00 --- /dev/null +++ b/packages/http-multipart-body-parser/__tests__/fuzz.js @@ -0,0 +1,57 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-multipart-body-parser') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.record({ + 'content-type': fc.constant('multipart/form-data; boundary=') + }), + body: fc.string() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-multipart-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-multipart-body-parser/__tests__/index.js b/packages/http-multipart-body-parser/__tests__/index.js index 05adc858d..cea162040 100644 --- a/packages/http-multipart-body-parser/__tests__/index.js +++ b/packages/http-multipart-body-parser/__tests__/index.js @@ -94,14 +94,7 @@ test('It should handle invalid form data (undefined) as an UnprocessableEntity', await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed multipart/form-data was provided') - ok( - [ - // Node 18 - 'The "chunk" argument must be of type string or an instance of Buffer or Uint8Array. Received undefined', - // Node 20 - 'The "chunk" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined' - ].includes(e.cause.data.message) - ) + equal(e.cause.data, undefined) } }) @@ -126,7 +119,7 @@ test('It should handle invalid form data (null) as an UnprocessableEntity', asyn await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed multipart/form-data was provided') - equal(e.cause.data.message, 'May not write null values to stream') + equal(e.cause.message, 'May not write null values to stream') } }) @@ -151,7 +144,7 @@ test('It should handle more invalid form data as an UnprocessableEntity', async await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed multipart/form-data was provided') - equal(e.cause.data.message, 'Unexpected end of multipart data') + equal(e.cause.message, 'Unexpected end of multipart data') } }) diff --git a/packages/http-multipart-body-parser/index.js b/packages/http-multipart-body-parser/index.js index 699cc21dc..ab6d245c6 100644 --- a/packages/http-multipart-body-parser/index.js +++ b/packages/http-multipart-body-parser/index.js @@ -1,7 +1,7 @@ import BusBoy from '@fastify/busboy' import { createError } from '@middy/util' -const mimePattern = /^multipart\/form-data(;.*)?$/ +const mimePattern = /^multipart\/form-data; boundary=[-]*[a-zA-Z0-9]*$/ const fieldnamePattern = /(.+)\[(.*)]$/ const defaults = { @@ -15,16 +15,26 @@ const httpMultipartBodyParserMiddleware = (opts = {}) => { const options = { ...defaults, ...opts } const httpMultipartBodyParserMiddlewareBefore = async (request) => { - const { headers } = request.event + const { headers, body } = request.event + if (typeof body === 'undefined') { + throw createError( + 415, + 'Invalid or malformed multipart/form-data was provided', + { cause: { package: '@middy/http-multipart-body-parser', data: body } } + ) + } - const contentType = headers?.['Content-Type'] ?? headers?.['content-type'] + const contentType = headers?.['content-type'] ?? headers?.['Content-Type'] if (!mimePattern.test(contentType)) { if (options.disableContentTypeError) { return } throw createError(415, 'Unsupported Media Type', { - cause: { package: '@middy/multipart-body-parser', data: contentType } + cause: { + package: '@middy/http-multipart-body-parser', + data: contentType + } }) } @@ -38,7 +48,13 @@ const httpMultipartBodyParserMiddleware = (opts = {}) => { throw createError( 415, 'Invalid or malformed multipart/form-data was provided', - { cause: { package: '@middy/multipart-body-parser', data: err } } + { + cause: { + package: '@middy/http-multipart-body-parser', + data: body, + message: err.message + } + } ) }) } @@ -56,7 +72,7 @@ const parseMultipartData = (event, options) => { ...options.busboy, headers: { 'content-type': - event.headers?.['Content-Type'] ?? event.headers?.['content-type'] + event.headers?.['content-type'] ?? event.headers?.['Content-Type'] } }) diff --git a/packages/http-multipart-body-parser/package.json b/packages/http-multipart-body-parser/package.json index f910928df..253d61ded 100644 --- a/packages/http-multipart-body-parser/package.json +++ b/packages/http-multipart-body-parser/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-partial-response/__tests__/fuzz.js b/packages/http-partial-response/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/http-partial-response/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-partial-response/package.json b/packages/http-partial-response/package.json index dbd7ba14c..257030efc 100644 --- a/packages/http-partial-response/package.json +++ b/packages/http-partial-response/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-response-serializer/__tests__/fuzz.js b/packages/http-response-serializer/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/http-response-serializer/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-response-serializer/package.json b/packages/http-response-serializer/package.json index d5e8a38ef..37cc70051 100644 --- a/packages/http-response-serializer/package.json +++ b/packages/http-response-serializer/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-router/__tests__/fuzz.js b/packages/http-router/__tests__/fuzz.js new file mode 100644 index 000000000..1bbdbaf96 --- /dev/null +++ b/packages/http-router/__tests__/fuzz.js @@ -0,0 +1,148 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import router from '../index.js' + +const handler = middy(router()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-router') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: '1.0'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + httpMethod: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + path: fc.webPath() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-router') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [ + [{ httpMethod: 'valueOf', path: '/' }], + [{ httpMethod: 'GET', path: 'valueOf' }] + ] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: '2.0'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + version: fc.constant('2.0'), + requestContext: fc.record({ + http: fc.record({ + method: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + path: fc.webPath() + }) + }) + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-router') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [ + [{ requestContext: { http: { method: 'valueOf', path: '/' } } }], + [{ requestContext: { http: { method: 'GET', path: 'valueOf' } } }] + ] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: 'vpc'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + method: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + raw_path: fc.webPath() // TODO webUrl({ withDomain:false, withPath: true, withQueryParameters:true}) + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-router') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [ + [{ method: 'valueOf', raw_path: '?/' }], + [{ method: 'GET', raw_path: '?valueOf' }] + ] + } + ) +}) diff --git a/packages/http-router/index.js b/packages/http-router/index.js index f9a47e3cd..aa9dd8928 100644 --- a/packages/http-router/index.js +++ b/packages/http-router/index.js @@ -24,7 +24,7 @@ const httpRouteHandler = (opts = {}) => { // Prevents `routesType[method][path] = handler` from flagging: This assignment may alter Object.prototype if a malicious '__proto__' string is injected from library input. if (!enumMethods.includes(method)) { throw new Error('Method not allowed', { - cause: { package: '@middy/http-router' } + cause: { package: '@middy/http-router', data: method } }) } @@ -45,27 +45,38 @@ const httpRouteHandler = (opts = {}) => { return (event, context, abort) => { const { method, path } = getVersionRoute[pickVersion(event)]?.(event) + if (!method) { throw new Error('Unknown http event format', { - cause: { package: '@middy/http-router', data: event } + cause: { package: '@middy/http-router', data: method } + }) + } + if (!path) { + throw new Error('Unknown http event format', { + cause: { package: '@middy/http-router', data: path } }) } // Static - const handler = routesStatic[method]?.[path] - if (typeof handler !== 'undefined') { + if ( + Object.hasOwnProperty.call(routesStatic, method) && + Object.hasOwnProperty.call(routesStatic[method], path) + ) { + const handler = routesStatic[method][path] return handler(event, context, abort) } // Dynamic - for (const route of routesDynamic[method] ?? []) { - const match = path.match(route.path) - if (match) { - event.pathParameters = { - ...match.groups, - ...event.pathParameters + if (Object.hasOwnProperty.call(routesDynamic, method)) { + for (const route of routesDynamic[method] ?? []) { + const match = path.match(route.path) + if (match) { + event.pathParameters = { + ...match.groups, + ...event.pathParameters + } + return route.handler(event, context, abort) } - return route.handler(event, context, abort) } } diff --git a/packages/http-router/package.json b/packages/http-router/package.json index a25187ed3..57bf28b97 100644 --- a/packages/http-router/package.json +++ b/packages/http-router/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-security-headers/__tests__/fuzz.js b/packages/http-security-headers/__tests__/fuzz.js new file mode 100644 index 000000000..9cd8f54c4 --- /dev/null +++ b/packages/http-security-headers/__tests__/fuzz.js @@ -0,0 +1,133 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: '1.0'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + httpMethod: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + path: fc.webPath() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-multipart-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: '2.0'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + version: fc.constant('2.0'), + requestContext: fc.record({ + http: fc.record({ + method: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + path: fc.webPath() + }) + }) + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-multipart-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test("fuzz `event` w/ `record` ({version: 'vpc'})", async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + method: fc.constantFrom( + 'HEAD', + 'OPTIONS', + 'GET', + 'POST', + 'PATCH', + 'DELETE', + 'TRACE', + 'CONNECT' + ), + raw_path: fc.webPath() // TODO webUrl({ withDomain:false, withPath: true, withQueryParameters:true}) + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-multipart-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-security-headers/package.json b/packages/http-security-headers/package.json index 6f7314854..b2c8662c2 100644 --- a/packages/http-security-headers/package.json +++ b/packages/http-security-headers/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-urlencode-body-parser/__tests__/fuzz.js b/packages/http-urlencode-body-parser/__tests__/fuzz.js new file mode 100644 index 000000000..c6fd1ed12 --- /dev/null +++ b/packages/http-urlencode-body-parser/__tests__/fuzz.js @@ -0,0 +1,57 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-urlencode-body-parser') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + headers: fc.record({ + 'content-type': fc.constant('application/x-www-form-urlencoded') + }), + body: fc.string() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/http-urlencode-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-urlencode-body-parser/index.js b/packages/http-urlencode-body-parser/index.js index 5c8fe838f..7c5eb4720 100644 --- a/packages/http-urlencode-body-parser/index.js +++ b/packages/http-urlencode-body-parser/index.js @@ -11,7 +11,7 @@ const httpUrlencodeBodyParserMiddleware = (opts = {}) => { const httpUrlencodeBodyParserMiddlewareBefore = async (request) => { const { headers, body } = request.event - const contentType = headers?.['Content-Type'] ?? headers?.['content-type'] + const contentType = headers?.['content-type'] ?? headers?.['Content-Type'] if (!mimePattern.test(contentType)) { if (options.disableContentTypeError) { @@ -37,7 +37,7 @@ const httpUrlencodeBodyParserMiddleware = (opts = {}) => { throw createError( 415, 'Invalid or malformed URL encoded form was provided', - { cause: { package: '@middy/http-urlencode-body-parser' } } + { cause: { package: '@middy/http-urlencode-body-parser', data: body } } ) } } diff --git a/packages/http-urlencode-body-parser/package.json b/packages/http-urlencode-body-parser/package.json index bb775288e..9cf7abed7 100644 --- a/packages/http-urlencode-body-parser/package.json +++ b/packages/http-urlencode-body-parser/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/http-urlencode-path-parser/__tests__/fuzz.js b/packages/http-urlencode-path-parser/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/http-urlencode-path-parser/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/http-urlencode-path-parser/package.json b/packages/http-urlencode-path-parser/package.json index ecf28385b..02068ba66 100644 --- a/packages/http-urlencode-path-parser/package.json +++ b/packages/http-urlencode-path-parser/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/input-output-logger/__tests__/fuzz.js b/packages/input-output-logger/__tests__/fuzz.js new file mode 100644 index 000000000..83dcce95a --- /dev/null +++ b/packages/input-output-logger/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware({ logger: () => {} })) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/input-output-logger/package.json b/packages/input-output-logger/package.json index 292daf94c..4e9a2c664 100644 --- a/packages/input-output-logger/package.json +++ b/packages/input-output-logger/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/rds-signer/__tests__/fuzz.js b/packages/rds-signer/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/rds-signer/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/rds-signer/package.json b/packages/rds-signer/package.json index 49ee24df1..6d15d7b1e 100644 --- a/packages/rds-signer/package.json +++ b/packages/rds-signer/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/s3-object-response/__tests__/fuzz.js b/packages/s3-object-response/__tests__/fuzz.js new file mode 100644 index 000000000..f4ad6820c --- /dev/null +++ b/packages/s3-object-response/__tests__/fuzz.js @@ -0,0 +1,69 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +import { mockClient } from 'aws-sdk-client-mock' +import { S3Client, WriteGetObjectResponseCommand } from '@aws-sdk/client-s3' + +mockClient(S3Client) + .on(WriteGetObjectResponseCommand) + .resolves({ statusCode: 200 }) +global.fetch = (url, request) => { + return Promise.resolve( + new Response('', { + status: 200, + statusText: 'OK', + headers: new Headers({ + 'Content-Type': 'application/json; charset=UTF-8' + }) + }) + ) +} + +const handler = middy((event) => event).use( + middleware({ + AwsClient: S3Client + }) +) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + getObjectContext: fc.record({ + inputS3Url: fc.webUrl(), + outputRoute: fc.webUrl(), + outputToken: fc.string() + }), + Body: fc.string() + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/s3-object-response/index.js b/packages/s3-object-response/index.js index 03900aaa2..da28ca374 100644 --- a/packages/s3-object-response/index.js +++ b/packages/s3-object-response/index.js @@ -24,9 +24,9 @@ const s3ObjectResponseMiddleware = (opts = {}) => { } const s3ObjectResponseMiddlewareBefore = async (request) => { - const { inputS3Url } = request.event.getObjectContext + const { inputS3Url } = request.event.getObjectContext ?? {} - request.context.s3ObjectFetch = fetch(inputS3Url) + request.context.s3ObjectFetch = inputS3Url ? fetch(inputS3Url) : undefined } const s3ObjectResponseMiddlewareAfter = async (request) => { @@ -35,8 +35,8 @@ const s3ObjectResponseMiddleware = (opts = {}) => { } const command = new WriteGetObjectResponseCommand({ - RequestRoute: request.event.getObjectContext.outputRoute, - RequestToken: request.event.getObjectContext.outputToken, + RequestRoute: request.event.getObjectContext?.outputRoute, + RequestToken: request.event.getObjectContext?.outputToken, Body: request.response.Body ?? request.response.body }) await client.send(command) // Doesn't return a promise? diff --git a/packages/s3-object-response/package.json b/packages/s3-object-response/package.json index 9f4b94d0f..b6eb82150 100644 --- a/packages/s3-object-response/package.json +++ b/packages/s3-object-response/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/s3/__tests__/fuzz.js b/packages/s3/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/s3/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/s3/package.json b/packages/s3/package.json index 5a43da0cf..a7b2420c0 100644 --- a/packages/s3/package.json +++ b/packages/s3/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/secrets-manager/__tests__/fuzz.js b/packages/secrets-manager/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/secrets-manager/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/secrets-manager/package.json b/packages/secrets-manager/package.json index d8524b9ef..647b9ba22 100644 --- a/packages/secrets-manager/package.json +++ b/packages/secrets-manager/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/service-discovery/__tests__/fuzz.js b/packages/service-discovery/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/service-discovery/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/service-discovery/package.json b/packages/service-discovery/package.json index 67a40bf43..5b444b67a 100644 --- a/packages/service-discovery/package.json +++ b/packages/service-discovery/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/sqs-partial-batch-failure/__tests__/fuzz.js b/packages/sqs-partial-batch-failure/__tests__/fuzz.js new file mode 100644 index 000000000..5a277ee76 --- /dev/null +++ b/packages/sqs-partial-batch-failure/__tests__/fuzz.js @@ -0,0 +1,48 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware({ logger: false })) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + Records: fc.array(fc.object()), + response: fc.array( + fc.record({ + status: fc.constantFrom('pending', 'fulfilled', 'rejected'), + reason: fc.string() + }) + ) + }), + async (event) => { + await handler(event, context) + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/sqs-partial-batch-failure/index.js b/packages/sqs-partial-batch-failure/index.js index dcb250d56..3d827479f 100644 --- a/packages/sqs-partial-batch-failure/index.js +++ b/packages/sqs-partial-batch-failure/index.js @@ -14,12 +14,14 @@ const sqsPartialBatchFailureMiddleware = (opts = {}) => { // https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html // Required: include the value `ReportBatchItemFailures` in the `FunctionResponseTypes` list const batchItemFailures = [] - for (const [idx, record] of Object.entries(Records)) { - const { status, reason } = response[idx] - if (status === 'fulfilled') continue - batchItemFailures.push({ itemIdentifier: record.messageId }) - if (typeof logger === 'function') { - logger(reason, record) + if (Array.isArray(Records)) { + for (const [idx, record] of Object.entries(Records)) { + const { status, reason } = response[idx] + if (status === 'fulfilled') continue + batchItemFailures.push({ itemIdentifier: record.messageId }) + if (typeof logger === 'function') { + logger(reason, record) + } } } @@ -30,10 +32,13 @@ const sqsPartialBatchFailureMiddleware = (opts = {}) => { if (request.response !== undefined) return // Force all to be sent to DLQ - const recordPromises = request.event.Records.map(async (record, index) => { - throw request.error + // const recordPromises = request.event.Records.map(async (record, index) => { + // throw request.error + // }) + request.response = new Array(request.event.Records?.length).fill({ + status: 'rejected', + reason: request.error }) - request.response = await Promise.allSettled(recordPromises) await sqsPartialBatchFailureMiddlewareAfter(request) } diff --git a/packages/sqs-partial-batch-failure/package.json b/packages/sqs-partial-batch-failure/package.json index 9c24976ce..0c9e33bd8 100644 --- a/packages/sqs-partial-batch-failure/package.json +++ b/packages/sqs-partial-batch-failure/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/ssm/__tests__/fuzz.js b/packages/ssm/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/ssm/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/ssm/package.json b/packages/ssm/package.json index e79e0d444..7c5f3ea53 100644 --- a/packages/ssm/package.json +++ b/packages/ssm/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/sts/__tests__/fuzz.js b/packages/sts/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/sts/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/sts/package.json b/packages/sts/package.json index f8c638599..933dcd7df 100644 --- a/packages/sts/package.json +++ b/packages/sts/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/util/package.json b/packages/util/package.json index e983002da..0a9556099 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -29,8 +29,9 @@ "type-utils.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/validator/__tests__/fuzz.js b/packages/validator/__tests__/fuzz.js new file mode 100644 index 000000000..96bece3c5 --- /dev/null +++ b/packages/validator/__tests__/fuzz.js @@ -0,0 +1,35 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' +import { transpileSchema } from '../transpile.js' + +const eventSchema = transpileSchema({ + type: 'object', + properties: {}, + maxProperties: 1 +}) +const handler = middy((event) => event).use(middleware({ eventSchema })) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/validator') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/validator/package.json b/packages/validator/package.json index 49a7acde7..e93cddb4f 100644 --- a/packages/validator/package.json +++ b/packages/validator/package.json @@ -39,8 +39,9 @@ "transpile.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/warmup/__tests__/fuzz.js b/packages/warmup/__tests__/fuzz.js new file mode 100644 index 000000000..b39db8e3c --- /dev/null +++ b/packages/warmup/__tests__/fuzz.js @@ -0,0 +1,23 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +const handler = middy((event) => event).use(middleware()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/warmup/package.json b/packages/warmup/package.json index be11aaac6..dd6b892af 100644 --- a/packages/warmup/package.json +++ b/packages/warmup/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/ws-json-body-parser/__tests__/fuzz.js b/packages/ws-json-body-parser/__tests__/fuzz.js new file mode 100644 index 000000000..5eb5ccd19 --- /dev/null +++ b/packages/ws-json-body-parser/__tests__/fuzz.js @@ -0,0 +1,54 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import jsonBodyParser from '../index.js' + +const handler = middy((event) => event).use(jsonBodyParser()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/ws-json-body-parser') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + body: fc.string() + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/ws-json-body-parser') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/ws-json-body-parser/__tests__/index.js b/packages/ws-json-body-parser/__tests__/index.js index 63fb78b0c..d53c7f945 100644 --- a/packages/ws-json-body-parser/__tests__/index.js +++ b/packages/ws-json-body-parser/__tests__/index.js @@ -59,7 +59,7 @@ test('It should handle invalid JSON as an UnprocessableEntity', async (t) => { await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed JSON was provided') - match(e.cause.data.message, /^Unexpected token/) + match(e.cause.message, /^Unexpected token/) } }) @@ -102,6 +102,6 @@ test('It should handle invalid base64 JSON as an UnprocessableEntity', async (t) await handler(event, defaultContext) } catch (e) { equal(e.message, 'Invalid or malformed JSON was provided') - match(e.cause.data.message, /^Unexpected token/) + match(e.cause.message, /^Unexpected token/) } }) diff --git a/packages/ws-json-body-parser/index.js b/packages/ws-json-body-parser/index.js index 993af2ba0..54bd6e9e5 100644 --- a/packages/ws-json-body-parser/index.js +++ b/packages/ws-json-body-parser/index.js @@ -8,6 +8,11 @@ const wsJsonBodyParserMiddleware = (opts = {}) => { const options = { ...defaults, ...opts } const wsJsonBodyParserMiddlewareBefore = async (request) => { const { body } = request.event + if (typeof body === 'undefined') { + throw createError(422, 'Invalid or malformed JSON was provided', { + cause: { package: '@middy/ws-json-body-parser', data: body } + }) + } try { const data = request.event.isBase64Encoded @@ -18,7 +23,11 @@ const wsJsonBodyParserMiddleware = (opts = {}) => { } catch (err) { // UnprocessableEntity throw createError(422, 'Invalid or malformed JSON was provided', { - cause: { package: '@middy/ws-json-body-parser', data: err } + cause: { + package: '@middy/ws-json-body-parser', + data: body, + message: err.message + } }) } } diff --git a/packages/ws-json-body-parser/package.json b/packages/ws-json-body-parser/package.json index 4914726ad..440479af8 100644 --- a/packages/ws-json-body-parser/package.json +++ b/packages/ws-json-body-parser/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/ws-response/__tests__/fuzz.js b/packages/ws-response/__tests__/fuzz.js new file mode 100644 index 000000000..de388851f --- /dev/null +++ b/packages/ws-response/__tests__/fuzz.js @@ -0,0 +1,36 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import middleware from '../index.js' + +import { mockClient } from 'aws-sdk-client-mock' +import { + ApiGatewayManagementApiClient, + PostToConnectionCommand +} from '@aws-sdk/client-apigatewaymanagementapi' +mockClient(ApiGatewayManagementApiClient) + .on(PostToConnectionCommand) + .resolves({ statusCode: 200 }) + +const handler = middy((event) => event).use( + middleware({ + AwsClient: ApiGatewayManagementApiClient + }) +) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + await handler(event, context) + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) diff --git a/packages/ws-response/package.json b/packages/ws-response/package.json index 185efbf7e..d830a9781 100644 --- a/packages/ws-response/package.json +++ b/packages/ws-response/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/packages/ws-router/__tests__/fuzz.js b/packages/ws-router/__tests__/fuzz.js new file mode 100644 index 000000000..884cebf0c --- /dev/null +++ b/packages/ws-router/__tests__/fuzz.js @@ -0,0 +1,55 @@ +import { test } from 'node:test' +import fc from 'fast-check' +import middy from '../../core/index.js' +import router from '../index.js' + +const handler = middy(router()) +const context = { + getRemainingTimeInMillis: () => 1000 +} + +test('fuzz `event` w/ `object`', async () => { + fc.assert( + fc.asyncProperty(fc.object(), async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/ws-router') { + throw e + } + } + }), + { + numRuns: 100_000, + verbose: 2, + + examples: [] + } + ) +}) + +test('fuzz `event` w/ `record`', async () => { + fc.assert( + fc.asyncProperty( + fc.record({ + requestContext: fc.record({ + routeKey: fc.string() + }) + }), + async (event) => { + try { + await handler(event, context) + } catch (e) { + if (e.cause?.package !== '@middy/ws-router') { + throw e + } + } + } + ), + { + numRuns: 100_000, + verbose: 2, + examples: [[{ requestContext: { routeKey: 'valueOf' } }]] + } + ) +}) diff --git a/packages/ws-router/index.js b/packages/ws-router/index.js index a04a9f499..05796bb06 100644 --- a/packages/ws-router/index.js +++ b/packages/ws-router/index.js @@ -25,14 +25,14 @@ const wsRouteHandler = (opts = {}) => { return (event, context, abort) => { const { routeKey } = event.requestContext ?? {} if (!routeKey) { - throw new Error('Unknown WebSocket event format', { - cause: { package: '@middy/ws-router' } + throw createError(400, 'Unknown WebSocket event format', { + cause: { package: '@middy/ws-router', data: routeKey } }) } - // Static - const handler = routesStatic[routeKey] - if (typeof handler !== 'undefined') { + if (Object.hasOwnProperty.call(routesStatic, routeKey)) { + // Static + const handler = routesStatic[routeKey] return handler(event, context, abort) } diff --git a/packages/ws-router/package.json b/packages/ws-router/package.json index 1471a0d4b..4e4768361 100644 --- a/packages/ws-router/package.json +++ b/packages/ws-router/package.json @@ -28,8 +28,9 @@ "index.d.ts" ], "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/plugin/package.json b/plugin/package.json index e580e4bf6..412b6cac6 100644 --- a/plugin/package.json +++ b/plugin/package.json @@ -11,8 +11,9 @@ "access": "public" }, "scripts": { - "test": "npm run test:unit", + "test": "npm run test:unit && npm run test:fuzz", "test:unit": "node --test __tests__/index.js", + "test:fuzz": "node --test __tests__/fuzz.js", "test:benchmark": "node __benchmarks__/index.js" }, "license": "MIT", diff --git a/website/docs/integrations/lambda-powertools.md b/website/docs/integrations/lambda-powertools.md index fb31f5a56..11ee2e115 100644 --- a/website/docs/integrations/lambda-powertools.md +++ b/website/docs/integrations/lambda-powertools.md @@ -332,7 +332,7 @@ const cacheMiddleware = (options) => { const cacheMiddlewareBefore = async (request) => { cacheKey = options.calculateCacheId(request.event) - if (options.storage.hasOwnProperty(cacheKey)) { + if (Object.hasOwnProperty.call(options.storage, cacheKey)) { // clean up the Powertools utilities before returning cleanupMiddlewares() diff --git a/website/docs/intro/04-early-interrupt.md b/website/docs/intro/04-early-interrupt.md index 6ef149c84..e7bf6bc16 100644 --- a/website/docs/intro/04-early-interrupt.md +++ b/website/docs/intro/04-early-interrupt.md @@ -24,7 +24,7 @@ const cacheMiddleware = (options) => { const cacheMiddlewareBefore = async (request) => { cacheKey = options.calculateCacheId(request.event) - if (options.storage.hasOwnProperty(cacheKey)) { + if (Object.hasOwnProperty.call(options.storage, cacheKey)) { // if the value can be `undefined` use this line request.earlyResponse = options.storage[cacheKey]