From 620fcde34b3514f0023eaf51bba6355a68ac9885 Mon Sep 17 00:00:00 2001 From: harshithad0703 <104908717+harshithad0703@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:07:25 +0530 Subject: [PATCH 01/23] Update .talismanrc --- .talismanrc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.talismanrc b/.talismanrc index db1a52cdb3..d41b93b2a0 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,38 @@ fileignoreconfig: - filename: package-lock.json checksum: 72a462b8cacd9977871d7e5c6c15ba8be8c217930955667cb543ad93a41c1989 +- filename: pnpm-lock.yaml + checksum: 0ca85066946c49994a4353c9f64b8f380d5d2050194e3e57ad7ccd7faa030d36 +- filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts + checksum: 0582d62b88834554cf12951c8690a73ef3ddbb78b82d2804d994cf4148e1ef93 +- filename: packages/contentstack-import-setup/test/config.json + checksum: 187fd202d00e7d2c3d8b00f983ff21d8535e0fdb76cebec3f39c400258c88d05 +- filename: packages/contentstack-command/test/config.json + checksum: 7c15663b3a6562b99d3082ead5035932b0276e4fd53774b3f838372a19b291ef +- filename: packages/contentstack-import-setup/test/unit/modules/content-types.test.ts + checksum: ce8772281171927e7dee7d6a761a029c902393b808e2696624fdcf0f5b80ea5c +- filename: packages/contentstack-import-setup/test/unit/modules/entries.test.ts + checksum: 17652bfc125879bb37facf8ea9f54dc4f97627ca625ec148c9d551a20196d85b +- filename: packages/contentstack-import-setup/test/unit/modules/extensions.test.ts + checksum: eaafdf39fc8a947aa490232bfc7da950c882bd69b5b27a0362ef2bee21f6a177 +- filename: packages/contentstack-import-setup/test/unit/modules/global-fields.test.ts + checksum: fd49cfab6d374254c0c6eb4c7e7ee8ff4fe6c2b46e7b0d7f7437cbe665d1ce8b +- filename: packages/contentstack-import-setup/test/unit/modules/marketplace-apps.test.ts + checksum: c35dfe96d685fb12427de4b77c9240b34b9bee5e158ad7489acaa0d061ad562e +- filename: packages/contentstack-import-setup/test/unit/modules/taxonomies.test.ts + checksum: 3868ff9e8833a670350590f070c6f635807f2a1f534accba677af4709fab0e4a +- filename: packages/contentstack-import-setup/test/unit/import-config-handler.test.ts + checksum: f2f2c994543c388f2eecaf8128f789eab2895f1f78d659e58ef9491972c6f9a8 +- filename: packages/contentstack-import-setup/test/unit/common-helper.test.ts + checksum: a0c98c6f0ee88a398e3f1bd80cac0a6cc0ede7eee01957cf7d6e1f199f3da643 +- filename: packages/contentstack-import-setup/test/unit/modules/base-setup.test.ts + checksum: 862c52e2bbd1975b963f45ce3e89c243d047858cdbe7339918395ce2fc52bf89 +- filename: packages/contentstack-import-setup/test/unit/import-setup.test.ts + checksum: 1eee4f461fa5b115894d1806a14af6f45336cbe6c0392f16078bd2877fadff67 +- filename: packages/contentstack-import-setup/test/unit/login-handler.test.ts + checksum: e549f9ca3a9aae0d93b7284f7e771d55c0610725ddcb4333612df2f215e92769 +- filename: packages/contentstack/README.md + checksum: c09f6dc93702caff3adf689b501ec32586a16c865c1fe3a63b53ae645ca22349 +- filename: packages/contentstack-import-setup/test/unit/modules/assets.test.ts + checksum: 449a5e3383631a6f78d1291aa3c28c91681879289398f0a933158fba5c5d5acf version: "1.0" From bc195baf8307595d828025c66b323db14e9a76c2 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 11:29:12 +0530 Subject: [PATCH 02/23] update package-lock --- package-lock.json | 460 ++++++++++++++++++++++++++-------------------- 1 file changed, 265 insertions(+), 195 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe6719be0b..70393b28c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -294,25 +294,25 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.863.0.tgz", - "integrity": "sha512-04ME3EqDtWvV2nKl9qlk2TqjDwJL3sI2ey33sIJCL3d2z3cFIQOOdy9QleCPmYPMqPpENRC0qdKprR0yt2t7fg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.864.0.tgz", + "integrity": "sha512-DpUrEonVs7I7J+tXjvllVNCg7e9mnQwg8eMWqc7S7/c82SUC+U2Xqe6M5Ey5pWkCghy0GDgnn+iUA43W7H0WKg==", "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.863.0", - "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@aws-sdk/xml-builder": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", @@ -348,33 +348,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.863.0.tgz", - "integrity": "sha512-12iPziQtTolNiWFlN7Bg4jDfh1eOVB0hW6bsP1cI3JVr/IF0pVvPjQ1WEUhjTlOujC/U+JaYjw3iQ7nWKHX6vQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.864.0.tgz", + "integrity": "sha512-QGYi9bWliewxumsvbJLLyx9WC0a4DP4F+utygBcq0zwPxaM0xDfBspQvP1dsepi7mW5aAjZmJ2+Xb7X0EhzJ/g==", "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/core": "3.863.0", - "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", "@aws-sdk/middleware-bucket-endpoint": "3.862.0", "@aws-sdk/middleware-expect-continue": "3.862.0", - "@aws-sdk/middleware-flexible-checksums": "3.863.0", + "@aws-sdk/middleware-flexible-checksums": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-location-constraint": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/middleware-ssec": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", - "@aws-sdk/signature-v4-multi-region": "3.863.0", + "@aws-sdk/signature-v4-multi-region": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@aws-sdk/xml-builder": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", @@ -418,24 +418,24 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.863.0.tgz", - "integrity": "sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.864.0.tgz", + "integrity": "sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -468,9 +468,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.863.0.tgz", - "integrity": "sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.864.0.tgz", + "integrity": "sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -495,13 +495,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.863.0.tgz", - "integrity": "sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.864.0.tgz", + "integrity": "sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -512,13 +512,13 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.863.0.tgz", - "integrity": "sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.864.0.tgz", + "integrity": "sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/node-http-handler": "^4.1.1", @@ -534,19 +534,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.863.0.tgz", - "integrity": "sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.864.0.tgz", + "integrity": "sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -559,18 +559,18 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.863.0.tgz", - "integrity": "sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.864.0.tgz", + "integrity": "sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-ini": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-ini": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -583,13 +583,13 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.863.0.tgz", - "integrity": "sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.864.0.tgz", + "integrity": "sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -601,15 +601,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.863.0.tgz", - "integrity": "sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.864.0.tgz", + "integrity": "sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.863.0", - "@aws-sdk/core": "3.863.0", - "@aws-sdk/token-providers": "3.863.0", + "@aws-sdk/client-sso": "3.864.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/token-providers": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -621,14 +621,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.863.0.tgz", - "integrity": "sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.864.0.tgz", + "integrity": "sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -674,16 +674,16 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.863.0.tgz", - "integrity": "sha512-nZW9Rf4floAuxmPeik1FJ7/LwEnmWjdgoa0ls/x/KpAVM+LCbEBOV1Tcw2+jRpx3UQH4wAnJz18OFsXC+X/FAw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.864.0.tgz", + "integrity": "sha512-MvakvzPZi9uyP3YADuIqtk/FAcPFkyYFWVVMf5iFs/rCdk0CUzn02Qf4CSuyhbkS6Y0KrAsMgKR4MgklPU79Wg==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.1.4", @@ -761,13 +761,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.863.0.tgz", - "integrity": "sha512-3Ppx5J31DUuaASyzAMYzSUf8y8emCLt1iaU+6yuSV/PwiCzJL5Sspos5xF2F+JErw8p8lNN+7rvHVSNqtgi2Fg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.864.0.tgz", + "integrity": "sha512-GjYPZ6Xnqo17NnC8NIQyvvdzzO7dm+Ks7gpxD/HsbXPmV2aEfuFveJXneGW9e1BheSKFff6FPDWu8Gaj2Iu1yg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/core": "^3.8.0", @@ -802,13 +802,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.863.0.tgz", - "integrity": "sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.864.0.tgz", + "integrity": "sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@smithy/core": "^3.8.0", @@ -821,24 +821,24 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.863.0.tgz", - "integrity": "sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.864.0.tgz", + "integrity": "sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -889,13 +889,13 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.863.0.tgz", - "integrity": "sha512-YEi1hER4OtVpeVBO9Ts8nYekF8Q9pcr4kzPxrzXHv83i2/jraPgacHlWvNSjdg8kvY+GsevBsirZXZmThkmKBA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.864.0.tgz", + "integrity": "sha512-w2HIn/WIcUyv1bmyCpRUKHXB5KdFGzyxPkp/YK5g+/FuGdnFFYWGfcO8O+How4jwrZTarBYsAHW9ggoKvwr37w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/protocol-http": "^5.1.3", "@smithy/signature-v4": "^5.1.3", @@ -907,14 +907,14 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.863.0.tgz", - "integrity": "sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.864.0.tgz", + "integrity": "sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -996,13 +996,13 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.863.0.tgz", - "integrity": "sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.864.0.tgz", + "integrity": "sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", @@ -2402,9 +2402,9 @@ } }, "node_modules/@eslint/compat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", - "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.2.tgz", + "integrity": "sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2462,9 +2462,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -2473,9 +2473,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -2692,14 +2692,14 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -2981,14 +2981,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.15.tgz", - "integrity": "sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==", + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.16.tgz", + "integrity": "sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "external-editor": "^3.1.0" + "@inquirer/external-editor": "^1.0.0", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -3024,6 +3024,22 @@ } } }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz", + "integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, "node_modules/@inquirer/figures": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", @@ -3098,14 +3114,14 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.0.tgz", - "integrity": "sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.1.tgz", + "integrity": "sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==", "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.2.0", "@inquirer/confirm": "^5.1.14", - "@inquirer/editor": "^4.2.15", + "@inquirer/editor": "^4.2.16", "@inquirer/expand": "^4.0.17", "@inquirer/input": "^4.2.1", "@inquirer/number": "^3.0.17", @@ -3922,12 +3938,12 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.63", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.63.tgz", - "integrity": "sha512-xW+I6czUGqaeocVt1+brUKzXvL85mBTKdmJGlsB8pl9qUL3PJoIBIIDhbleR499T0jR+j1hpy8yWSCrs54icMQ==", + "version": "3.2.64", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.64.tgz", + "integrity": "sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg==", "license": "MIT", "dependencies": { - "@inquirer/prompts": "^7.8.0", + "@inquirer/prompts": "^7.8.1", "@oclif/core": "^4.5.2", "ansis": "^3.17.0", "fast-levenshtein": "^3.0.0" @@ -5827,9 +5843,9 @@ } }, "node_modules/@types/node": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", - "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "license": "MIT", "dependencies": { "undici-types": "~7.10.0" @@ -7443,6 +7459,18 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7465,9 +7493,9 @@ } }, "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.0.tgz", + "integrity": "sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==", "dev": true, "license": "MIT" }, @@ -7510,9 +7538,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "dev": true, "funding": [ { @@ -7530,8 +7558,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -7820,9 +7848,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001733", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", - "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", "dev": true, "funding": [ { @@ -7957,9 +7985,9 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "license": "MIT" }, "node_modules/check-error": { @@ -9813,15 +9841,15 @@ } }, "node_modules/eslint-config-oclif": { - "version": "6.0.90", - "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.90.tgz", - "integrity": "sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==", + "version": "6.0.94", + "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.94.tgz", + "integrity": "sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/compat": "^1.3.1", + "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.31.0", + "@eslint/js": "^9.33.0", "@stylistic/eslint-plugin": "^3.1.0", "@typescript-eslint/eslint-plugin": "^8", "@typescript-eslint/parser": "^8", @@ -9835,7 +9863,7 @@ "eslint-plugin-n": "^17.21.3", "eslint-plugin-perfectionist": "^4", "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.38.0" + "typescript-eslint": "^8.39.0" }, "engines": { "node": ">=18.18.0" @@ -10253,9 +10281,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true, "license": "MIT", "engines": { @@ -10508,9 +10536,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", "peer": true, @@ -10518,11 +10546,11 @@ "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -11780,6 +11808,24 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13237,12 +13283,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -13552,6 +13598,18 @@ "node": ">=4" } }, + "node_modules/inquirer-search-checkbox/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/inquirer-search-checkbox/node_modules/inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -13817,6 +13875,18 @@ "node": ">=4" } }, + "node_modules/inquirer-search-list/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/inquirer-search-list/node_modules/inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -17470,9 +17540,9 @@ } }, "node_modules/napi-postinstall": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", - "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", "dev": true, "license": "MIT", "bin": { @@ -20608,21 +20678,21 @@ } }, "node_modules/oclif": { - "version": "4.22.6", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.6.tgz", - "integrity": "sha512-TsFZfPdhOKtBRv3YKnJMUVbL/JTw5IDs4DoWekpn7c+jBDw/snp0STCe48YYW4hotULwfy2yPbKr0KyzDQ7gjw==", + "version": "4.22.9", + "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.9.tgz", + "integrity": "sha512-zrrvAFI/MvfP54QueJrvYl3mjS1eYyeHGV3ITv7NQ16ykcg83E+rXBva2CfymMr1/r9b7m82GTFID6i8f8O66g==", "dev": true, "license": "MIT", "dependencies": { - "@aws-sdk/client-cloudfront": "^3.850.0", + "@aws-sdk/client-cloudfront": "^3.864.0", "@aws-sdk/client-s3": "^3.850.0", "@inquirer/confirm": "^3.1.22", "@inquirer/input": "^2.2.4", "@inquirer/select": "^2.5.0", "@oclif/core": "^4.5.2", "@oclif/plugin-help": "^6.2.29", - "@oclif/plugin-not-found": "^3.2.61", - "@oclif/plugin-warn-if-update-available": "^3.1.44", + "@oclif/plugin-not-found": "^3.2.63", + "@oclif/plugin-warn-if-update-available": "^3.1.46", "ansis": "^3.16.0", "async-retry": "^1.3.3", "change-case": "^4", @@ -20742,9 +20812,9 @@ } }, "node_modules/oclif/node_modules/@types/node": { - "version": "22.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", - "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", + "version": "22.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz", + "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==", "dev": true, "license": "MIT", "dependencies": { @@ -21918,6 +21988,18 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -24462,9 +24544,9 @@ } }, "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "engines": { "node": ">=14.14" @@ -25636,18 +25718,6 @@ "node": ">=12" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", @@ -26317,9 +26387,9 @@ "license": "MIT" }, "packages/contentstack-audit/node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "version": "20.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.10.tgz", + "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -27978,9 +28048,9 @@ } }, "packages/contentstack-variants/node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "version": "20.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.10.tgz", + "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==", "dev": true, "license": "MIT", "dependencies": { From ddd55777ba16bc915cddf6d77b5250ab735c1de3 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 11:30:06 +0530 Subject: [PATCH 03/23] update talismanrc --- .talismanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.talismanrc b/.talismanrc index d41b93b2a0..726bffc7a9 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,6 @@ fileignoreconfig: - filename: package-lock.json - checksum: 72a462b8cacd9977871d7e5c6c15ba8be8c217930955667cb543ad93a41c1989 + checksum: c73d080bfbbf03bc2597891f956367bfd71f5f2f8d03525175426015265edc91 - filename: pnpm-lock.yaml checksum: 0ca85066946c49994a4353c9f64b8f380d5d2050194e3e57ad7ccd7faa030d36 - filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts From 3679bb15b0eb9ff628501fba0768aa595a09375a Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 11:34:10 +0530 Subject: [PATCH 04/23] update git-ignore --- packages/contentstack-audit/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/contentstack-audit/.gitignore b/packages/contentstack-audit/.gitignore index 74daa1ef52..12a68582ef 100644 --- a/packages/contentstack-audit/.gitignore +++ b/packages/contentstack-audit/.gitignore @@ -18,4 +18,5 @@ dependabot.yml .editorconfig oclif.manifest.json *.env -.vscode/ \ No newline at end of file +.vscode/ +audit-report \ No newline at end of file From 06ab8607b8ad5f57eddb887d210a043dbd2fb71e Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 11:45:26 +0530 Subject: [PATCH 05/23] Refactor constructors in audit classes to initialize missingRefs property directly --- .../test/unit/modules/content-types.test.ts | 10 ++++++++-- .../test/unit/modules/field-rules.test.ts | 10 ++++++++-- .../test/unit/modules/global-field.test.ts | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/contentstack-audit/test/unit/modules/content-types.test.ts b/packages/contentstack-audit/test/unit/modules/content-types.test.ts index 16086ee9e6..193b03f139 100644 --- a/packages/contentstack-audit/test/unit/modules/content-types.test.ts +++ b/packages/contentstack-audit/test/unit/modules/content-types.test.ts @@ -25,19 +25,25 @@ describe('Content types', () => { let constructorParam: ModuleConstructorParam & CtConstructorParam; class AuditTempClass extends ContentType { - constructor(public missingRefs: Record = {}) { + public missingRefs: Record; + + constructor(missingRefs: Record = {}) { super(constructorParam); this.currentUid = 'audit'; this.currentTitle = 'Audit'; + this.missingRefs = missingRefs; this.missingRefs['audit'] = []; } } class AuditFixTempClass extends ContentType { - constructor(public missingRefs: Record = {}) { + public missingRefs: Record; + + constructor(missingRefs: Record = {}) { super({ ...constructorParam, fix: true, moduleName: undefined }); this.currentUid = 'audit-fix'; this.currentTitle = 'Audit fix'; + this.missingRefs = missingRefs; this.missingRefs['audit-fix'] = []; } } diff --git a/packages/contentstack-audit/test/unit/modules/field-rules.test.ts b/packages/contentstack-audit/test/unit/modules/field-rules.test.ts index 9890e71913..110f3b2228 100644 --- a/packages/contentstack-audit/test/unit/modules/field-rules.test.ts +++ b/packages/contentstack-audit/test/unit/modules/field-rules.test.ts @@ -18,19 +18,25 @@ describe('Field Rules', () => { let constructorParam: ModuleConstructorParam & CtConstructorParam; class AuditTempClass extends FieldRule { - constructor(public missingRefs: Record = {}) { + public missingRefs: Record; + + constructor(missingRefs: Record = {}) { super(constructorParam); this.currentUid = 'audit'; this.currentTitle = 'Audit'; + this.missingRefs = missingRefs; this.missingRefs['audit'] = []; } } class AuditFixTempClass extends FieldRule { - constructor(public missingRefs: Record = {}) { + public missingRefs: Record; + + constructor(missingRefs: Record = {}) { super({ ...constructorParam, fix: true, moduleName: undefined }); this.currentUid = 'audit-fix'; this.currentTitle = 'Audit fix'; + this.missingRefs = missingRefs; this.missingRefs['audit-fix'] = []; } } diff --git a/packages/contentstack-audit/test/unit/modules/global-field.test.ts b/packages/contentstack-audit/test/unit/modules/global-field.test.ts index 27296dd78e..635f4955e8 100644 --- a/packages/contentstack-audit/test/unit/modules/global-field.test.ts +++ b/packages/contentstack-audit/test/unit/modules/global-field.test.ts @@ -15,10 +15,13 @@ describe('Global Fields', () => { let constructorParam: ModuleConstructorParam & CtConstructorParam; class AuditFixTempClass extends GlobalField { - constructor(public missingRefs: Record = {}) { + public missingRefs: Record; + + constructor(missingRefs: Record = {}) { super({ ...constructorParam, fix: true, moduleName: 'global-fields' }); this.currentUid = 'audit-fix'; this.currentTitle = 'Audit fix'; + this.missingRefs = missingRefs; this.missingRefs['audit-fix'] = []; } } From d9dfa60e1f3592c17b552c98f7510e75fb1bbe17 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:02:30 +0530 Subject: [PATCH 06/23] Remove unused import from integration test file --- packages/contentstack-config/test/integration/config.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/contentstack-config/test/integration/config.test.ts b/packages/contentstack-config/test/integration/config.test.ts index c931df50ef..51ce27f3c0 100644 --- a/packages/contentstack-config/test/integration/config.test.ts +++ b/packages/contentstack-config/test/integration/config.test.ts @@ -1,7 +1,5 @@ import { expect } from 'chai'; -import * as sinon from 'sinon'; import { spawnSync } from 'child_process'; -import { cliux } from '@contentstack/cli-utilities'; describe('ContentStack-Config Plugin Tests', () => { it("Should execute 'config:set:region --AZURE-NA'", () => { From ee694504f824acd9e176e382ecc0fccf8b1ab044 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:09:03 +0530 Subject: [PATCH 07/23] Update import statement in run.test.ts to specify JSON type --- packages/contentstack-config/test/run.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contentstack-config/test/run.test.ts b/packages/contentstack-config/test/run.test.ts index c593f1263a..fe7f983361 100644 --- a/packages/contentstack-config/test/run.test.ts +++ b/packages/contentstack-config/test/run.test.ts @@ -5,7 +5,7 @@ import { UNIT_EXECUTION_ORDER, INTEGRATION_EXECUTION_ORDER, // @ts-ignore -} from "./config.json"; +} from "./config.json" with { type: "json" }; const filter = require("lodash/filter"); const forEach = require("lodash/forEach"); From d33ea0ed081b40ab35fb11934d31cc57ff862ce8 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:27:47 +0530 Subject: [PATCH 08/23] Reorganize config import to improve readability --- packages/contentstack-config/test/run.test.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/contentstack-config/test/run.test.ts b/packages/contentstack-config/test/run.test.ts index fe7f983361..973b383792 100644 --- a/packages/contentstack-config/test/run.test.ts +++ b/packages/contentstack-config/test/run.test.ts @@ -1,11 +1,9 @@ import { join, resolve } from "path"; import { existsSync, readdirSync } from "fs"; -import { - IS_TS, - UNIT_EXECUTION_ORDER, - INTEGRATION_EXECUTION_ORDER, - // @ts-ignore -} from "./config.json" with { type: "json" }; +// @ts-ignore +import config from "./config.json" with { type: "json" }; + +const { IS_TS, UNIT_EXECUTION_ORDER, INTEGRATION_EXECUTION_ORDER } = config; const filter = require("lodash/filter"); const forEach = require("lodash/forEach"); From 83870720ae6f7a5845659e95910c8eb53569c649 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:33:54 +0530 Subject: [PATCH 09/23] Refactor lodash imports to use ES module syntax --- packages/contentstack-config/test/run.test.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/contentstack-config/test/run.test.ts b/packages/contentstack-config/test/run.test.ts index 973b383792..e7ffe6bf96 100644 --- a/packages/contentstack-config/test/run.test.ts +++ b/packages/contentstack-config/test/run.test.ts @@ -1,16 +1,15 @@ import { join, resolve } from "path"; import { existsSync, readdirSync } from "fs"; +import filter from "lodash/filter.js"; +import forEach from "lodash/forEach.js"; +import isEmpty from "lodash/isEmpty.js"; +import isArray from "lodash/isArray.js"; +import includes from "lodash/includes.js"; // @ts-ignore import config from "./config.json" with { type: "json" }; const { IS_TS, UNIT_EXECUTION_ORDER, INTEGRATION_EXECUTION_ORDER } = config; -const filter = require("lodash/filter"); -const forEach = require("lodash/forEach"); -const isEmpty = require("lodash/isEmpty"); -const isArray = require("lodash/isArray"); -const includes = require("lodash/includes"); - const testFileExtension = IS_TS ? ".ts" : ".js"; process.env.TS_NODE_PROJECT = resolve("test/tsconfig.json"); From 9b47b77b0bc65d88589c33d71fd562f66104193c Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:45:11 +0530 Subject: [PATCH 10/23] Refactor imports in run.test.ts to use ES module syntax and improve configuration handling --- packages/contentstack-auth/test/run.test.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/contentstack-auth/test/run.test.ts b/packages/contentstack-auth/test/run.test.ts index 4dbec16405..1e61078fc0 100644 --- a/packages/contentstack-auth/test/run.test.ts +++ b/packages/contentstack-auth/test/run.test.ts @@ -1,20 +1,17 @@ import { join, resolve } from "path"; import { existsSync, readdirSync } from "fs"; -import { - IS_TS, - UNIT_EXECUTION_ORDER, - INTEGRATION_EXECUTION_ORDER, - // @ts-ignore -} from "./config.json"; +import config from "./config.json" with { type: "json" }; +import filter from "lodash/filter.js"; +import forEach from "lodash/forEach.js"; +import isEmpty from "lodash/isEmpty.js"; +import isArray from "lodash/isArray.js"; +import includes from "lodash/includes.js"; +import dotenv from 'dotenv'; // NOTE init env variables -require('dotenv').config() +dotenv.config(); -const filter = require("lodash/filter"); -const forEach = require("lodash/forEach"); -const isEmpty = require("lodash/isEmpty"); -const isArray = require("lodash/isArray"); -const includes = require("lodash/includes"); +const { IS_TS, UNIT_EXECUTION_ORDER, INTEGRATION_EXECUTION_ORDER } = config; const testFileExtension = IS_TS ? ".ts" : ".js"; process.env.TS_NODE_PROJECT = resolve("test/tsconfig.json"); From 6b0ff508aa19539b1369464c447760812df56f97 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 12:54:15 +0530 Subject: [PATCH 11/23] Refactor import in message-handler.test.ts to use ES module syntax --- packages/contentstack-auth/test/unit/message-handler.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/contentstack-auth/test/unit/message-handler.test.ts b/packages/contentstack-auth/test/unit/message-handler.test.ts index 15e91b9a01..5f24a2735f 100644 --- a/packages/contentstack-auth/test/unit/message-handler.test.ts +++ b/packages/contentstack-auth/test/unit/message-handler.test.ts @@ -1,5 +1,6 @@ import { expect } from 'chai'; -import { messageHandler } from '@contentstack/cli-utilities'; +import pkg from '@contentstack/cli-utilities'; +const { messageHandler } = pkg; describe('Message Handler', () => { it('parse with invalid message key, returns the key itself', function () { From ee0c146de8a2d807f77e255b187848f5f936d2c1 Mon Sep 17 00:00:00 2001 From: "harshitha.d" Date: Mon, 11 Aug 2025 13:17:17 +0530 Subject: [PATCH 12/23] Comment out tests for Contentstack Import Setup in unit-test.yml --- .github/workflows/unit-test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 2eb526c070..8495366d73 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -52,9 +52,9 @@ jobs: working-directory: ./packages/contentstack-auth run: npm run test - - name: Run tests for Contentstack Import Setup - working-directory: ./packages/contentstack-import-setup - run: npm run test:unit + # - name: Run tests for Contentstack Import Setup + # working-directory: ./packages/contentstack-import-setup + # run: npm run test:unit - name: Run tests for Contentstack Bulk Publish From 640125aa130f87d6545e19527df832cdce57d56d Mon Sep 17 00:00:00 2001 From: raj pandey Date: Mon, 11 Aug 2025 13:40:22 +0530 Subject: [PATCH 13/23] Feat: Added Config command to set the totp --- .talismanrc | 18 +- package-lock.json | 2443 ++++++++--------- packages/contentstack-config/README.md | 77 +- packages/contentstack-config/package.json | 2 +- .../src/commands/config/set/region.ts | 30 + .../src/commands/config/totp/add.ts | 87 + .../src/commands/config/totp/remove.ts | 92 + .../services/totp/totp-service.interface.ts | 12 + .../src/services/totp/totp.service.ts | 118 + .../src/services/totp/totp.types.ts | 16 + .../src/services/totp/types.ts | 26 + .../test/unit/commands/totp.test.ts | 353 +++ .../test/unit/services/totp.service.test.ts | 261 ++ packages/contentstack-export/package.json | 2 +- packages/contentstack/package.json | 2 +- pnpm-lock.yaml | 814 +++--- 16 files changed, 2679 insertions(+), 1674 deletions(-) create mode 100644 packages/contentstack-config/src/commands/config/totp/add.ts create mode 100644 packages/contentstack-config/src/commands/config/totp/remove.ts create mode 100644 packages/contentstack-config/src/services/totp/totp-service.interface.ts create mode 100644 packages/contentstack-config/src/services/totp/totp.service.ts create mode 100644 packages/contentstack-config/src/services/totp/totp.types.ts create mode 100644 packages/contentstack-config/src/services/totp/types.ts create mode 100644 packages/contentstack-config/test/unit/commands/totp.test.ts create mode 100644 packages/contentstack-config/test/unit/services/totp.service.test.ts diff --git a/.talismanrc b/.talismanrc index 1a0dd8e4cd..527bf6c026 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,20 @@ fileignoreconfig: - filename: pnpm-lock.yaml - checksum: 14f5e6720c8596c182735dffd28e7da2e5175670ec24cd8299809fb05d6735a5 + checksum: 470990d838d1c5a2ac15ab6114701897013ba801f1b26199911843ec95ef5dcd - filename: package-lock.json - checksum: 12cf2fe3303ea849646a97f767e720ff48847ecdcf4439140488dfd3157a0844 + checksum: abf7eaa17745ea602424c7092c9973f794b31be49dbe0fec8a9bbd3e17c6954b +- filename: packages/contentstack-config/src/services/totp/totp-service.interface.ts + checksum: e3f1a7f9bd36ea40fda1138dff713d8390d5feb85370419ee24f5f3f9b45f48c +- filename: packages/contentstack-config/src/commands/config/totp/remove.ts + checksum: 6b2956013e33a2b46e5e342ce362672bfb5e057211737b95c5924f6994e858c2 +- filename: packages/contentstack-config/src/services/totp/totp.service.ts + checksum: f21bc50af721e29ab69afe43e2b1c55d7867cfb894056ec240e412ca2e5eacc2 +- filename: packages/contentstack-config/src/services/totp/types.ts + checksum: 8ab48ff2bcd11d69b77df0dd71262c28703ba674a552f6b536a53c855d828117 +- filename: packages/contentstack-config/test/unit/commands/totp.test.ts + checksum: ebcfb9a95650810fcbe1dbd2165d21879aeaaf9514af7dac30defb8f02964363 +- filename: packages/contentstack-config/src/commands/config/totp/add.ts + checksum: 48d2ddefec00834fff94dac250be2c20a47d44d23fca87d0e145b38b11604219 +- filename: packages/contentstack-config/test/unit/services/totp.service.test.ts + checksum: bfb93f2b62f606007cc84a4a51a3e61ded10593c65a499f8748379728f9592e2 version: "1.0" diff --git a/package-lock.json b/package-lock.json index 5948fc246d..6d79ffe10d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -295,25 +295,25 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.863.0.tgz", - "integrity": "sha512-04ME3EqDtWvV2nKl9qlk2TqjDwJL3sI2ey33sIJCL3d2z3cFIQOOdy9QleCPmYPMqPpENRC0qdKprR0yt2t7fg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.864.0.tgz", + "integrity": "sha512-DpUrEonVs7I7J+tXjvllVNCg7e9mnQwg8eMWqc7S7/c82SUC+U2Xqe6M5Ey5pWkCghy0GDgnn+iUA43W7H0WKg==", "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.863.0", - "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@aws-sdk/xml-builder": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", @@ -349,33 +349,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.863.0.tgz", - "integrity": "sha512-12iPziQtTolNiWFlN7Bg4jDfh1eOVB0hW6bsP1cI3JVr/IF0pVvPjQ1WEUhjTlOujC/U+JaYjw3iQ7nWKHX6vQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.864.0.tgz", + "integrity": "sha512-QGYi9bWliewxumsvbJLLyx9WC0a4DP4F+utygBcq0zwPxaM0xDfBspQvP1dsepi7mW5aAjZmJ2+Xb7X0EhzJ/g==", "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/core": "3.863.0", - "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", "@aws-sdk/middleware-bucket-endpoint": "3.862.0", "@aws-sdk/middleware-expect-continue": "3.862.0", - "@aws-sdk/middleware-flexible-checksums": "3.863.0", + "@aws-sdk/middleware-flexible-checksums": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-location-constraint": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/middleware-ssec": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", - "@aws-sdk/signature-v4-multi-region": "3.863.0", + "@aws-sdk/signature-v4-multi-region": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@aws-sdk/xml-builder": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", @@ -419,24 +419,24 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.863.0.tgz", - "integrity": "sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.864.0.tgz", + "integrity": "sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -469,9 +469,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.863.0.tgz", - "integrity": "sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.864.0.tgz", + "integrity": "sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -496,13 +496,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.863.0.tgz", - "integrity": "sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.864.0.tgz", + "integrity": "sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -513,13 +513,13 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.863.0.tgz", - "integrity": "sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.864.0.tgz", + "integrity": "sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/node-http-handler": "^4.1.1", @@ -535,19 +535,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.863.0.tgz", - "integrity": "sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.864.0.tgz", + "integrity": "sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -560,18 +560,18 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.863.0.tgz", - "integrity": "sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.864.0.tgz", + "integrity": "sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-ini": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-ini": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -584,13 +584,13 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.863.0.tgz", - "integrity": "sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.864.0.tgz", + "integrity": "sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -602,15 +602,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.863.0.tgz", - "integrity": "sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.864.0.tgz", + "integrity": "sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.863.0", - "@aws-sdk/core": "3.863.0", - "@aws-sdk/token-providers": "3.863.0", + "@aws-sdk/client-sso": "3.864.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/token-providers": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -622,14 +622,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.863.0.tgz", - "integrity": "sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.864.0.tgz", + "integrity": "sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -675,16 +675,16 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.863.0.tgz", - "integrity": "sha512-nZW9Rf4floAuxmPeik1FJ7/LwEnmWjdgoa0ls/x/KpAVM+LCbEBOV1Tcw2+jRpx3UQH4wAnJz18OFsXC+X/FAw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.864.0.tgz", + "integrity": "sha512-MvakvzPZi9uyP3YADuIqtk/FAcPFkyYFWVVMf5iFs/rCdk0CUzn02Qf4CSuyhbkS6Y0KrAsMgKR4MgklPU79Wg==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.1.4", @@ -762,13 +762,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.863.0.tgz", - "integrity": "sha512-3Ppx5J31DUuaASyzAMYzSUf8y8emCLt1iaU+6yuSV/PwiCzJL5Sspos5xF2F+JErw8p8lNN+7rvHVSNqtgi2Fg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.864.0.tgz", + "integrity": "sha512-GjYPZ6Xnqo17NnC8NIQyvvdzzO7dm+Ks7gpxD/HsbXPmV2aEfuFveJXneGW9e1BheSKFff6FPDWu8Gaj2Iu1yg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/core": "^3.8.0", @@ -803,13 +803,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.863.0.tgz", - "integrity": "sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.864.0.tgz", + "integrity": "sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@smithy/core": "^3.8.0", @@ -822,24 +822,24 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.863.0.tgz", - "integrity": "sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.864.0.tgz", + "integrity": "sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -890,13 +890,13 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.863.0.tgz", - "integrity": "sha512-YEi1hER4OtVpeVBO9Ts8nYekF8Q9pcr4kzPxrzXHv83i2/jraPgacHlWvNSjdg8kvY+GsevBsirZXZmThkmKBA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.864.0.tgz", + "integrity": "sha512-w2HIn/WIcUyv1bmyCpRUKHXB5KdFGzyxPkp/YK5g+/FuGdnFFYWGfcO8O+How4jwrZTarBYsAHW9ggoKvwr37w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/protocol-http": "^5.1.3", "@smithy/signature-v4": "^5.1.3", @@ -908,14 +908,14 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.863.0.tgz", - "integrity": "sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.864.0.tgz", + "integrity": "sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -997,13 +997,13 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.863.0.tgz", - "integrity": "sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.864.0.tgz", + "integrity": "sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", @@ -2731,12 +2731,6 @@ "lodash.isnil": "^4.0.0" } }, - "node_modules/@fast-csv/format/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "license": "MIT" - }, "node_modules/@fast-csv/parse": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", @@ -2752,12 +2746,6 @@ "lodash.uniq": "^4.5.0" } }, - "node_modules/@fast-csv/parse/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "license": "MIT" - }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", @@ -2895,134 +2883,113 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@inquirer/checkbox": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.0.tgz", - "integrity": "sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/@inquirer/confirm": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", - "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", + "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, "node_modules/@inquirer/core": { - "version": "10.1.15", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz", - "integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", + "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "mute-stream": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@inquirer/editor": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.15.tgz", - "integrity": "sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==", + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz", + "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "external-editor": "^3.1.0" - }, + "undici-types": "~6.21.0" + } + }, + "node_modules/@inquirer/core/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" + "node": ">= 12" + } + }, + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@inquirer/expand": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.17.tgz", - "integrity": "sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==", + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=8" } }, "node_modules/@inquirer/figures": { @@ -3035,189 +3002,64 @@ } }, "node_modules/@inquirer/input": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.1.tgz", - "integrity": "sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, - "node_modules/@inquirer/number": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.17.tgz", - "integrity": "sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==", + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, - "node_modules/@inquirer/password": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.17.tgz", - "integrity": "sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==", + "node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2" + "mute-stream": "^1.0.0" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, - "node_modules/@inquirer/prompts": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.0.tgz", - "integrity": "sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==", - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.2.0", - "@inquirer/confirm": "^5.1.14", - "@inquirer/editor": "^4.2.15", - "@inquirer/expand": "^4.0.17", - "@inquirer/input": "^4.2.1", - "@inquirer/number": "^3.0.17", - "@inquirer/password": "^4.0.17", - "@inquirer/rawlist": "^4.1.5", - "@inquirer/search": "^3.1.0", - "@inquirer/select": "^4.3.1" - }, + "node_modules/@inquirer/type/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.5.tgz", - "integrity": "sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.0.tgz", - "integrity": "sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.1.tgz", - "integrity": "sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", - "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3751,187 +3593,577 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@oclif/core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.2.tgz", + "integrity": "sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "tinyglobby": "^0.2.14", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "6.2.32", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.32.tgz", + "integrity": "sha512-LrmMdo9EMJciOvF8UurdoTcTMymv5npKtxMAyonZvhSvGR8YwCKnuHIh00+SO2mNtGOYam7f4xHnUmj2qmanyA==", + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-not-found": { + "version": "3.2.64", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.64.tgz", + "integrity": "sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg==", + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^7.8.1", + "@oclif/core": "^4.5.2", + "ansis": "^3.17.0", + "fast-levenshtein": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/checkbox": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.0.tgz", + "integrity": "sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/confirm": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", + "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/core": { + "version": "10.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz", + "integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/editor": { + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.16.tgz", + "integrity": "sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/external-editor": "^1.0.0", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/expand": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.17.tgz", + "integrity": "sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/external-editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz", + "integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.6.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/input": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.1.tgz", + "integrity": "sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/number": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.17.tgz", + "integrity": "sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/password": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.17.tgz", + "integrity": "sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/prompts": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.1.tgz", + "integrity": "sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@inquirer/checkbox": "^4.2.0", + "@inquirer/confirm": "^5.1.14", + "@inquirer/editor": "^4.2.16", + "@inquirer/expand": "^4.0.17", + "@inquirer/input": "^4.2.1", + "@inquirer/number": "^3.0.17", + "@inquirer/password": "^4.0.17", + "@inquirer/rawlist": "^4.1.5", + "@inquirer/search": "^3.1.0", + "@inquirer/select": "^4.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "dev": true, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/rawlist": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.5.tgz", + "integrity": "sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", - "dev": true, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/search": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.0.tgz", + "integrity": "sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@inquirer/core": "^10.1.15", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jsdoc/salty": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", - "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/select": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.1.tgz", + "integrity": "sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==", + "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "@inquirer/core": "^10.1.15", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=v12.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, + "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/type": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", + "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@oclif/plugin-not-found/node_modules/@types/node": { + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "license": "MIT", + "peer": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "undici-types": "~7.10.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", + "node_modules/@oclif/plugin-not-found/node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "license": "MIT" + }, + "node_modules/@oclif/plugin-not-found/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", "engines": { - "node": ">= 8" + "node": ">= 12" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@oclif/plugin-not-found/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", + "node_modules/@oclif/plugin-not-found/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", "engines": { - "node": ">=12.4.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@oclif/core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.2.tgz", - "integrity": "sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.17.0", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.3", - "minimatch": "^9.0.5", - "semver": "^7.6.3", - "string-width": "^4.2.3", - "supports-color": "^8", - "tinyglobby": "^0.2.14", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, + "node_modules/@oclif/plugin-not-found/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { - "node": ">=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@oclif/plugin-help": { - "version": "6.2.32", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.32.tgz", - "integrity": "sha512-LrmMdo9EMJciOvF8UurdoTcTMymv5npKtxMAyonZvhSvGR8YwCKnuHIh00+SO2mNtGOYam7f4xHnUmj2qmanyA==", + "node_modules/@oclif/plugin-not-found/node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "license": "MIT", - "dependencies": { - "@oclif/core": "^4" - }, - "engines": { - "node": ">=18.0.0" - } + "peer": true }, - "node_modules/@oclif/plugin-not-found": { - "version": "3.2.63", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.63.tgz", - "integrity": "sha512-xW+I6czUGqaeocVt1+brUKzXvL85mBTKdmJGlsB8pl9qUL3PJoIBIIDhbleR499T0jR+j1hpy8yWSCrs54icMQ==", + "node_modules/@oclif/plugin-not-found/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { - "@inquirer/prompts": "^7.8.0", - "@oclif/core": "^4.5.2", - "ansis": "^3.17.0", - "fast-levenshtein": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, "node_modules/@oclif/plugin-plugins": { @@ -5871,14 +6103,11 @@ "@types/node": "*" } }, - "node_modules/@types/node": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", - "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.10.0" - } + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", @@ -7439,20 +7668,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/block-elements": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/block-elements/-/block-elements-1.2.0.tgz", @@ -7520,9 +7735,9 @@ } }, "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.0.tgz", + "integrity": "sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==", "dev": true, "license": "MIT" }, @@ -7564,9 +7779,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "dev": true, "funding": [ { @@ -7584,8 +7799,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -7777,13 +7992,6 @@ "semver": "bin/semver.js" } }, - "node_modules/caching-transform/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/caching-transform/node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -7874,9 +8082,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001733", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", - "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", "dev": true, "funding": [ { @@ -8218,15 +8426,6 @@ "node": ">=0.10.0" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-truncate/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -8254,12 +8453,12 @@ } }, "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "license": "ISC", "engines": { - "node": ">= 12" + "node": ">= 10" } }, "node_modules/cliui": { @@ -8563,20 +8762,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/conf": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", @@ -8897,40 +9082,6 @@ "node": ">=12" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "license": "MIT", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -9329,15 +9480,6 @@ "node": ">=12" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -9866,15 +10008,15 @@ } }, "node_modules/eslint-config-oclif": { - "version": "6.0.90", - "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.90.tgz", - "integrity": "sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==", + "version": "6.0.94", + "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.94.tgz", + "integrity": "sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/compat": "^1.3.1", + "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.31.0", + "@eslint/js": "^9.33.0", "@stylistic/eslint-plugin": "^3.1.0", "@typescript-eslint/eslint-plugin": "^8", "@typescript-eslint/parser": "^8", @@ -9888,7 +10030,7 @@ "eslint-plugin-n": "^17.21.3", "eslint-plugin-perfectionist": "^4", "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.38.0" + "typescript-eslint": "^8.39.0" }, "engines": { "node": ">=18.18.0" @@ -10306,9 +10448,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true, "license": "MIT", "engines": { @@ -10561,9 +10703,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", "peer": true, @@ -10571,11 +10713,11 @@ "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -11710,13 +11852,6 @@ "node": ">=8" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -12370,13 +12505,6 @@ "node": ">=8.0.0" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -12431,6 +12559,42 @@ "readable-stream": "^2.0.0" } }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -13671,12 +13835,6 @@ "node": ">=4" } }, - "node_modules/inquirer-search-checkbox/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/inquirer-search-checkbox/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -13936,12 +14094,6 @@ "node": ">=4" } }, - "node_modules/inquirer-search-list/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/inquirer-search-list/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -13991,21 +14143,6 @@ "node": ">=0.6.0" } }, - "node_modules/inquirer/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/inquirer/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, "node_modules/inquirer/node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -14725,9 +14862,9 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/isexe": { @@ -14803,6 +14940,19 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -16073,40 +16223,6 @@ } } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "license": "MIT", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -16457,18 +16573,6 @@ "node": ">=4" } }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", - "license": "MIT", - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/listr-update-renderer/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -16622,12 +16726,6 @@ "node": ">=4" } }, - "node_modules/listr-verbose-renderer/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/listr-verbose-renderer/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16649,15 +16747,6 @@ "node": ">=0.10.0" } }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/localStorage": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/localStorage/-/localStorage-1.0.4.tgz", @@ -16824,20 +16913,80 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "license": "MIT" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "license": "MIT", + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, "node_modules/log-update": { @@ -16927,12 +17076,6 @@ "node": ">=4" } }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/log-update/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -17451,6 +17594,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -17503,18 +17663,15 @@ "license": "MIT" }, "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" }, "node_modules/napi-postinstall": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", - "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", "dev": true, "license": "MIT", "bin": { @@ -17650,6 +17807,28 @@ } } }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -20401,6 +20580,19 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -20438,13 +20630,6 @@ "semver": "bin/semver.js" } }, - "node_modules/nyc/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -20597,200 +20782,95 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "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.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oclif": { - "version": "4.22.6", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.6.tgz", - "integrity": "sha512-TsFZfPdhOKtBRv3YKnJMUVbL/JTw5IDs4DoWekpn7c+jBDw/snp0STCe48YYW4hotULwfy2yPbKr0KyzDQ7gjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.850.0", - "@aws-sdk/client-s3": "^3.850.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.5.2", - "@oclif/plugin-help": "^6.2.29", - "@oclif/plugin-not-found": "^3.2.61", - "@oclif/plugin-warn-if-update-available": "^3.1.44", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "lodash": "^4.17.21", - "normalize-package-data": "^6", - "semver": "^7.7.1", - "sort-package-json": "^2.15.1", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/oclif/node_modules/@inquirer/confirm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/core": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/core/node_modules/@inquirer/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/input": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oclif/node_modules/@inquirer/select": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/oclif/node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "node_modules/object.values": { + "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": { - "mute-stream": "^1.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oclif/node_modules/@types/node": { - "version": "22.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", - "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", + "node_modules/oclif": { + "version": "4.22.9", + "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.9.tgz", + "integrity": "sha512-zrrvAFI/MvfP54QueJrvYl3mjS1eYyeHGV3ITv7NQ16ykcg83E+rXBva2CfymMr1/r9b7m82GTFID6i8f8O66g==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@aws-sdk/client-cloudfront": "^3.864.0", + "@aws-sdk/client-s3": "^3.850.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.5.2", + "@oclif/plugin-help": "^6.2.29", + "@oclif/plugin-not-found": "^3.2.63", + "@oclif/plugin-warn-if-update-available": "^3.1.46", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "lodash": "^4.17.21", + "normalize-package-data": "^6", + "semver": "^7.7.1", + "sort-package-json": "^2.15.1", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/oclif/node_modules/fs-extra": { @@ -20818,23 +20898,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/oclif/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/oclif/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/oclif/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -20845,21 +20908,6 @@ "node": ">= 4.0.0" } }, - "node_modules/oclif/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/omit-deep-lodash": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/omit-deep-lodash/-/omit-deep-lodash-1.1.7.tgz", @@ -21003,6 +21051,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -21102,16 +21166,12 @@ } }, "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/p-try": { @@ -21670,6 +21730,42 @@ "through2": "~2.0.3" } }, + "node_modules/progress-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/progress-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/progress-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/progress-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/progress-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -22127,33 +22223,20 @@ "node": ">=8" } }, - "node_modules/read/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -22602,12 +22685,6 @@ "node": ">=8" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -22697,6 +22774,18 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/rimraf/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { "version": "4.46.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", @@ -22818,12 +22907,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -22860,12 +22943,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-push-apply/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", @@ -23280,13 +23357,6 @@ "node": ">=18" } }, - "node_modules/shx/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/shx/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -23373,16 +23443,10 @@ } }, "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/simple-swizzle": { "version": "0.2.2", @@ -23475,21 +23539,12 @@ } }, "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=0.10.0" } }, "node_modules/smartwrap": { @@ -23812,13 +23867,6 @@ "semver": "bin/semver.js" } }, - "node_modules/spawn-wrap/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/spawn-wrap/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -23979,20 +24027,6 @@ "readable-stream": "^3.5.0" } }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/stream-connect": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", @@ -24040,20 +24074,14 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -24336,6 +24364,24 @@ "node": ">=4" } }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", @@ -24518,9 +24564,9 @@ } }, "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "engines": { "node": ">=14.14" @@ -24579,10 +24625,16 @@ } }, "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } }, "node_modules/traverse": { "version": "0.6.11", @@ -25372,9 +25424,10 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/unique-string": { @@ -25674,10 +25727,13 @@ } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-encoding": { "version": "2.0.0", @@ -25713,13 +25769,16 @@ } }, "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/which": { @@ -25783,12 +25842,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", @@ -25882,34 +25935,6 @@ "node": ">= 12.0.0" } }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -26012,13 +26037,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -26267,7 +26285,7 @@ "@contentstack/cli-cm-migrate-rte": "~1.6.0", "@contentstack/cli-cm-seed": "~1.12.0", "@contentstack/cli-command": "~1.6.0", - "@contentstack/cli-config": "~1.15.0", + "@contentstack/cli-config": "~1.16.0", "@contentstack/cli-launch": "^1.9.2", "@contentstack/cli-migration": "~1.8.0", "@contentstack/cli-utilities": "~1.13.1", @@ -26373,9 +26391,9 @@ "license": "MIT" }, "packages/contentstack-audit/node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "version": "20.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.10.tgz", + "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26396,13 +26414,6 @@ "node": ">=14.17" } }, - "packages/contentstack-audit/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-auth": { "name": "@contentstack/cli-auth", "version": "1.6.0", @@ -26468,13 +26479,6 @@ "node": ">=18.0.0" } }, - "packages/contentstack-auth/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-auth/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -26645,13 +26649,6 @@ "node": ">=14.0.0" } }, - "packages/contentstack-bootstrap/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-bootstrap/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -26822,13 +26819,6 @@ "node": ">=14.0.0" } }, - "packages/contentstack-command/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-command/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -26878,7 +26868,7 @@ }, "packages/contentstack-config": { "name": "@contentstack/cli-config", - "version": "1.15.0", + "version": "1.16.0", "license": "MIT", "dependencies": { "@contentstack/cli-command": "~1.6.0", @@ -26908,13 +26898,6 @@ "node": ">=14.0.0" } }, - "packages/contentstack-config/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-dev-dependencies": { "name": "@contentstack/cli-dev-dependencies", "version": "1.3.1", @@ -26989,13 +26972,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "packages/contentstack-dev-dependencies/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-dev-dependencies/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -27246,7 +27222,7 @@ }, "devDependencies": { "@contentstack/cli-auth": "~1.6.0", - "@contentstack/cli-config": "~1.12.1", + "@contentstack/cli-config": "~1.16.0", "@contentstack/cli-dev-dependencies": "~1.3.1", "@oclif/plugin-help": "^6.2.28", "@oclif/test": "^4.1.13", @@ -27602,73 +27578,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/contentstack-export/node_modules/@contentstack/cli-config": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@contentstack/cli-config/-/cli-config-1.12.1.tgz", - "integrity": "sha512-sku0ivaF0viI25q7nbIfnwG1ZdGTaylJKcpgol4TQeKsD1qVUFhqqFvS+M6Na42E9cbZEWKICiS3XLJyiDATIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.5.0", - "@contentstack/cli-utilities": "~1.12.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-export/node_modules/@contentstack/cli-config/node_modules/@contentstack/cli-command": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@contentstack/cli-command/-/cli-command-1.5.1.tgz", - "integrity": "sha512-GJHPXH/e4bw2sftpFUGQFao3H0Btp3wEsjyukqOtlFlY3ZjzwqVRGAJTncte2NfkQUjnqlxIxRhJKE645nWSzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.12.0", - "contentstack": "^3.25.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-export/node_modules/@contentstack/cli-config/node_modules/@contentstack/cli-utilities": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@contentstack/cli-utilities/-/cli-utilities-1.12.1.tgz", - "integrity": "sha512-+DNqQxy9ERR53OAeUYSMCazUs9DjazyB6r+ZMIotg6BB6ZdlNt6Qr6XgxEFE/jgBqzZVmPox3hu+xV0KL1DEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.22.0", - "@contentstack/marketplace-sdk": "^1.2.8", - "@oclif/core": "^4.3.0", - "axios": "^1.9.0", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.5.0", - "figures": "^3.2.0", - "inquirer": "8.2.6", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.0", - "klona": "^2.0.6", - "lodash": "^4.17.21", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^9.0.1", - "winston": "^3.17.0", - "xdg-basedir": "^4.0.0" - } - }, "packages/contentstack-import": { "name": "@contentstack/cli-cm-import", "version": "1.26.1", @@ -27759,20 +27668,6 @@ "node": ">=14.0.0" } }, - "packages/contentstack-import-setup/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, - "packages/contentstack-import/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-migrate-rte": { "name": "@contentstack/cli-cm-migrate-rte", "version": "1.6.0", @@ -27871,13 +27766,6 @@ "node": ">=14.0.0" } }, - "packages/contentstack-seed/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-seed/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -27987,13 +27875,6 @@ "dev": true, "license": "MIT" }, - "packages/contentstack-utilities/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" - }, "packages/contentstack-variants": { "name": "@contentstack/cli-variants", "version": "1.3.0", @@ -28018,9 +27899,9 @@ } }, "packages/contentstack-variants/node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "version": "20.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.10.tgz", + "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28040,20 +27921,6 @@ "engines": { "node": ">=14.17" } - }, - "packages/contentstack-variants/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "packages/contentstack/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", - "dev": true, - "license": "MIT" } } } diff --git a/packages/contentstack-config/README.md b/packages/contentstack-config/README.md index a2b50f233d..38434c1ebd 100644 --- a/packages/contentstack-config/README.md +++ b/packages/contentstack-config/README.md @@ -5,16 +5,14 @@ The config namespace contains all the commands that you will need to configure t [![License](https://img.shields.io/npm/l/@contentstack/cli)](https://github.com/contentstack/cli/blob/main/LICENSE) - -- [@contentstack/cli-config](#contentstackcli-config) -- [Usage](#usage) -- [Commands](#commands) +* [@contentstack/cli-config](#contentstackcli-config) +* [Usage](#usage) +* [Commands](#commands) # Usage - ```sh-session $ npm install -g @contentstack/cli-config $ csdx COMMAND @@ -26,29 +24,29 @@ USAGE $ csdx COMMAND ... ``` - # Commands - -- [`csdx config:get:base-branch`](#csdx-configgetbase-branch) -- [`csdx config:get:ea-header`](#csdx-configgetea-header) -- [`csdx config:get:early-access-header`](#csdx-configgetearly-access-header) -- [`csdx config:get:log`](#csdx-configgetlog) -- [`csdx config:get:rate-limit`](#csdx-configgetrate-limit) -- [`csdx config:get:region`](#csdx-configgetregion) -- [`csdx config:remove:base-branch`](#csdx-configremovebase-branch) -- [`csdx config:remove:ea-header`](#csdx-configremoveea-header) -- [`csdx config:remove:early-access-header`](#csdx-configremoveearly-access-header) -- [`csdx config:remove:rate-limit`](#csdx-configremoverate-limit) -- [`csdx config:set:base-branch`](#csdx-configsetbase-branch) -- [`csdx config:set:ea-header`](#csdx-configsetea-header) -- [`csdx config:set:early-access-header`](#csdx-configsetearly-access-header) -- [`csdx config:set:log`](#csdx-configsetlog) -- [`csdx config:set:rate-limit`](#csdx-configsetrate-limit) -- [`csdx config:set:region [REGION]`](#csdx-configsetregion-region) +* [`csdx config:get:base-branch`](#csdx-configgetbase-branch) +* [`csdx config:get:ea-header`](#csdx-configgetea-header) +* [`csdx config:get:early-access-header`](#csdx-configgetearly-access-header) +* [`csdx config:get:log`](#csdx-configgetlog) +* [`csdx config:get:rate-limit`](#csdx-configgetrate-limit) +* [`csdx config:get:region`](#csdx-configgetregion) +* [`csdx config:remove:base-branch`](#csdx-configremovebase-branch) +* [`csdx config:remove:ea-header`](#csdx-configremoveea-header) +* [`csdx config:remove:early-access-header`](#csdx-configremoveearly-access-header) +* [`csdx config:remove:rate-limit`](#csdx-configremoverate-limit) +* [`csdx config:set:base-branch`](#csdx-configsetbase-branch) +* [`csdx config:set:ea-header`](#csdx-configsetea-header) +* [`csdx config:set:early-access-header`](#csdx-configsetearly-access-header) +* [`csdx config:set:log`](#csdx-configsetlog) +* [`csdx config:set:rate-limit`](#csdx-configsetrate-limit) +* [`csdx config:set:region [REGION]`](#csdx-configsetregion-region) +* [`csdx config:totp:add`](#csdx-configtotpadd) +* [`csdx config:totp:remove`](#csdx-configtotpremove) ## `csdx config:get:base-branch` @@ -435,4 +433,37 @@ EXAMPLES _See code: [src/commands/config/set/region.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/set/region.ts)_ +## `csdx config:totp:add` + +Add TOTP secret for 2FA authentication + +``` +USAGE + $ csdx config:totp:add + +DESCRIPTION + Add TOTP secret for 2FA authentication + +EXAMPLES + $ csdx config:totp:add +``` + +_See code: [src/commands/config/totp/add.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/totp/add.ts)_ + +## `csdx config:totp:remove` + +Remove stored TOTP secret + +``` +USAGE + $ csdx config:totp:remove + +DESCRIPTION + Remove stored TOTP secret + +EXAMPLES + $ csdx config:totp:remove +``` + +_See code: [src/commands/config/totp/remove.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/totp/remove.ts)_ diff --git a/packages/contentstack-config/package.json b/packages/contentstack-config/package.json index 11dfba3aa5..eb9cddd75b 100644 --- a/packages/contentstack-config/package.json +++ b/packages/contentstack-config/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-config", "description": "Contentstack CLI plugin for configuration", - "version": "1.15.0", + "version": "1.16.0", "author": "Contentstack", "scripts": { "build": "npm run clean && npm run compile", diff --git a/packages/contentstack-config/src/commands/config/set/region.ts b/packages/contentstack-config/src/commands/config/set/region.ts index fed827788d..fa9934db15 100644 --- a/packages/contentstack-config/src/commands/config/set/region.ts +++ b/packages/contentstack-config/src/commands/config/set/region.ts @@ -7,13 +7,21 @@ import { FlagInput, ArgInput, args, + configHandler, } from '@contentstack/cli-utilities'; import { Region } from '../../../interfaces'; import { regionHandler, interactive } from '../../../utils'; import { Args, BaseCommand } from '../../../base-command'; +import { TOTPService } from '../../../services/totp/totp.service'; export default class RegionSetCommand extends BaseCommand { config: any; + private readonly totpService: TOTPService; + + constructor(argv: string[], config: any) { + super(argv, config); + this.totpService = new TOTPService(); + } static description = 'Set region for CLI'; static flags: FlagInput = { cda: _flags.string({ @@ -69,6 +77,26 @@ export default class RegionSetCommand extends BaseCommand { + static readonly description = 'Add TOTP secret for 2FA authentication'; + + static readonly examples = [ + '$ csdx config:totp:add', + ]; + + private readonly totpService: TOTPService; + + constructor(argv: string[], config: any) { + super(argv, config); + this.totpService = new TOTPService(); + } + + static readonly flags = { + secret: Flags.string({ + description: 'TOTP secret for 2FA authentication', + required: false, + }), + }; + + async run(): Promise { + try { + const { flags } = await this.parse(AddTOTPCommand); + let secret = flags.secret; + + // Validate and normalize secret + if (!secret) { + secret = await cliux.inquire({ + type: 'password', + name: 'secret', + message: 'Enter your TOTP secret:', + validate: (input: string) => { + if (!input) return 'TOTP secret is required'; + if (!this.totpService.validateSecret(input)) return 'Invalid TOTP secret format'; + return true; + }, + }); + } + + // Validate secret if provided via flag + if (!secret || !this.totpService.validateSecret(secret)) { + throw new TOTPError('Invalid TOTP secret format'); + } + + // Check if TOTP configuration already exists + const existingConfig = this.totpService.getStoredConfig(); + if (existingConfig) { + const confirm = await cliux.inquire({ + type: 'confirm', + name: 'confirm', + message: 'TOTP configuration already exists. Do you want to overwrite it?', + }); + + if (!confirm) { + cliux.print('Operation cancelled'); + return; + } + } + + // Encrypt and store the secret + try { + const encryptedSecret = this.totpService.encryptSecret(secret); + this.totpService.storeConfig({ secret: encryptedSecret }); + cliux.success('TOTP secret has been stored successfully'); + } catch (error) { + if (error instanceof TOTPError) { + throw error; + } + throw new TOTPError('Failed to store TOTP secret'); + } + } catch (error) { + if (error instanceof TOTPError) { + cliux.error(error.message); + } else { + cliux.error('Failed to store TOTP secret'); + } + throw error; + } + } +} \ No newline at end of file diff --git a/packages/contentstack-config/src/commands/config/totp/remove.ts b/packages/contentstack-config/src/commands/config/totp/remove.ts new file mode 100644 index 0000000000..6cbfa35ddf --- /dev/null +++ b/packages/contentstack-config/src/commands/config/totp/remove.ts @@ -0,0 +1,92 @@ +import { cliux } from '@contentstack/cli-utilities'; +import { BaseCommand } from '../../../base-command'; +import { TOTPService } from '../../../services/totp/totp.service'; +import { TOTPError } from '../../../services/totp/types'; +import { Flags } from '@oclif/core'; + +export default class RemoveTOTPCommand extends BaseCommand { + static readonly description = 'Remove stored TOTP secret'; + + static readonly examples = [ + '$ csdx config:totp:remove', + '$ csdx config:totp:remove -y', + ]; + + static readonly flags = { + yes: Flags.boolean({ + char: 'y', + description: 'Skip confirmation prompt', + default: false, + }), + }; + + private readonly totpService: TOTPService; + + constructor(argv: string[], config: any) { + super(argv, config); + this.totpService = new TOTPService(); + } + + async run(): Promise { + try { + const { flags } = await this.parse(RemoveTOTPCommand); + + // Check if TOTP configuration exists + let config; + try { + config = this.totpService.getStoredConfig(); + if (!config?.secret) { + throw new TOTPError('Failed to remove TOTP configuration'); + } + } catch (error) { + if (error instanceof TOTPError) { + throw error; + } + throw new TOTPError('Failed to remove TOTP configuration'); + } + + // Verify the configuration is valid + let isCorrupted = false; + try { + this.totpService.decryptSecret(config.secret); + } catch (error) { + this.logger.debug('Failed to decrypt TOTP secret', { error }); + isCorrupted = true; + } + + // Confirm removal unless -y flag is used + if (!flags.yes) { + let message = 'Are you sure you want to remove the stored TOTP secret?'; + if (isCorrupted) { + message = 'Configuration appears corrupted. Do you want to remove it anyway?'; + } + + const confirm = await cliux.inquire({ + type: 'confirm', + name: 'confirm', + message, + }); + + if (!confirm) { + cliux.print('Operation cancelled'); + return; + } + } + + try { + this.totpService.removeConfig(); + cliux.success('TOTP secret has been removed successfully'); + } catch (error) { + this.logger.error('Failed to remove TOTP configuration', { error }); + throw new TOTPError('Failed to remove TOTP configuration'); + } + } catch (error) { + if (error instanceof TOTPError) { + cliux.error(error.message); + } else { + cliux.error('Failed to remove TOTP configuration'); + } + throw error; + } + } +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp-service.interface.ts b/packages/contentstack-config/src/services/totp/totp-service.interface.ts new file mode 100644 index 0000000000..a780e556c2 --- /dev/null +++ b/packages/contentstack-config/src/services/totp/totp-service.interface.ts @@ -0,0 +1,12 @@ +import { TOTPConfig } from './totp.types'; + +export interface ITOTPService { + validateSecret(secret: string): boolean; + encryptSecret(secret: string): string; + decryptSecret(encryptedSecret: string): string; + getStoredConfig(): TOTPConfig | null; + storeConfig(config: TOTPConfig): void; + removeConfig(): void; + generateTOTP(secret: string): string; + verifyTOTP(secret: string, token: string): boolean; +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp.service.ts b/packages/contentstack-config/src/services/totp/totp.service.ts new file mode 100644 index 0000000000..f649302273 --- /dev/null +++ b/packages/contentstack-config/src/services/totp/totp.service.ts @@ -0,0 +1,118 @@ +import { configHandler, NodeCrypto, log } from '@contentstack/cli-utilities'; +import { authenticator } from 'otplib'; +import { ITOTPService, TOTPConfig, TOTPError } from './types'; + +export class TOTPService implements ITOTPService { + private readonly encrypter: NodeCrypto; + private readonly logger = log; + + constructor() { + this.encrypter = new NodeCrypto(); + } + + validateSecret(secret: string): boolean { + if (!secret || typeof secret !== 'string') { + return false; + } + + // Check for leading/trailing spaces in original input + if (secret.trim() !== secret) { + return false; + } + + // Base32 validation (A-Z, 2-7) + const base32Regex = /^[A-Z2-7]+=*$/; + const normalizedSecret = secret.trim().toUpperCase(); + + // Check minimum length (16 characters) and valid Base32 format + if (normalizedSecret.length < 16 || !base32Regex.test(normalizedSecret)) { + return false; + } + + // Check for invalid padding + const paddingRegex = /=+$/; + const paddingMatch = paddingRegex.exec(normalizedSecret); + if (paddingMatch) { + const paddingLength = paddingMatch[0].length; + const unpadded = normalizedSecret.slice(0, -paddingLength); + if (paddingLength > 6 || unpadded.length % 8 !== 0) { + return false; + } + } else if (normalizedSecret.length % 8 !== 0) { + // If no padding, length must be a multiple of 8 + return false; + } + + try { + const token = authenticator.generate(normalizedSecret); + return authenticator.check(token, normalizedSecret); + } catch (error) { + this.logger.debug('Secret validation failed', { error }); + return false; + } + } + + encryptSecret(secret: string): string { + try { + return this.encrypter.encrypt(secret.trim().toUpperCase()); + } catch (error) { + this.logger.error('Secret encryption failed', { error }); + throw new TOTPError('Failed to encrypt TOTP secret'); + } + } + + decryptSecret(encryptedSecret: string): string { + try { + return this.encrypter.decrypt(encryptedSecret); + } catch (error) { + this.logger.error('Secret decryption failed', { error }); + throw new TOTPError('Failed to decrypt TOTP secret'); + } + } + + getStoredConfig(): TOTPConfig | null { + try { + const config = configHandler.get('totp'); + return config?.secret ? config as TOTPConfig : null; + } catch (error) { + this.logger.error('Failed to read TOTP config', { error }); + throw new TOTPError('Failed to read TOTP configuration'); + } + } + + storeConfig(config: TOTPConfig): void { + try { + configHandler.set('totp', config); + } catch (error) { + this.logger.error('Failed to store TOTP config', { error }); + throw new TOTPError('Failed to store TOTP configuration'); + } + } + + removeConfig(): void { + try { + configHandler.delete('totp'); + } catch (error) { + this.logger.error('Failed to remove TOTP config', { error }); + throw new TOTPError('Failed to remove TOTP configuration'); + } + } + + generateTOTP(secret: string): string { + try { + return authenticator.generate(secret.trim().toUpperCase()); + } catch (error) { + this.logger.error('Failed to generate TOTP code', { error }); + throw new TOTPError('Failed to generate TOTP code'); + } + } + + verifyTOTP(secret: string, token: string): boolean { + try { + return authenticator.check(token, secret.trim().toUpperCase()); + } catch (error) { + this.logger.debug('TOTP verification failed', { error }); + return false; + } + } +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp.types.ts b/packages/contentstack-config/src/services/totp/totp.types.ts new file mode 100644 index 0000000000..fd1ead9e8d --- /dev/null +++ b/packages/contentstack-config/src/services/totp/totp.types.ts @@ -0,0 +1,16 @@ +export interface TOTPConfig { + secret: string; +} + +export interface TOTPValidationResult { + isValid: boolean; + error?: string; +} + +export class TOTPError extends Error { + constructor(message: string) { + super(message); + this.name = 'TOTPError'; + Object.setPrototypeOf(this, TOTPError.prototype); + } +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/types.ts b/packages/contentstack-config/src/services/totp/types.ts new file mode 100644 index 0000000000..af028a0ac8 --- /dev/null +++ b/packages/contentstack-config/src/services/totp/types.ts @@ -0,0 +1,26 @@ +export interface TOTPConfig { + secret: string; +} + +export interface TOTPValidationResult { + isValid: boolean; + error?: string; +} + +export class TOTPError extends Error { + constructor(message: string) { + super(message); + this.name = 'TOTPError'; + } +} + +export interface ITOTPService { + validateSecret(secret: string): boolean; + encryptSecret(secret: string): string; + decryptSecret(encryptedSecret: string): string; + getStoredConfig(): TOTPConfig | null; + storeConfig(config: TOTPConfig): void; + removeConfig(): void; + generateTOTP(secret: string): string; + verifyTOTP(secret: string, token: string): boolean; +} \ No newline at end of file diff --git a/packages/contentstack-config/test/unit/commands/totp.test.ts b/packages/contentstack-config/test/unit/commands/totp.test.ts new file mode 100644 index 0000000000..ebc087407e --- /dev/null +++ b/packages/contentstack-config/test/unit/commands/totp.test.ts @@ -0,0 +1,353 @@ +import { expect } from 'chai'; +import { configHandler, cliux, NodeCrypto } from '@contentstack/cli-utilities'; +import { authenticator } from 'otplib'; +import * as sinon from 'sinon'; +import TotpAddCommand from '../../../src/commands/config/totp/add'; +import TotpRemoveCommand from '../../../src/commands/config/totp/remove'; + +describe('TOTP Commands', function () { + let inquireStub: sinon.SinonStub; + let configStub: { + get: sinon.SinonStub; + set: sinon.SinonStub; + delete: sinon.SinonStub; + }; + let encrypterStub: sinon.SinonStubbedInstance; + let authenticatorStub: { + generate: sinon.SinonStub; + check: sinon.SinonStub; + }; + + beforeEach(function () { + inquireStub = sinon.stub(cliux, 'inquire'); + configStub = { + get: sinon.stub(configHandler, 'get'), + set: sinon.stub(configHandler, 'set'), + delete: sinon.stub(configHandler, 'delete') + }; + encrypterStub = sinon.stub(NodeCrypto.prototype); + authenticatorStub = { + generate: sinon.stub(authenticator, 'generate'), + check: sinon.stub(authenticator, 'check') + }; + }); + + afterEach(function () { + sinon.restore(); + }); + + describe('config:totp:add', function () { + const validSecret = 'JBSWY3DPEHPK3PXP'; // Example valid Base32 secret + const encryptedSecret = 'encrypted-secret|iv'; + const validSecrets = [ + 'JBSWY3DPEHPK3PXP', // Standard length + 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', // Double length + 'JBSWY3DPEHPK3PXP====', // With padding + 'AAAAAAAAAAAAAAAA', // Minimum length + ]; + const invalidSecrets = [ + 'invalid!@#', // Invalid characters + 'JBSW', // Too short + '12345678', // Numbers only + 'abcdefgh', // Lowercase + 'JBSWY3DPEHPK3PXP=', // Invalid padding + '', // Empty string + ' JBSWY3DPEHPK3PXP', // Leading space + 'JBSWY3DPEHPK3PXP ', // Trailing space + ]; + + it('should add TOTP configuration successfully', async function () { + configStub.get.returns(null); + encrypterStub.encrypt.returns(encryptedSecret); + authenticatorStub.generate.returns('123456'); + authenticatorStub.check.returns(true); + inquireStub.returns(Promise.resolve(true)); + + await TotpAddCommand.run(['--secret', validSecret]); + expect(configStub.set.calledOnce).to.be.true; + expect(configStub.set.firstCall.args[0]).to.equal('totp'); + expect(configStub.set.firstCall.args[1]).to.deep.include({ + secret: encryptedSecret, + }); + }); + + it('should cancel when user declines to overwrite existing config', async function () { + configStub.get.returns({ secret: 'existing-secret' }); + inquireStub.returns(Promise.resolve(false)); + authenticatorStub.check.returns(true); + authenticatorStub.generate.returns('123456'); + + await TotpAddCommand.run(['--secret', validSecret]); + expect(configStub.set.called).to.be.false; + expect(inquireStub.calledOnce).to.be.true; + expect(inquireStub.calledOnce).to.be.true; + }); + + it('should fail with invalid secret format', async function () { + try { + await TotpAddCommand.run(['--secret', 'invalid!@#']); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Invalid TOTP secret format'); + } + }); + + it('should fail when secret cannot generate valid codes', async function () { + authenticatorStub.check.returns(false); + try { + await TotpAddCommand.run(['--secret', validSecret]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Invalid TOTP secret format'); + } + }); + + it('should fail when encryption fails', async function () { + configStub.get.returns(null); + authenticatorStub.check.returns(true); + authenticatorStub.generate.returns('123456'); + encrypterStub.encrypt.throws(new Error('Encryption failed')); + + try { + await TotpAddCommand.run(['--secret', validSecret]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to encrypt TOTP secret'); + } + }); + + // Test all valid secret formats + validSecrets.forEach((secret) => { + it(`should accept valid secret format: ${secret}`, async function () { + configStub.get.returns(null); + authenticatorStub.check.returns(true); + authenticatorStub.generate.returns('123456'); + encrypterStub.encrypt.returns(encryptedSecret); + + await TotpAddCommand.run(['--secret', secret]); + expect(configStub.set.calledOnce).to.be.true; + }); + }); + + // Test all invalid secret formats + invalidSecrets.forEach((secret) => { + it(`should reject invalid secret format: ${secret}`, async function () { + try { + await TotpAddCommand.run(['--secret', secret]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Invalid TOTP secret format'); + } + }); + }); + + it('should handle missing secret flag', async function () { + try { + await TotpAddCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Invalid TOTP secret format'); + } + }); + + it('should handle empty secret value', async function () { + try { + await TotpAddCommand.run(['--secret', '']); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Invalid TOTP secret format'); + } + }); + + it('should verify generated code matches authenticator output', async function () { + configStub.get.returns(null); + const testCode = '123456'; + authenticatorStub.check.returns(true); + authenticatorStub.generate.returns(testCode); + encrypterStub.encrypt.returns(encryptedSecret); + + await TotpAddCommand.run(['--secret', validSecret]); + expect(authenticatorStub.generate.calledWith(validSecret)).to.be.true; + expect(configStub.set.calledOnce).to.be.true; + }); + + it('should handle decryption failure when overwriting existing config', async function () { + configStub.get.returns({ secret: 'existing-encrypted-secret' }); + encrypterStub.decrypt.throws(new Error('Decryption failed')); + authenticatorStub.check.returns(true); + authenticatorStub.generate.returns('123456'); + inquireStub.returns(Promise.resolve(true)); + + await TotpAddCommand.run(['--secret', validSecret]); + expect(configStub.set.calledOnce).to.be.true; + }); + }); + + describe('config:totp:remove', function () { + const encryptedSecret = 'encrypted-secret|iv'; + const decryptedSecret = 'JBSWY3DPEHPK3PXP'; + + it('should remove TOTP configuration successfully', async function () { + configStub.get.returns({ secret: encryptedSecret }); + encrypterStub.decrypt.returns(decryptedSecret); + inquireStub.returns(Promise.resolve(true)); + + await TotpRemoveCommand.run([]); + expect(configStub.delete.called).to.be.true; + expect(configStub.delete.firstCall.args[0]).to.equal('totp'); + }); + + it('should fail when no configuration exists', async function () { + configStub.get.returns(null); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.equal('Failed to remove TOTP configuration'); + expect(configStub.delete.called).to.be.false; + } + }); + + it('should handle corrupted configuration gracefully', async function () { + configStub.get.returns({ secret: encryptedSecret }); + encrypterStub.decrypt.throws(new Error('Decryption failed')); + inquireStub.returns(Promise.resolve(false)); + + await TotpRemoveCommand.run([]); + expect(configStub.delete.called).to.be.false; + }); + + it('should cancel removal when user declines', async function () { + configStub.get.returns({ secret: encryptedSecret }); + encrypterStub.decrypt.returns(decryptedSecret); + inquireStub.returns(Promise.resolve(false)); + + await TotpRemoveCommand.run([]); + expect(configStub.delete.called).to.be.false; + }); + + it('should remove configuration without confirmation when forced', async function () { + configStub.get.returns({ secret: encryptedSecret }); + await TotpRemoveCommand.run(['-y']); + expect(configStub.delete.called).to.be.true; + expect(configStub.delete.firstCall.args[0]).to.equal('totp'); + }); + + it('should handle deletion errors', async function () { + configStub.get.returns({ secret: encryptedSecret }); + configStub.delete.throws(new Error('Delete failed')); + try { + await TotpRemoveCommand.run(['-y']); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to remove TOTP configuration'); + } + }); + + it('should handle invalid config format', async function () { + configStub.get.returns({ invalid: 'config' }); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to remove TOTP configuration'); + } + }); + + it('should handle null secret in config', async function () { + configStub.get.returns({ secret: null }); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to remove TOTP configuration'); + } + }); + + it('should handle undefined secret in config', async function () { + configStub.get.returns({ secret: undefined }); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to remove TOTP configuration'); + } + }); + + it('should handle empty string secret in config', async function () { + configStub.get.returns({ secret: '' }); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to remove TOTP configuration'); + } + }); + + it('should handle multiple confirmation prompts correctly', async function () { + configStub.get.returns({ secret: encryptedSecret }); + encrypterStub.decrypt.throws(new Error('Decryption failed')); + + // First prompt: "Configuration appears corrupted" + inquireStub.onFirstCall().returns(Promise.resolve(true)); + // Second prompt: "Are you sure?" + inquireStub.onSecondCall().returns(Promise.resolve(true)); + + await TotpRemoveCommand.run([]); + expect(configStub.delete.called).to.be.true; + }); + + it('should handle force flag with corrupted config', async function () { + configStub.get.returns({ secret: encryptedSecret }); + encrypterStub.decrypt.throws(new Error('Decryption failed')); + + await TotpRemoveCommand.run(['-y']); + expect(configStub.delete.called).to.be.true; + }); + + it('should handle config.get throwing an error', async function () { + configStub.get.throws(new Error('Failed to read config')); + try { + await TotpRemoveCommand.run([]); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Failed to read TOTP configuration'); + } + }); + + it('should handle multiple decryption attempts', async function () { + configStub.get.returns({ secret: encryptedSecret }); + // First decrypt attempt fails + encrypterStub.decrypt.onFirstCall().throws(new Error('Decryption failed')); + // Second decrypt attempt succeeds + encrypterStub.decrypt.onSecondCall().returns(decryptedSecret); + inquireStub.returns(Promise.resolve(true)); + + await TotpRemoveCommand.run([]); + expect(configStub.delete.called).to.be.true; + }); + + it('should handle invalid flags', async function () { + try { + await TotpRemoveCommand.run(['--invalid-flag']); + expect.fail('Should have thrown an error'); + } catch (error: unknown) { + const err = error as Error; + expect(err.message).to.contain('Nonexistent flag: --invalid-flag'); + } + }); + }); +}); \ No newline at end of file diff --git a/packages/contentstack-config/test/unit/services/totp.service.test.ts b/packages/contentstack-config/test/unit/services/totp.service.test.ts new file mode 100644 index 0000000000..6341f6af25 --- /dev/null +++ b/packages/contentstack-config/test/unit/services/totp.service.test.ts @@ -0,0 +1,261 @@ +import { expect } from 'chai'; +import { configHandler, NodeCrypto } from '@contentstack/cli-utilities'; +import { authenticator } from 'otplib'; +import * as sinon from 'sinon'; +import { TOTPService } from '../../../src/services/totp/totp.service'; +import { TOTPError } from '../../../src/services/totp/totp.types'; + +describe('TOTP Service', () => { + let totpService: TOTPService; + let configStub: { + get: sinon.SinonStub; + set: sinon.SinonStub; + delete: sinon.SinonStub; + }; + let encrypterStub: sinon.SinonStubbedInstance; + let authenticatorStub: { + generate: sinon.SinonStub; + check: sinon.SinonStub; + }; + + beforeEach(() => { + totpService = new TOTPService(); + configStub = { + get: sinon.stub(configHandler, 'get'), + set: sinon.stub(configHandler, 'set'), + delete: sinon.stub(configHandler, 'delete') + }; + encrypterStub = sinon.stub(NodeCrypto.prototype); + authenticatorStub = { + generate: sinon.stub(authenticator, 'generate'), + check: sinon.stub(authenticator, 'check') + }; + }); + + afterEach(() => { + sinon.restore(); + }); + + describe('validateSecret', () => { + const validSecrets = [ + 'JBSWY3DPEHPK3PXP', // Standard length + 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', // Double length + 'JBSWY3DPEHPK3PXP====', // With padding + 'AAAAAAAAAAAAAAAA', // Minimum length + ]; + + const invalidSecrets = [ + 'invalid!@#', // Invalid characters + 'JBSW', // Too short + '12345678', // Numbers only + 'abcdefgh', // Lowercase + 'JBSWY3DPEHPK3PXP=', // Invalid padding + '', // Empty string + ' JBSWY3DPEHPK3PXP', // Leading space + 'JBSWY3DPEHPK3PXP ', // Trailing space + ]; + + validSecrets.forEach(secret => { + it(`should validate correct secret format: ${secret}`, () => { + authenticatorStub.generate.returns('123456'); + authenticatorStub.check.returns(true); + expect(totpService.validateSecret(secret)).to.be.true; + }); + }); + + invalidSecrets.forEach(secret => { + it(`should reject invalid secret format: ${secret}`, () => { + authenticatorStub.generate.returns('123456'); + authenticatorStub.check.returns(false); + expect(totpService.validateSecret(secret)).to.be.false; + }); + }); + }); + + describe('encryptSecret', () => { + it('should encrypt secret successfully', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const encrypted = 'encrypted-secret|iv'; + encrypterStub.encrypt.returns(encrypted); + + expect(totpService.encryptSecret(secret)).to.equal(encrypted); + expect(encrypterStub.encrypt.calledWith(secret)).to.be.true; + }); + + it('should handle encryption errors', () => { + encrypterStub.encrypt.throws(new Error('Encryption failed')); + let error: unknown; + try { + totpService.encryptSecret('JBSWY3DPEHPK3PXP'); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to encrypt TOTP secret'); + }); + + it('should normalize secret before encryption', () => { + const secret = ' jbswy3dpehpk3pxp '; + encrypterStub.encrypt.returns('encrypted'); + totpService.encryptSecret(secret); + expect(encrypterStub.encrypt.calledWith('JBSWY3DPEHPK3PXP')).to.be.true; + }); + }); + + describe('decryptSecret', () => { + it('should decrypt secret successfully', () => { + const encrypted = 'encrypted-secret|iv'; + const decrypted = 'JBSWY3DPEHPK3PXP'; + encrypterStub.decrypt.returns(decrypted); + + expect(totpService.decryptSecret(encrypted)).to.equal(decrypted); + expect(encrypterStub.decrypt.calledWith(encrypted)).to.be.true; + }); + + it('should handle decryption errors', () => { + encrypterStub.decrypt.throws(new Error('Decryption failed')); + let error: unknown; + try { + totpService.decryptSecret('encrypted-secret|iv'); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to decrypt TOTP secret'); + }); + }); + + describe('getStoredConfig', () => { + it('should return null when no config exists', () => { + configStub.get.returns(null); + expect(totpService.getStoredConfig()).to.be.null; + }); + + it('should return null when config has no secret', () => { + configStub.get.returns({}); + expect(totpService.getStoredConfig()).to.be.null; + }); + + it('should return config when valid', () => { + const config = { secret: 'encrypted-secret|iv' }; + configStub.get.returns(config); + expect(totpService.getStoredConfig()).to.deep.equal(config); + }); + + it('should handle config read errors', () => { + configStub.get.throws(new Error('Read failed')); + let error: unknown; + try { + totpService.getStoredConfig(); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to read TOTP configuration'); + }); + }); + + describe('storeConfig', () => { + it('should store config successfully', () => { + const config = { secret: 'encrypted-secret|iv' }; + totpService.storeConfig(config); + expect(configStub.set.calledWith('totp', config)).to.be.true; + }); + + it('should handle storage errors', () => { + configStub.set.throws(new Error('Storage failed')); + let error: unknown; + try { + totpService.storeConfig({ secret: 'encrypted' }); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to store TOTP configuration'); + }); + }); + + describe('removeConfig', () => { + it('should remove config successfully', () => { + totpService.removeConfig(); + expect(configStub.delete.calledWith('totp')).to.be.true; + }); + + it('should handle removal errors', () => { + configStub.delete.throws(new Error('Removal failed')); + let error: unknown; + try { + totpService.removeConfig(); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to remove TOTP configuration'); + }); + }); + + describe('generateTOTP', () => { + it('should generate TOTP code successfully', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const code = '123456'; + authenticatorStub.generate.returns(code); + + expect(totpService.generateTOTP(secret)).to.equal(code); + expect(authenticatorStub.generate.calledWith(secret)).to.be.true; + }); + + it('should handle generation errors', () => { + authenticatorStub.generate.throws(new Error('Generation failed')); + let error: unknown; + try { + totpService.generateTOTP('JBSWY3DPEHPK3PXP'); + expect.fail('Should have thrown an error'); + } catch (err) { + error = err; + } + expect(error).to.be.an('error').with.property('name', 'TOTPError'); + expect((error as TOTPError).message).to.equal('Failed to generate TOTP code'); + }); + + it('should normalize secret before generation', () => { + const secret = ' jbswy3dpehpk3pxp '; + authenticatorStub.generate.returns('123456'); + totpService.generateTOTP(secret); + expect(authenticatorStub.generate.calledWith('JBSWY3DPEHPK3PXP')).to.be.true; + }); + }); + + describe('verifyTOTP', () => { + it('should verify TOTP code successfully', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const token = '123456'; + authenticatorStub.check.returns(true); + + expect(totpService.verifyTOTP(secret, token)).to.be.true; + expect(authenticatorStub.check.calledWith(token, secret)).to.be.true; + }); + + it('should return false for invalid code', () => { + authenticatorStub.check.returns(false); + expect(totpService.verifyTOTP('JBSWY3DPEHPK3PXP', '123456')).to.be.false; + }); + + it('should handle verification errors gracefully', () => { + authenticatorStub.check.throws(new Error('Verification failed')); + expect(totpService.verifyTOTP('JBSWY3DPEHPK3PXP', '123456')).to.be.false; + }); + + it('should normalize secret before verification', () => { + const secret = ' jbswy3dpehpk3pxp '; + const token = '123456'; + authenticatorStub.check.returns(true); + totpService.verifyTOTP(secret, token); + expect(authenticatorStub.check.calledWith(token, 'JBSWY3DPEHPK3PXP')).to.be.true; + }); + }); +}); \ No newline at end of file diff --git a/packages/contentstack-export/package.json b/packages/contentstack-export/package.json index 0888cf0dba..6edf4a52dc 100644 --- a/packages/contentstack-export/package.json +++ b/packages/contentstack-export/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@contentstack/cli-auth": "~1.6.0", - "@contentstack/cli-config": "~1.12.1", + "@contentstack/cli-config": "~1.16.0", "@contentstack/cli-dev-dependencies": "~1.3.1", "@oclif/plugin-help": "^6.2.28", "@oclif/test": "^4.1.13", diff --git a/packages/contentstack/package.json b/packages/contentstack/package.json index 8e37b7c4fd..d332f5d9e8 100755 --- a/packages/contentstack/package.json +++ b/packages/contentstack/package.json @@ -35,7 +35,7 @@ "@contentstack/cli-cm-migrate-rte": "~1.6.0", "@contentstack/cli-cm-seed": "~1.12.0", "@contentstack/cli-command": "~1.6.0", - "@contentstack/cli-config": "~1.15.0", + "@contentstack/cli-config": "~1.16.0", "@contentstack/cli-launch": "^1.9.2", "@contentstack/cli-migration": "~1.8.0", "@contentstack/cli-utilities": "~1.13.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38b6bfd493..83c17cf49a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,7 +27,7 @@ importers: '@contentstack/cli-cm-migrate-rte': ~1.6.0 '@contentstack/cli-cm-seed': ~1.12.0 '@contentstack/cli-command': ~1.6.0 - '@contentstack/cli-config': ~1.15.0 + '@contentstack/cli-config': ~1.16.0 '@contentstack/cli-launch': ^1.9.2 '@contentstack/cli-migration': ~1.8.0 '@contentstack/cli-utilities': ~1.13.1 @@ -94,7 +94,7 @@ importers: '@contentstack/management': 1.22.0_debug@4.4.1 '@oclif/core': 4.5.2 '@oclif/plugin-help': 6.2.32 - '@oclif/plugin-not-found': 3.2.63_@types+node@14.18.63 + '@oclif/plugin-not-found': 3.2.64_@types+node@14.18.63 '@oclif/plugin-plugins': 5.4.46 chalk: 4.1.2 debug: 4.4.1 @@ -118,17 +118,17 @@ importers: '@types/sinon': 10.0.20 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji globby: 10.0.2 mocha: 10.8.2 nock: 13.5.6 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 rimraf: 5.0.10 shelljs: 0.10.0 sinon: 19.0.5 - tmp: 0.2.4 + tmp: 0.2.5 ts-node: 10.9.2_ogreqof3k35xezedraj6pnd45y tslib: 2.8.1 typescript: 4.9.5 @@ -180,18 +180,18 @@ importers: '@types/chai': 4.3.20 '@types/fs-extra': 11.0.4 '@types/mocha': 10.0.10 - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/uuid': 9.0.8 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_owjsyeuugtyevmmlm2yzh3xodu + eslint-config-oclif: 6.0.94_owjsyeuugtyevmmlm2yzh3xodu eslint-config-oclif-typescript: 3.1.14_owjsyeuugtyevmmlm2yzh3xodu mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@20.19.9 + oclif: 4.22.9_@types+node@20.19.10 shx: 0.4.0 sinon: 19.0.5 - ts-node: 10.9.2_wvtqtvwwomupdcqiiypwcpdbmi + ts-node: 10.9.2_7bni2lgzlmvcyelgh6mamlr2tu typescript: 5.9.2 packages/contentstack-auth: @@ -240,7 +240,7 @@ importers: eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 sinon: 19.0.5 ts-node: 10.9.2_ogreqof3k35xezedraj6pnd45y typescript: 4.9.5 @@ -287,12 +287,12 @@ importers: '@types/tar': 6.1.13 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 - tmp: 0.2.4 + oclif: 4.22.9_@types+node@14.18.63 + tmp: 0.2.5 ts-node: 8.10.2_typescript@4.9.5 typescript: 4.9.5 @@ -333,10 +333,10 @@ importers: dotenv: 16.6.1 dotenv-expand: 9.0.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 sinon: 19.0.5 ts-node: 10.9.2_typescript@4.9.5 typescript: 4.9.5 @@ -373,10 +373,10 @@ importers: '@oclif/test': 4.1.13_@oclif+core@4.5.2 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_eslint@8.57.1 + eslint-config-oclif: 6.0.94_eslint@8.57.1 mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 packages/contentstack-clone: specifiers: @@ -423,10 +423,10 @@ importers: '@oclif/test': 4.1.13_@oclif+core@4.5.2 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_eslint@8.57.1 + eslint-config-oclif: 6.0.94_eslint@8.57.1 mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 sinon: 19.0.5 packages/contentstack-command: @@ -457,7 +457,7 @@ importers: '@types/mocha': 8.2.3 '@types/node': 14.18.63 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 @@ -500,11 +500,11 @@ importers: '@types/sinon': 10.0.20 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 sinon: 19.0.5 ts-node: 10.9.2_ogreqof3k35xezedraj6pnd45y typescript: 4.9.5 @@ -538,7 +538,7 @@ importers: specifiers: '@contentstack/cli-auth': ~1.6.0 '@contentstack/cli-command': ~1.6.0 - '@contentstack/cli-config': ~1.12.1 + '@contentstack/cli-config': ~1.16.0 '@contentstack/cli-dev-dependencies': ~1.3.1 '@contentstack/cli-utilities': ~1.13.1 '@contentstack/cli-variants': ~1.3.0 @@ -584,7 +584,7 @@ importers: winston: 3.17.0 devDependencies: '@contentstack/cli-auth': link:../contentstack-auth - '@contentstack/cli-config': 1.12.1 + '@contentstack/cli-config': link:../contentstack-config '@contentstack/cli-dev-dependencies': link:../contentstack-dev-dependencies '@oclif/plugin-help': 6.2.32 '@oclif/test': 4.1.13_@oclif+core@4.5.2 @@ -594,10 +594,10 @@ importers: dotenv: 16.6.1 dotenv-expand: 9.0.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 ts-node: 10.9.2_typescript@4.9.5 typescript: 4.9.5 @@ -637,10 +637,10 @@ importers: chai: 4.5.0 debug: 4.4.1 eslint: 7.32.0 - eslint-config-oclif: 6.0.90_eslint@7.32.0 + eslint-config-oclif: 6.0.94_eslint@7.32.0 mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 packages/contentstack-import: specifiers: @@ -710,10 +710,10 @@ importers: '@types/uuid': 9.0.8 '@typescript-eslint/eslint-plugin': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 ts-node: 10.9.2_ogreqof3k35xezedraj6pnd45y typescript: 4.9.5 @@ -775,10 +775,10 @@ importers: '@typescript-eslint/eslint-plugin': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 proxyquire: 2.1.3 ts-node: 10.9.2_ogreqof3k35xezedraj6pnd45y tsx: 4.20.3 @@ -824,10 +824,10 @@ importers: '@oclif/test': 4.1.13_@oclif+core@4.5.2 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_eslint@8.57.1 + eslint-config-oclif: 6.0.94_eslint@8.57.1 mocha: 10.8.2 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 packages/contentstack-migration: specifiers: @@ -866,11 +866,11 @@ importers: '@oclif/test': 4.1.13_@oclif+core@4.5.2 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_eslint@8.57.1 + eslint-config-oclif: 6.0.94_eslint@8.57.1 jsdoc-to-markdown: 8.0.3 nock: 13.5.6 nyc: 15.1.0 - oclif: 4.22.6 + oclif: 4.22.9 packages/contentstack-seed: specifiers: @@ -905,7 +905,7 @@ importers: inquirer: 8.2.6 mkdirp: 1.0.4 tar: 6.2.1 - tmp: 0.2.4 + tmp: 0.2.5 devDependencies: '@types/inquirer': 9.0.9 '@types/jest': 26.0.24 @@ -915,10 +915,10 @@ importers: '@types/tmp': 0.2.6 axios: 1.11.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji jest: 29.7.0_gmerzvnqkqd6hvbwzqmybfpwqi - oclif: 4.22.6_@types+node@14.18.63 + oclif: 4.22.9_@types+node@14.18.63 ts-jest: 29.4.1_67xnt3v64q2pgz6kguni4h37hu ts-node: 8.10.2_typescript@4.9.5 typescript: 4.9.5 @@ -1011,7 +1011,7 @@ importers: '@types/traverse': 0.6.37 chai: 4.5.0 eslint: 8.57.1 - eslint-config-oclif: 6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-config-oclif: 6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif-typescript: 3.1.14_avq3eyf5kaj6ssrwo7fvkrwnji fancy-test: 2.0.42 mocha: 10.8.2 @@ -1045,10 +1045,10 @@ importers: devDependencies: '@contentstack/cli-dev-dependencies': link:../contentstack-dev-dependencies '@oclif/test': 4.1.13_@oclif+core@4.5.2 - '@types/node': 20.19.9 + '@types/node': 20.19.10 mocha: 10.8.2 nyc: 15.1.0 - ts-node: 10.9.2_wvtqtvwwomupdcqiiypwcpdbmi + ts-node: 10.9.2_7bni2lgzlmvcyelgh6mamlr2tu typescript: 5.9.2 packages: @@ -1160,23 +1160,23 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/client-cloudfront/3.863.0: - resolution: {integrity: sha512-04ME3EqDtWvV2nKl9qlk2TqjDwJL3sI2ey33sIJCL3d2z3cFIQOOdy9QleCPmYPMqPpENRC0qdKprR0yt2t7fg==} + /@aws-sdk/client-cloudfront/3.864.0: + resolution: {integrity: sha512-DpUrEonVs7I7J+tXjvllVNCg7e9mnQwg8eMWqc7S7/c82SUC+U2Xqe6M5Ey5pWkCghy0GDgnn+iUA43W7H0WKg==} engines: {node: '>=18.0.0'} dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.863.0 - '@aws-sdk/credential-provider-node': 3.863.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.863.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.863.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@aws-sdk/xml-builder': 3.862.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 @@ -1210,31 +1210,31 @@ packages: - aws-crt dev: true - /@aws-sdk/client-s3/3.863.0: - resolution: {integrity: sha512-12iPziQtTolNiWFlN7Bg4jDfh1eOVB0hW6bsP1cI3JVr/IF0pVvPjQ1WEUhjTlOujC/U+JaYjw3iQ7nWKHX6vQ==} + /@aws-sdk/client-s3/3.864.0: + resolution: {integrity: sha512-QGYi9bWliewxumsvbJLLyx9WC0a4DP4F+utygBcq0zwPxaM0xDfBspQvP1dsepi7mW5aAjZmJ2+Xb7X0EhzJ/g==} engines: {node: '>=18.0.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/core': 3.863.0 - '@aws-sdk/credential-provider-node': 3.863.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-bucket-endpoint': 3.862.0 '@aws-sdk/middleware-expect-continue': 3.862.0 - '@aws-sdk/middleware-flexible-checksums': 3.863.0 + '@aws-sdk/middleware-flexible-checksums': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-location-constraint': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-sdk-s3': 3.863.0 + '@aws-sdk/middleware-sdk-s3': 3.864.0 '@aws-sdk/middleware-ssec': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.863.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 - '@aws-sdk/signature-v4-multi-region': 3.863.0 + '@aws-sdk/signature-v4-multi-region': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.863.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@aws-sdk/xml-builder': 3.862.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 @@ -1276,22 +1276,22 @@ packages: - aws-crt dev: true - /@aws-sdk/client-sso/3.863.0: - resolution: {integrity: sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==} + /@aws-sdk/client-sso/3.864.0: + resolution: {integrity: sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==} engines: {node: '>=18.0.0'} dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.863.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.863.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -1322,8 +1322,8 @@ packages: - aws-crt dev: true - /@aws-sdk/core/3.863.0: - resolution: {integrity: sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==} + /@aws-sdk/core/3.864.0: + resolution: {integrity: sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==} engines: {node: '>=18.0.0'} dependencies: '@aws-sdk/types': 3.862.0 @@ -1343,22 +1343,22 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/credential-provider-env/3.863.0: - resolution: {integrity: sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==} + /@aws-sdk/credential-provider-env/3.864.0: + resolution: {integrity: sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/types': 4.3.2 tslib: 2.8.1 dev: true - /@aws-sdk/credential-provider-http/3.863.0: - resolution: {integrity: sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==} + /@aws-sdk/credential-provider-http/3.864.0: + resolution: {integrity: sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/fetch-http-handler': 5.1.1 '@smithy/node-http-handler': 4.1.1 @@ -1370,17 +1370,17 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/credential-provider-ini/3.863.0: - resolution: {integrity: sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==} + /@aws-sdk/credential-provider-ini/3.864.0: + resolution: {integrity: sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 - '@aws-sdk/credential-provider-env': 3.863.0 - '@aws-sdk/credential-provider-http': 3.863.0 - '@aws-sdk/credential-provider-process': 3.863.0 - '@aws-sdk/credential-provider-sso': 3.863.0 - '@aws-sdk/credential-provider-web-identity': 3.863.0 - '@aws-sdk/nested-clients': 3.863.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-env': 3.864.0 + '@aws-sdk/credential-provider-http': 3.864.0 + '@aws-sdk/credential-provider-process': 3.864.0 + '@aws-sdk/credential-provider-sso': 3.864.0 + '@aws-sdk/credential-provider-web-identity': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/credential-provider-imds': 4.0.7 '@smithy/property-provider': 4.0.5 @@ -1391,16 +1391,16 @@ packages: - aws-crt dev: true - /@aws-sdk/credential-provider-node/3.863.0: - resolution: {integrity: sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==} + /@aws-sdk/credential-provider-node/3.864.0: + resolution: {integrity: sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/credential-provider-env': 3.863.0 - '@aws-sdk/credential-provider-http': 3.863.0 - '@aws-sdk/credential-provider-ini': 3.863.0 - '@aws-sdk/credential-provider-process': 3.863.0 - '@aws-sdk/credential-provider-sso': 3.863.0 - '@aws-sdk/credential-provider-web-identity': 3.863.0 + '@aws-sdk/credential-provider-env': 3.864.0 + '@aws-sdk/credential-provider-http': 3.864.0 + '@aws-sdk/credential-provider-ini': 3.864.0 + '@aws-sdk/credential-provider-process': 3.864.0 + '@aws-sdk/credential-provider-sso': 3.864.0 + '@aws-sdk/credential-provider-web-identity': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/credential-provider-imds': 4.0.7 '@smithy/property-provider': 4.0.5 @@ -1411,11 +1411,11 @@ packages: - aws-crt dev: true - /@aws-sdk/credential-provider-process/3.863.0: - resolution: {integrity: sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==} + /@aws-sdk/credential-provider-process/3.864.0: + resolution: {integrity: sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -1423,13 +1423,13 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/credential-provider-sso/3.863.0: - resolution: {integrity: sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==} + /@aws-sdk/credential-provider-sso/3.864.0: + resolution: {integrity: sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/client-sso': 3.863.0 - '@aws-sdk/core': 3.863.0 - '@aws-sdk/token-providers': 3.863.0 + '@aws-sdk/client-sso': 3.864.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/token-providers': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -1439,12 +1439,12 @@ packages: - aws-crt dev: true - /@aws-sdk/credential-provider-web-identity/3.863.0: - resolution: {integrity: sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==} + /@aws-sdk/credential-provider-web-identity/3.864.0: + resolution: {integrity: sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 - '@aws-sdk/nested-clients': 3.863.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/types': 4.3.2 @@ -1476,14 +1476,14 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/middleware-flexible-checksums/3.863.0: - resolution: {integrity: sha512-nZW9Rf4floAuxmPeik1FJ7/LwEnmWjdgoa0ls/x/KpAVM+LCbEBOV1Tcw2+jRpx3UQH4wAnJz18OFsXC+X/FAw==} + /@aws-sdk/middleware-flexible-checksums/3.864.0: + resolution: {integrity: sha512-MvakvzPZi9uyP3YADuIqtk/FAcPFkyYFWVVMf5iFs/rCdk0CUzn02Qf4CSuyhbkS6Y0KrAsMgKR4MgklPU79Wg==} engines: {node: '>=18.0.0'} dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/is-array-buffer': 4.0.0 '@smithy/node-config-provider': 4.1.4 @@ -1533,11 +1533,11 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/middleware-sdk-s3/3.863.0: - resolution: {integrity: sha512-3Ppx5J31DUuaASyzAMYzSUf8y8emCLt1iaU+6yuSV/PwiCzJL5Sspos5xF2F+JErw8p8lNN+7rvHVSNqtgi2Fg==} + /@aws-sdk/middleware-sdk-s3/3.864.0: + resolution: {integrity: sha512-GjYPZ6Xnqo17NnC8NIQyvvdzzO7dm+Ks7gpxD/HsbXPmV2aEfuFveJXneGW9e1BheSKFff6FPDWu8Gaj2Iu1yg==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-arn-parser': 3.804.0 '@smithy/core': 3.8.0 @@ -1562,11 +1562,11 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/middleware-user-agent/3.863.0: - resolution: {integrity: sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==} + /@aws-sdk/middleware-user-agent/3.864.0: + resolution: {integrity: sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@smithy/core': 3.8.0 @@ -1575,22 +1575,22 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/nested-clients/3.863.0: - resolution: {integrity: sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==} + /@aws-sdk/nested-clients/3.864.0: + resolution: {integrity: sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==} engines: {node: '>=18.0.0'} dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.863.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.863.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.863.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -1633,11 +1633,11 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/signature-v4-multi-region/3.863.0: - resolution: {integrity: sha512-YEi1hER4OtVpeVBO9Ts8nYekF8Q9pcr4kzPxrzXHv83i2/jraPgacHlWvNSjdg8kvY+GsevBsirZXZmThkmKBA==} + /@aws-sdk/signature-v4-multi-region/3.864.0: + resolution: {integrity: sha512-w2HIn/WIcUyv1bmyCpRUKHXB5KdFGzyxPkp/YK5g+/FuGdnFFYWGfcO8O+How4jwrZTarBYsAHW9ggoKvwr37w==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/middleware-sdk-s3': 3.863.0 + '@aws-sdk/middleware-sdk-s3': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/protocol-http': 5.1.3 '@smithy/signature-v4': 5.1.3 @@ -1645,12 +1645,12 @@ packages: tslib: 2.8.1 dev: true - /@aws-sdk/token-providers/3.863.0: - resolution: {integrity: sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==} + /@aws-sdk/token-providers/3.864.0: + resolution: {integrity: sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==} engines: {node: '>=18.0.0'} dependencies: - '@aws-sdk/core': 3.863.0 - '@aws-sdk/nested-clients': 3.863.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -1698,12 +1698,12 @@ packages: dependencies: '@aws-sdk/types': 3.862.0 '@smithy/types': 4.3.2 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 dev: true - /@aws-sdk/util-user-agent-node/3.863.0: - resolution: {integrity: sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==} + /@aws-sdk/util-user-agent-node/3.864.0: + resolution: {integrity: sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1711,7 +1711,7 @@ packages: aws-crt: optional: true dependencies: - '@aws-sdk/middleware-user-agent': 3.863.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/node-config-provider': 4.1.4 '@smithy/types': 4.3.2 @@ -1786,7 +1786,7 @@ packages: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -2069,16 +2069,7 @@ packages: /@colors/colors/1.6.0: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - - /@contentstack/cli-command/1.5.1: - resolution: {integrity: sha512-GJHPXH/e4bw2sftpFUGQFao3H0Btp3wEsjyukqOtlFlY3ZjzwqVRGAJTncte2NfkQUjnqlxIxRhJKE645nWSzg==} - engines: {node: '>=14.0.0'} - dependencies: - '@contentstack/cli-utilities': 1.12.1 - contentstack: 3.26.2 - transitivePeerDependencies: - - debug - dev: true + dev: false /@contentstack/cli-command/1.6.0_debug@4.4.1: resolution: {integrity: sha512-PZI0MmXRC05SRr0SJMHxGqTGItyUxt9gwZSJ6O7C7O6pqbwzOzUdEY0YpxgbIAj3/ZTE1ADPIj0xsVlH7yFqKQ==} @@ -2092,17 +2083,6 @@ packages: - debug dev: false - /@contentstack/cli-config/1.12.1: - resolution: {integrity: sha512-sku0ivaF0viI25q7nbIfnwG1ZdGTaylJKcpgol4TQeKsD1qVUFhqqFvS+M6Na42E9cbZEWKICiS3XLJyiDATIQ==} - engines: {node: '>=14.0.0'} - dependencies: - '@contentstack/cli-command': 1.5.1 - '@contentstack/cli-utilities': 1.12.1 - lodash: 4.17.21 - transitivePeerDependencies: - - debug - dev: true - /@contentstack/cli-launch/1.9.3_att4k4ls54ml32bownbhwfsgy4: resolution: {integrity: sha512-sSaZnxHDiFZjbzEFhFDIT9dvW/6rAXSKS8RO4TsoJk/ed2noUN4gVarAmAZt2B7qy7ICoPoXREIVOqi6FbaZqQ==} engines: {node: '>=14.0.0'} @@ -2145,42 +2125,6 @@ packages: - typescript dev: false - /@contentstack/cli-utilities/1.12.1: - resolution: {integrity: sha512-+DNqQxy9ERR53OAeUYSMCazUs9DjazyB6r+ZMIotg6BB6ZdlNt6Qr6XgxEFE/jgBqzZVmPox3hu+xV0KL1DEdg==} - dependencies: - '@contentstack/management': 1.22.0 - '@contentstack/marketplace-sdk': 1.2.9 - '@oclif/core': 4.5.2 - axios: 1.11.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-progress: 3.12.0 - cli-table: 0.3.11 - conf: 10.2.0 - dotenv: 16.6.1 - figures: 3.2.0 - inquirer: 8.2.6 - inquirer-search-checkbox: 1.0.0 - inquirer-search-list: 1.2.6 - js-yaml: 4.1.0 - klona: 2.0.6 - lodash: 4.17.21 - mkdirp: 1.0.4 - open: 8.4.2 - ora: 5.4.1 - papaparse: 5.5.3 - recheck: 4.4.5 - rxjs: 6.6.7 - traverse: 0.6.11 - tty-table: 4.2.3 - unique-string: 2.0.0 - uuid: 9.0.1 - winston: 3.17.0 - xdg-basedir: 4.0.0 - transitivePeerDependencies: - - debug - dev: true - /@contentstack/cli-utilities/1.13.1_debug@4.4.1: resolution: {integrity: sha512-ybG+6AycUbVoDhIE9WF+aZkAlv4XA40E1X2B3etbgLk5oOZKRRXaZ3oZjToqF94sd2jFxu96sDDBs50DJcwaYA==} dependencies: @@ -2248,6 +2192,7 @@ packages: stream-browserify: 3.0.0 transitivePeerDependencies: - debug + dev: false /@contentstack/management/1.22.0_debug@4.4.1: resolution: {integrity: sha512-TmwCKhdZnmGpcTuXn5JWbvMqbu0PqEn8Z/oEUlCelAxpo9vSC2qS4aejJtLTqC3Gii/7cJwjqF1BoFpwSO5J9A==} @@ -2271,6 +2216,7 @@ packages: axios: 1.11.0 transitivePeerDependencies: - debug + dev: false /@contentstack/marketplace-sdk/1.2.9_debug@4.4.1: resolution: {integrity: sha512-oXGDJIc3vrJyOrtsAo9dm6t4d6i+fo1+PP1Zl/0VM5L7lbZFDFb8pQenEHN9D+ItsYSOcAYiJ1404vE16hkbFQ==} @@ -2282,6 +2228,7 @@ packages: /@contentstack/utils/1.4.1: resolution: {integrity: sha512-P/1Xk3kku1WUHPd+djjZq1NQrUP/OhmiMLRkdNzixMaS4U9LXEJP6iU02YoYnXXjlFuI2dz/OzthCoI5/DPWQQ==} + dev: false /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -2296,6 +2243,7 @@ packages: colorspace: 1.1.4 enabled: 2.0.0 kuler: 2.0.0 + dev: false /@emnapi/core/1.4.5: resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} @@ -2703,8 +2651,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@eslint/js/9.32.0: - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + /@eslint/js/9.33.0: + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true @@ -2838,7 +2786,7 @@ packages: ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 - /@inquirer/checkbox/4.2.0_@types+node@20.19.9: + /@inquirer/checkbox/4.2.0_@types+node@20.19.10: resolution: {integrity: sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA==} engines: {node: '>=18'} peerDependencies: @@ -2847,10 +2795,10 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 dev: true @@ -2889,7 +2837,7 @@ packages: '@inquirer/type': 3.0.8_@types+node@14.18.63 '@types/node': 14.18.63 - /@inquirer/confirm/5.1.14_@types+node@20.19.9: + /@inquirer/confirm/5.1.14_@types+node@20.19.10: resolution: {integrity: sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==} engines: {node: '>=18'} peerDependencies: @@ -2898,9 +2846,9 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 dev: true /@inquirer/core/10.1.15: @@ -2941,7 +2889,7 @@ packages: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - /@inquirer/core/10.1.15_@types+node@20.19.9: + /@inquirer/core/10.1.15_@types+node@20.19.10: resolution: {integrity: sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==} engines: {node: '>=18'} peerDependencies: @@ -2951,8 +2899,8 @@ packages: optional: true dependencies: '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -2968,7 +2916,7 @@ packages: '@inquirer/figures': 1.0.13 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -2979,8 +2927,8 @@ packages: yoctocolors-cjs: 2.1.2 dev: true - /@inquirer/editor/4.2.15: - resolution: {integrity: sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==} + /@inquirer/editor/4.2.16: + resolution: {integrity: sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2989,12 +2937,12 @@ packages: optional: true dependencies: '@inquirer/core': 10.1.15 + '@inquirer/external-editor': 1.0.0 '@inquirer/type': 3.0.8 - external-editor: 3.1.0 dev: true - /@inquirer/editor/4.2.15_@types+node@14.18.63: - resolution: {integrity: sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==} + /@inquirer/editor/4.2.16_@types+node@14.18.63: + resolution: {integrity: sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3003,12 +2951,12 @@ packages: optional: true dependencies: '@inquirer/core': 10.1.15_@types+node@14.18.63 + '@inquirer/external-editor': 1.0.0_@types+node@14.18.63 '@inquirer/type': 3.0.8_@types+node@14.18.63 '@types/node': 14.18.63 - external-editor: 3.1.0 - /@inquirer/editor/4.2.15_@types+node@20.19.9: - resolution: {integrity: sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==} + /@inquirer/editor/4.2.16_@types+node@20.19.10: + resolution: {integrity: sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3016,10 +2964,10 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 - external-editor: 3.1.0 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/external-editor': 1.0.0_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 dev: true /@inquirer/expand/4.0.17: @@ -3050,7 +2998,7 @@ packages: '@types/node': 14.18.63 yoctocolors-cjs: 2.1.2 - /@inquirer/expand/4.0.17_@types+node@20.19.9: + /@inquirer/expand/4.0.17_@types+node@20.19.10: resolution: {integrity: sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==} engines: {node: '>=18'} peerDependencies: @@ -3059,12 +3007,43 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 yoctocolors-cjs: 2.1.2 dev: true + /@inquirer/external-editor/1.0.0: + resolution: {integrity: sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + dependencies: + chardet: 2.1.0 + iconv-lite: 0.6.3 + dev: true + + /@inquirer/external-editor/1.0.0_@types+node@14.18.63: + resolution: {integrity: sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + dependencies: + '@types/node': 14.18.63 + chardet: 2.1.0 + iconv-lite: 0.6.3 + + /@inquirer/external-editor/1.0.0_@types+node@20.19.10: + resolution: {integrity: sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + dependencies: + '@types/node': 20.19.10 + chardet: 2.1.0 + iconv-lite: 0.6.3 + dev: true + /@inquirer/figures/1.0.13: resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} @@ -3103,7 +3082,7 @@ packages: '@inquirer/type': 3.0.8_@types+node@14.18.63 '@types/node': 14.18.63 - /@inquirer/input/4.2.1_@types+node@20.19.9: + /@inquirer/input/4.2.1_@types+node@20.19.10: resolution: {integrity: sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==} engines: {node: '>=18'} peerDependencies: @@ -3112,9 +3091,9 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 dev: true /@inquirer/number/3.0.17: @@ -3143,7 +3122,7 @@ packages: '@inquirer/type': 3.0.8_@types+node@14.18.63 '@types/node': 14.18.63 - /@inquirer/number/3.0.17_@types+node@20.19.9: + /@inquirer/number/3.0.17_@types+node@20.19.10: resolution: {integrity: sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==} engines: {node: '>=18'} peerDependencies: @@ -3152,9 +3131,9 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 dev: true /@inquirer/password/4.0.17: @@ -3185,7 +3164,7 @@ packages: '@types/node': 14.18.63 ansi-escapes: 4.3.2 - /@inquirer/password/4.0.17_@types+node@20.19.9: + /@inquirer/password/4.0.17_@types+node@20.19.10: resolution: {integrity: sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==} engines: {node: '>=18'} peerDependencies: @@ -3194,14 +3173,14 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 dev: true - /@inquirer/prompts/7.8.0: - resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} + /@inquirer/prompts/7.8.1: + resolution: {integrity: sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3211,7 +3190,7 @@ packages: dependencies: '@inquirer/checkbox': 4.2.0 '@inquirer/confirm': 5.1.14 - '@inquirer/editor': 4.2.15 + '@inquirer/editor': 4.2.16 '@inquirer/expand': 4.0.17 '@inquirer/input': 4.2.1 '@inquirer/number': 3.0.17 @@ -3221,8 +3200,8 @@ packages: '@inquirer/select': 4.3.1 dev: true - /@inquirer/prompts/7.8.0_@types+node@14.18.63: - resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} + /@inquirer/prompts/7.8.1_@types+node@14.18.63: + resolution: {integrity: sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3232,7 +3211,7 @@ packages: dependencies: '@inquirer/checkbox': 4.2.0_@types+node@14.18.63 '@inquirer/confirm': 5.1.14_@types+node@14.18.63 - '@inquirer/editor': 4.2.15_@types+node@14.18.63 + '@inquirer/editor': 4.2.16_@types+node@14.18.63 '@inquirer/expand': 4.0.17_@types+node@14.18.63 '@inquirer/input': 4.2.1_@types+node@14.18.63 '@inquirer/number': 3.0.17_@types+node@14.18.63 @@ -3242,8 +3221,8 @@ packages: '@inquirer/select': 4.3.1_@types+node@14.18.63 '@types/node': 14.18.63 - /@inquirer/prompts/7.8.0_@types+node@20.19.9: - resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} + /@inquirer/prompts/7.8.1_@types+node@20.19.10: + resolution: {integrity: sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3251,17 +3230,17 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/checkbox': 4.2.0_@types+node@20.19.9 - '@inquirer/confirm': 5.1.14_@types+node@20.19.9 - '@inquirer/editor': 4.2.15_@types+node@20.19.9 - '@inquirer/expand': 4.0.17_@types+node@20.19.9 - '@inquirer/input': 4.2.1_@types+node@20.19.9 - '@inquirer/number': 3.0.17_@types+node@20.19.9 - '@inquirer/password': 4.0.17_@types+node@20.19.9 - '@inquirer/rawlist': 4.1.5_@types+node@20.19.9 - '@inquirer/search': 3.1.0_@types+node@20.19.9 - '@inquirer/select': 4.3.1_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/checkbox': 4.2.0_@types+node@20.19.10 + '@inquirer/confirm': 5.1.14_@types+node@20.19.10 + '@inquirer/editor': 4.2.16_@types+node@20.19.10 + '@inquirer/expand': 4.0.17_@types+node@20.19.10 + '@inquirer/input': 4.2.1_@types+node@20.19.10 + '@inquirer/number': 3.0.17_@types+node@20.19.10 + '@inquirer/password': 4.0.17_@types+node@20.19.10 + '@inquirer/rawlist': 4.1.5_@types+node@20.19.10 + '@inquirer/search': 3.1.0_@types+node@20.19.10 + '@inquirer/select': 4.3.1_@types+node@20.19.10 + '@types/node': 20.19.10 dev: true /@inquirer/rawlist/4.1.5: @@ -3292,7 +3271,7 @@ packages: '@types/node': 14.18.63 yoctocolors-cjs: 2.1.2 - /@inquirer/rawlist/4.1.5_@types+node@20.19.9: + /@inquirer/rawlist/4.1.5_@types+node@20.19.10: resolution: {integrity: sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==} engines: {node: '>=18'} peerDependencies: @@ -3301,9 +3280,9 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 yoctocolors-cjs: 2.1.2 dev: true @@ -3337,7 +3316,7 @@ packages: '@types/node': 14.18.63 yoctocolors-cjs: 2.1.2 - /@inquirer/search/3.1.0_@types+node@20.19.9: + /@inquirer/search/3.1.0_@types+node@20.19.10: resolution: {integrity: sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==} engines: {node: '>=18'} peerDependencies: @@ -3346,10 +3325,10 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 yoctocolors-cjs: 2.1.2 dev: true @@ -3396,7 +3375,7 @@ packages: ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 - /@inquirer/select/4.3.1_@types+node@20.19.9: + /@inquirer/select/4.3.1_@types+node@20.19.10: resolution: {integrity: sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==} engines: {node: '>=18'} peerDependencies: @@ -3405,10 +3384,10 @@ packages: '@types/node': optional: true dependencies: - '@inquirer/core': 10.1.15_@types+node@20.19.9 + '@inquirer/core': 10.1.15_@types+node@20.19.10 '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8_@types+node@20.19.9 - '@types/node': 20.19.9 + '@inquirer/type': 3.0.8_@types+node@20.19.10 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 dev: true @@ -3448,7 +3427,7 @@ packages: dependencies: '@types/node': 14.18.63 - /@inquirer/type/3.0.8_@types+node@20.19.9: + /@inquirer/type/3.0.8_@types+node@20.19.10: resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} peerDependencies: @@ -3457,7 +3436,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@isaacs/balanced-match/4.0.1: @@ -3504,7 +3483,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -3525,14 +3504,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0_rdmc42ntswfh3ogwa7qs67ycea + jest-config: 29.7.0_3wlvj4ztbacx7kdihusfa4wwne jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3560,7 +3539,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 jest-mock: 29.7.0 dev: true @@ -3587,7 +3566,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.9 + '@types/node': 20.19.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3620,7 +3599,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.29 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3707,7 +3686,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: true @@ -3719,7 +3698,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/yargs': 17.0.33 chalk: 4.1.2 dev: true @@ -3845,11 +3824,11 @@ packages: dependencies: '@oclif/core': 4.5.2 - /@oclif/plugin-not-found/3.2.63: - resolution: {integrity: sha512-xW+I6czUGqaeocVt1+brUKzXvL85mBTKdmJGlsB8pl9qUL3PJoIBIIDhbleR499T0jR+j1hpy8yWSCrs54icMQ==} + /@oclif/plugin-not-found/3.2.64: + resolution: {integrity: sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg==} engines: {node: '>=18.0.0'} dependencies: - '@inquirer/prompts': 7.8.0 + '@inquirer/prompts': 7.8.1 '@oclif/core': 4.5.2 ansis: 3.17.0 fast-levenshtein: 3.0.0 @@ -3857,22 +3836,22 @@ packages: - '@types/node' dev: true - /@oclif/plugin-not-found/3.2.63_@types+node@14.18.63: - resolution: {integrity: sha512-xW+I6czUGqaeocVt1+brUKzXvL85mBTKdmJGlsB8pl9qUL3PJoIBIIDhbleR499T0jR+j1hpy8yWSCrs54icMQ==} + /@oclif/plugin-not-found/3.2.64_@types+node@14.18.63: + resolution: {integrity: sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg==} engines: {node: '>=18.0.0'} dependencies: - '@inquirer/prompts': 7.8.0_@types+node@14.18.63 + '@inquirer/prompts': 7.8.1_@types+node@14.18.63 '@oclif/core': 4.5.2 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - /@oclif/plugin-not-found/3.2.63_@types+node@20.19.9: - resolution: {integrity: sha512-xW+I6czUGqaeocVt1+brUKzXvL85mBTKdmJGlsB8pl9qUL3PJoIBIIDhbleR499T0jR+j1hpy8yWSCrs54icMQ==} + /@oclif/plugin-not-found/3.2.64_@types+node@20.19.10: + resolution: {integrity: sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg==} engines: {node: '>=18.0.0'} dependencies: - '@inquirer/prompts': 7.8.0_@types+node@20.19.9 + '@inquirer/prompts': 7.8.1_@types+node@20.19.10 '@oclif/core': 4.5.2 ansis: 3.17.0 fast-levenshtein: 3.0.0 @@ -4692,7 +4671,7 @@ packages: '@smithy/property-provider': 4.0.5 '@smithy/smithy-client': 4.4.10 '@smithy/types': 4.3.2 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 dev: true @@ -4992,7 +4971,7 @@ packages: /@types/big-json/3.2.5: resolution: {integrity: sha512-svpMgOodNauW9xaWn6EabpvQUwM1sizbLbzzkVsx1cCrHLJ18tK0OcMe0AL0HAukJkHld06ozIPO1+h+HiLSNQ==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/bluebird/3.5.42: @@ -5003,7 +4982,7 @@ packages: resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: false /@types/chai/4.3.20: @@ -5012,7 +4991,7 @@ packages: /@types/connect/3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: false /@types/estree/1.0.8: @@ -5021,7 +5000,7 @@ packages: /@types/express-serve-static-core/4.19.6: resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -5044,20 +5023,20 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 6.0.0 - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/graceful-fs/4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/http-cache-semantics/4.0.4: @@ -5109,7 +5088,7 @@ packages: /@types/jsonfile/6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/linkify-it/5.0.0: @@ -5158,19 +5137,19 @@ packages: /@types/mute-stream/0.0.4: resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/node/14.18.63: resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - /@types/node/20.19.9: - resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} + /@types/node/20.19.10: + resolution: {integrity: sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==} dependencies: undici-types: 6.21.0 - /@types/node/22.17.0: - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + /@types/node/22.17.1: + resolution: {integrity: sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==} dependencies: undici-types: 6.21.0 dev: true @@ -5189,7 +5168,7 @@ packages: /@types/progress-stream/2.0.5: resolution: {integrity: sha512-5YNriuEZkHlFHHepLIaxzq3atGeav1qCTGzB74HKWpo66qjfostF+rHc785YYYHeBytve8ZG3ejg42jEIfXNiQ==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/proxyquire/1.3.31: @@ -5216,14 +5195,14 @@ packages: resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: false /@types/serve-static/1.15.8: resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} dependencies: '@types/http-errors': 2.0.5 - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/send': 0.17.5 dev: false @@ -5242,14 +5221,14 @@ packages: /@types/tar/6.1.13: resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 minipass: 4.2.8 dev: true /@types/through/0.0.33: resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 dev: true /@types/tmp/0.2.6: @@ -5262,6 +5241,7 @@ packages: /@types/triple-beam/1.3.5: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + dev: false /@types/uuid/9.0.8: resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} @@ -6461,6 +6441,7 @@ packages: optional: true dependencies: ajv: 8.17.1 + dev: false /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -6494,6 +6475,7 @@ packages: /ansi-escapes/3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} + dev: false /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -6509,6 +6491,7 @@ packages: /ansi-regex/3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} + dev: false /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -6733,6 +6716,7 @@ packages: object-is: 1.1.6 object.assign: 4.1.7 util: 0.12.5 + dev: false /assertion-error/1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -6772,6 +6756,7 @@ packages: /atomically/1.7.0: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} + dev: false /available-typed-arrays/1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} @@ -6878,6 +6863,7 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false /big-json/3.2.0: resolution: {integrity: sha512-2Etdurszm1CAFxqpH08lItXyf5CI1OBKRn7imCeI8Lh+a2UvdN2WpuSduxB/3ccao6v93SxiS5fIlE/v1QLoPg==} @@ -6901,6 +6887,7 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: false /block-elements/1.2.0: resolution: {integrity: sha512-4E+pnt4v8HSEEH3Dwe2Bcu8TIbdReez7b5Qjs11dJIdbGFaNSobDgphWxy9NtjYB9ZsZd7DzByDbeXy4DvYz5Q==} @@ -6929,8 +6916,8 @@ packages: - supports-color dev: false - /bowser/2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + /bowser/2.12.0: + resolution: {integrity: sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==} dev: true /brace-expansion/1.1.12: @@ -6955,20 +6942,21 @@ packages: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} dependencies: wcwidth: 1.0.1 + dev: false /browser-stdout/1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist/4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + /browserslist/4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001733 + caniuse-lite: 1.0.30001734 electron-to-chromium: 1.5.199 node-releases: 2.0.19 - update-browserslist-db: 1.1.3_browserslist@4.25.1 + update-browserslist-db: 1.1.3_browserslist@4.25.2 dev: true /bs-logger/0.2.6: @@ -6992,12 +6980,14 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: false /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: false /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} @@ -7095,8 +7085,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001733: - resolution: {integrity: sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==} + /caniuse-lite/1.0.30001734: + resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==} dev: true /capital-case/1.0.4: @@ -7185,9 +7175,14 @@ packages: /chardet/0.4.2: resolution: {integrity: sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==} + dev: false /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: false + + /chardet/2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} /check-error/1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -7252,18 +7247,21 @@ packages: engines: {node: '>=4'} dependencies: restore-cursor: 2.0.0 + dev: false /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: false /cli-progress/3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} dependencies: string-width: 4.2.3 + dev: false /cli-spinners/2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} @@ -7274,6 +7272,7 @@ packages: engines: {node: '>= 0.2.0'} dependencies: colors: 1.0.3 + dev: false /cli-truncate/0.2.1: resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} @@ -7285,10 +7284,12 @@ packages: /cli-width/2.2.1: resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + dev: false /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + dev: false /cli-width/4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} @@ -7320,6 +7321,7 @@ packages: /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + dev: false /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -7372,22 +7374,26 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + dev: false /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: color-convert: 1.9.3 color-string: 1.9.1 + dev: false /colors/1.0.3: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} + dev: false /colorspace/1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} dependencies: color: 3.2.1 text-hex: 1.0.0 + dev: false /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -7467,6 +7473,7 @@ packages: onetime: 5.1.2 pkg-up: 3.1.0 semver: 7.7.2 + dev: false /config-chain/1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -7512,6 +7519,7 @@ packages: es6-promise: 4.2.8 husky: 9.1.7 localStorage: 1.0.4 + dev: false /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -7533,7 +7541,7 @@ packages: /core-js-compat/3.45.0: resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 dev: true /core-util-is/1.0.3: @@ -7593,6 +7601,7 @@ packages: /crypto-random-string/2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + dev: false /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -7611,12 +7620,15 @@ packages: /csv-generate/3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: false /csv-parse/4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: false /csv-stringify/5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: false /csv/5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} @@ -7626,6 +7638,7 @@ packages: csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 + dev: false /cycle/1.0.3: resolution: {integrity: sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==} @@ -7674,6 +7687,7 @@ packages: engines: {node: '>=10'} dependencies: mimic-fn: 3.1.0 + dev: false /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -7780,6 +7794,7 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: false /defer-to-connect/2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} @@ -7797,6 +7812,7 @@ packages: /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + dev: false /define-properties/1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -7917,6 +7933,7 @@ packages: engines: {node: '>=10'} dependencies: is-obj: 2.0.0 + dev: false /dotenv-expand/9.0.0: resolution: {integrity: sha512-uW8Hrhp5ammm9x7kBLR6jDfujgaDarNA02tprvZdyrJ7MpdzD1KyrIHG4l+YoC2fJ2UcdFdNWNWIjt+sexBHJw==} @@ -7971,6 +7988,7 @@ packages: /enabled/2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + dev: false /encodeurl/1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} @@ -8017,6 +8035,7 @@ packages: /env-paths/2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + dev: false /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -8126,6 +8145,7 @@ packages: /es6-promise/4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false /esbuild/0.25.8: resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} @@ -8288,13 +8308,13 @@ packages: - eslint dev: true - /eslint-config-oclif/6.0.90_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==} + /eslint-config-oclif/6.0.94_avq3eyf5kaj6ssrwo7fvkrwnji: + resolution: {integrity: sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==} engines: {node: '>=18.18.0'} dependencies: '@eslint/compat': 1.3.2_eslint@8.57.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 + '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_avq3eyf5kaj6ssrwo7fvkrwnji '@typescript-eslint/eslint-plugin': 8.39.0_jmqmfammfjkeppa3uezqx4e67y '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji @@ -8317,13 +8337,13 @@ packages: - typescript dev: true - /eslint-config-oclif/6.0.90_eslint@7.32.0: - resolution: {integrity: sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==} + /eslint-config-oclif/6.0.94_eslint@7.32.0: + resolution: {integrity: sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==} engines: {node: '>=18.18.0'} dependencies: '@eslint/compat': 1.3.2_eslint@7.32.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 + '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_eslint@7.32.0 '@typescript-eslint/eslint-plugin': 8.39.0_idijxifckbvuj7jzk34pnze6vi '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 @@ -8346,13 +8366,13 @@ packages: - typescript dev: true - /eslint-config-oclif/6.0.90_eslint@8.57.1: - resolution: {integrity: sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==} + /eslint-config-oclif/6.0.94_eslint@8.57.1: + resolution: {integrity: sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==} engines: {node: '>=18.18.0'} dependencies: '@eslint/compat': 1.3.2_eslint@8.57.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 + '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_eslint@8.57.1 '@typescript-eslint/eslint-plugin': 8.39.0_afisypzonua2m5iv24dxve4ljm '@typescript-eslint/parser': 8.39.0_eslint@8.57.1 @@ -8375,13 +8395,13 @@ packages: - typescript dev: true - /eslint-config-oclif/6.0.90_owjsyeuugtyevmmlm2yzh3xodu: - resolution: {integrity: sha512-bdYiRSV7D72Vwz7YW8GDOoqpGgcnOpBPSwIudHr5nddNB5VIuqJOecCIlua+DqscMZtQJ+1RyuMuKK9xzdAL7w==} + /eslint-config-oclif/6.0.94_owjsyeuugtyevmmlm2yzh3xodu: + resolution: {integrity: sha512-p+DFD1kJmS07dzW1qOTsHH5o3bjoYXG9weTLvglpBm+MDRmvyaNTJn3DLOOBqdC5HlUrC4an+4UUc++y6upbHg==} engines: {node: '>=18.18.0'} dependencies: '@eslint/compat': 1.3.2_eslint@8.57.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 + '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_owjsyeuugtyevmmlm2yzh3xodu '@typescript-eslint/eslint-plugin': 8.39.0_lle3kt2omsygqvq3losp3djrcy '@typescript-eslint/parser': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu @@ -9532,6 +9552,7 @@ packages: chardet: 0.4.2 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: false /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -9540,6 +9561,7 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: false /eyes/0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} @@ -9553,7 +9575,7 @@ packages: dependencies: '@types/chai': 4.3.20 '@types/lodash': 4.17.20 - '@types/node': 20.19.9 + '@types/node': 20.19.10 '@types/sinon': 10.0.20 lodash: 4.17.21 mock-stdin: 1.0.0 @@ -9633,6 +9655,7 @@ packages: /fecha/4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + dev: false /figlet/1.8.2: resolution: {integrity: sha512-iPCpE9B/rOcjewIzDnagP9F2eySzGeHReX8WlrZQJkqFBk2wvq8gY0c6U6Hd2y9HnX1LQcYSeP7aEHoPt6sVKQ==} @@ -9653,12 +9676,14 @@ packages: engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 + dev: false /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 + dev: false /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -9740,6 +9765,7 @@ packages: engines: {node: '>=6'} dependencies: locate-path: 3.0.0 + dev: false /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -9782,6 +9808,7 @@ packages: /fn.name/1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + dev: false /follow-redirects/1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} @@ -9926,6 +9953,7 @@ packages: /fuzzy/0.1.3: resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==} engines: {node: '>= 0.6.0'} + dev: false /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -10141,6 +10169,7 @@ packages: /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: false /graphemer/1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -10340,16 +10369,17 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: false /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: false /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} @@ -10440,6 +10470,7 @@ packages: figures: 2.0.0 fuzzy: 0.1.3 inquirer: 3.3.0 + dev: false /inquirer-search-list/1.2.6: resolution: {integrity: sha512-C4pKSW7FOYnkAloH8rB4FiM91H1v08QFZZJh6KRt//bMfdDBIhgdX8wjHvrVH2bu5oIo6wYqGpzSBxkeClPxew==} @@ -10448,6 +10479,7 @@ packages: figures: 2.0.0 fuzzy: 0.1.3 inquirer: 3.3.0 + dev: false /inquirer/3.3.0: resolution: {integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==} @@ -10466,6 +10498,7 @@ packages: string-width: 2.1.1 strip-ansi: 4.0.0 through: 2.3.8 + dev: false /inquirer/8.2.6: resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} @@ -10486,6 +10519,7 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 + dev: false /internal-slot/1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} @@ -10519,6 +10553,7 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 + dev: false /is-array-buffer/3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} @@ -10534,6 +10569,7 @@ packages: /is-arrayish/0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false /is-async-function/2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -10628,6 +10664,7 @@ packages: /is-fullwidth-code-point/2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} + dev: false /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -10656,6 +10693,7 @@ packages: /is-interactive/1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + dev: false /is-map/2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} @@ -10671,6 +10709,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 + dev: false /is-negative-zero/2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} @@ -10690,6 +10729,7 @@ packages: /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + dev: false /is-object/1.0.2: resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} @@ -10967,7 +11007,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.6.0 @@ -11016,7 +11056,7 @@ packages: - ts-node dev: true - /jest-config/29.7.0_gmerzvnqkqd6hvbwzqmybfpwqi: + /jest-config/29.7.0_3wlvj4ztbacx7kdihusfa4wwne: resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -11031,7 +11071,7 @@ packages: '@babel/core': 7.28.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 14.18.63 + '@types/node': 20.19.10 babel-jest: 29.7.0_@babel+core@7.28.0 chalk: 4.1.2 ci-info: 3.9.0 @@ -11057,7 +11097,7 @@ packages: - supports-color dev: true - /jest-config/29.7.0_rdmc42ntswfh3ogwa7qs67ycea: + /jest-config/29.7.0_gmerzvnqkqd6hvbwzqmybfpwqi: resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -11072,7 +11112,7 @@ packages: '@babel/core': 7.28.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 14.18.63 babel-jest: 29.7.0_@babel+core@7.28.0 chalk: 4.1.2 ci-info: 3.9.0 @@ -11143,7 +11183,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -11164,7 +11204,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.9 + '@types/node': 20.19.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11215,7 +11255,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 jest-util: 29.7.0 dev: true @@ -11270,7 +11310,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11301,7 +11341,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -11353,7 +11393,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11378,7 +11418,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.9 + '@types/node': 20.19.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11390,7 +11430,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11583,6 +11623,7 @@ packages: /json-schema-typed/7.0.3: resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} + dev: false /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -11658,13 +11699,16 @@ packages: /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + dev: false /klona/2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + dev: false /kuler/2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + dev: false /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} @@ -11746,6 +11790,7 @@ packages: /localStorage/1.0.4: resolution: {integrity: sha512-r35zrihcDiX+dqWlJSeIwS9nrF95OQTgqMFm3FB2D/+XgdmZtcutZOb7t0xXkhOEM8a9kpuu7cc28g1g36I5DQ==} engines: {node: '>= v0.2.0'} + dev: false /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} @@ -11753,6 +11798,7 @@ packages: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 + dev: false /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -11889,6 +11935,7 @@ packages: ms: 2.1.3 safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + dev: false /loose-envify/1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} @@ -12043,6 +12090,7 @@ packages: /mimic-fn/1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} + dev: false /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -12051,6 +12099,7 @@ packages: /mimic-fn/3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} engines: {node: '>=8'} + dev: false /mimic-response/3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} @@ -12135,6 +12184,7 @@ packages: /mixme/0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} engines: {node: '>= 8.0.0'} + dev: false /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -12194,9 +12244,11 @@ packages: /mute-stream/0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + dev: false /mute-stream/0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: false /mute-stream/1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} @@ -12207,8 +12259,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - /napi-postinstall/0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} + /napi-postinstall/0.3.3: + resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true dev: true @@ -12494,6 +12546,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 + dev: false /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -12549,19 +12602,19 @@ packages: es-object-atoms: 1.1.1 dev: true - /oclif/4.22.6: - resolution: {integrity: sha512-TsFZfPdhOKtBRv3YKnJMUVbL/JTw5IDs4DoWekpn7c+jBDw/snp0STCe48YYW4hotULwfy2yPbKr0KyzDQ7gjw==} + /oclif/4.22.9: + resolution: {integrity: sha512-zrrvAFI/MvfP54QueJrvYl3mjS1eYyeHGV3ITv7NQ16ykcg83E+rXBva2CfymMr1/r9b7m82GTFID6i8f8O66g==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@aws-sdk/client-cloudfront': 3.863.0 - '@aws-sdk/client-s3': 3.863.0 + '@aws-sdk/client-cloudfront': 3.864.0 + '@aws-sdk/client-s3': 3.864.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 '@oclif/core': 4.5.2 '@oclif/plugin-help': 6.2.32 - '@oclif/plugin-not-found': 3.2.63 + '@oclif/plugin-not-found': 3.2.64 '@oclif/plugin-warn-if-update-available': 3.1.46 ansis: 3.17.0 async-retry: 1.3.3 @@ -12584,19 +12637,19 @@ packages: - supports-color dev: true - /oclif/4.22.6_@types+node@14.18.63: - resolution: {integrity: sha512-TsFZfPdhOKtBRv3YKnJMUVbL/JTw5IDs4DoWekpn7c+jBDw/snp0STCe48YYW4hotULwfy2yPbKr0KyzDQ7gjw==} + /oclif/4.22.9_@types+node@14.18.63: + resolution: {integrity: sha512-zrrvAFI/MvfP54QueJrvYl3mjS1eYyeHGV3ITv7NQ16ykcg83E+rXBva2CfymMr1/r9b7m82GTFID6i8f8O66g==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@aws-sdk/client-cloudfront': 3.863.0 - '@aws-sdk/client-s3': 3.863.0 + '@aws-sdk/client-cloudfront': 3.864.0 + '@aws-sdk/client-s3': 3.864.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 '@oclif/core': 4.5.2 '@oclif/plugin-help': 6.2.32 - '@oclif/plugin-not-found': 3.2.63_@types+node@14.18.63 + '@oclif/plugin-not-found': 3.2.64_@types+node@14.18.63 '@oclif/plugin-warn-if-update-available': 3.1.46 ansis: 3.17.0 async-retry: 1.3.3 @@ -12619,19 +12672,19 @@ packages: - supports-color dev: true - /oclif/4.22.6_@types+node@20.19.9: - resolution: {integrity: sha512-TsFZfPdhOKtBRv3YKnJMUVbL/JTw5IDs4DoWekpn7c+jBDw/snp0STCe48YYW4hotULwfy2yPbKr0KyzDQ7gjw==} + /oclif/4.22.9_@types+node@20.19.10: + resolution: {integrity: sha512-zrrvAFI/MvfP54QueJrvYl3mjS1eYyeHGV3ITv7NQ16ykcg83E+rXBva2CfymMr1/r9b7m82GTFID6i8f8O66g==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@aws-sdk/client-cloudfront': 3.863.0 - '@aws-sdk/client-s3': 3.863.0 + '@aws-sdk/client-cloudfront': 3.864.0 + '@aws-sdk/client-s3': 3.864.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 '@oclif/core': 4.5.2 '@oclif/plugin-help': 6.2.32 - '@oclif/plugin-not-found': 3.2.63_@types+node@20.19.9 + '@oclif/plugin-not-found': 3.2.64_@types+node@20.19.10 '@oclif/plugin-warn-if-update-available': 3.1.46 ansis: 3.17.0 async-retry: 1.3.3 @@ -12677,12 +12730,14 @@ packages: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} dependencies: fn.name: 1.1.0 + dev: false /onetime/2.0.1: resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} engines: {node: '>=4'} dependencies: mimic-fn: 1.2.0 + dev: false /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -12697,6 +12752,7 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: false /optimism/0.18.1: resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} @@ -12732,10 +12788,12 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: false /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + dev: false /otplib/12.0.1: resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} @@ -12785,6 +12843,7 @@ packages: engines: {node: '>=6'} dependencies: p-limit: 2.3.0 + dev: false /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -12830,6 +12889,7 @@ packages: /papaparse/5.5.3: resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} + dev: false /param-case/3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} @@ -12901,6 +12961,7 @@ packages: /path-exists/3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} + dev: false /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -12979,6 +13040,7 @@ packages: engines: {node: '>=8'} dependencies: find-up: 3.0.0 + dev: false /pluralize/8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -13143,6 +13205,7 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.1.0 + dev: false /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -13238,6 +13301,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: false /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -13249,6 +13313,7 @@ packages: /recheck-jar/4.4.5: resolution: {integrity: sha512-a2kMzcfr+ntT0bObNLY22EUNV6Z6WeZ+DybRmPOUXVWzGcqhRcrK74tpgrYt3FdzTlSh85pqoryAPmrNkwLc0g==} requiresBuild: true + dev: false optional: true /recheck-linux-x64/4.4.5: @@ -13256,6 +13321,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: false optional: true /recheck-macos-x64/4.4.5: @@ -13263,6 +13329,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: false optional: true /recheck-windows-x64/4.4.5: @@ -13270,6 +13337,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: false optional: true /recheck/4.4.5: @@ -13280,6 +13348,7 @@ packages: recheck-linux-x64: 4.4.5 recheck-macos-x64: 4.4.5 recheck-windows-x64: 4.4.5 + dev: false /rechoir/0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} @@ -13456,6 +13525,7 @@ packages: dependencies: onetime: 2.0.1 signal-exit: 3.0.7 + dev: false /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -13463,6 +13533,7 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: false /retry/0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} @@ -13525,6 +13596,7 @@ packages: /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} + dev: false /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -13535,15 +13607,18 @@ packages: resolution: {integrity: sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==} dependencies: rx-lite: 4.0.8 + dev: false /rx-lite/4.0.8: resolution: {integrity: sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==} + dev: false /rxjs/6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} dependencies: tslib: 1.14.1 + dev: false /rxjs/7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -13585,6 +13660,7 @@ packages: /safe-stable-stringify/2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + dev: false /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -13798,6 +13874,7 @@ packages: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 + dev: false /sinon/19.0.5: resolution: {integrity: sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==} @@ -13850,6 +13927,7 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 + dev: false /snake-case/3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -13967,6 +14045,7 @@ packages: /stack-trace/0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + dev: false /stack-utils/2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} @@ -14001,6 +14080,7 @@ packages: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 + dev: false /stream-connect/1.0.2: resolution: {integrity: sha512-68Kl+79cE0RGKemKkhxTSg8+6AGrqBt+cbZAXevg2iJ6Y3zX4JhA/sZeGzLpxW9cXhmqAcE7KnJCisUmIUfnFQ==} @@ -14014,6 +14094,7 @@ packages: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: mixme: 0.5.10 + dev: false /stream-via/1.0.4: resolution: {integrity: sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==} @@ -14043,6 +14124,7 @@ packages: dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 + dev: false /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -14099,6 +14181,7 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: false /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} @@ -14112,6 +14195,7 @@ packages: engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 + dev: false /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -14272,6 +14356,7 @@ packages: /text-hex/1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + dev: false /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -14283,6 +14368,7 @@ packages: /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -14318,9 +14404,10 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + dev: false - /tmp/0.2.4: - resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + /tmp/0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} /tmpl/1.0.5: @@ -14366,10 +14453,12 @@ packages: gopd: 1.2.0 typedarray.prototype.slice: 1.0.5 which-typed-array: 1.1.19 + dev: false /triple-beam/1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} + dev: false /ts-api-utils/1.4.3_typescript@4.9.5: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} @@ -14487,7 +14576,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node/10.9.2_ogreqof3k35xezedraj6pnd45y: + /ts-node/10.9.2_7bni2lgzlmvcyelgh6mamlr2tu: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -14506,19 +14595,19 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 14.18.63 + '@types/node': 20.19.10 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 5.9.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true - /ts-node/10.9.2_typescript@4.9.5: + /ts-node/10.9.2_ogreqof3k35xezedraj6pnd45y: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -14537,6 +14626,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 + '@types/node': 14.18.63 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -14548,7 +14638,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.2_wvtqtvwwomupdcqiiypwcpdbmi: + /ts-node/10.9.2_typescript@4.9.5: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -14567,14 +14657,13 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.9 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.9.2 + typescript: 4.9.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -14642,6 +14731,7 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.2 + dev: false /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -14755,6 +14845,7 @@ packages: math-intrinsics: 1.1.0 typed-array-buffer: 1.0.3 typed-array-byte-offset: 1.0.4 + dev: false /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -14884,6 +14975,7 @@ packages: engines: {node: '>=8'} dependencies: crypto-random-string: 2.0.0 + dev: false /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -14909,7 +15001,7 @@ packages: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} requiresBuild: true dependencies: - napi-postinstall: 0.3.2 + napi-postinstall: 0.3.3 optionalDependencies: '@unrs/resolver-binding-android-arm-eabi': 1.11.1 '@unrs/resolver-binding-android-arm64': 1.11.1 @@ -14932,13 +15024,13 @@ packages: '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 dev: true - /update-browserslist-db/1.1.3_browserslist@4.25.1: + /update-browserslist-db/1.1.3_browserslist@4.25.2: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 dev: true @@ -14970,6 +15062,7 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false /util/0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -14979,6 +15072,7 @@ packages: is-generator-function: 1.1.0 is-typed-array: 1.1.15 which-typed-array: 1.1.19 + dev: false /utils-merge/1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} @@ -15058,6 +15152,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: false /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -15182,6 +15277,7 @@ packages: logform: 2.7.0 readable-stream: 3.6.2 triple-beam: 1.4.1 + dev: false /winston/2.4.7: resolution: {integrity: sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==} @@ -15210,6 +15306,7 @@ packages: stack-trace: 0.0.10 triple-beam: 1.4.1 winston-transport: 4.9.0 + dev: false /word-wrap/1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} @@ -15299,6 +15396,7 @@ packages: /xdg-basedir/4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} + dev: false /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} From e0554e520f96635f1a928571e7368d695f71020b Mon Sep 17 00:00:00 2001 From: raj pandey Date: Mon, 11 Aug 2025 13:56:25 +0530 Subject: [PATCH 14/23] Adding last_updated --- .talismanrc | 8 +++-- .../src/commands/auth/login.ts | 30 +++++++------------ .../services/totp/totp-service.interface.ts | 2 +- .../src/services/totp/totp.service.ts | 12 ++++++-- .../src/services/totp/totp.types.ts | 1 + 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/.talismanrc b/.talismanrc index 527bf6c026..336c333347 100644 --- a/.talismanrc +++ b/.talismanrc @@ -8,7 +8,7 @@ fileignoreconfig: - filename: packages/contentstack-config/src/commands/config/totp/remove.ts checksum: 6b2956013e33a2b46e5e342ce362672bfb5e057211737b95c5924f6994e858c2 - filename: packages/contentstack-config/src/services/totp/totp.service.ts - checksum: f21bc50af721e29ab69afe43e2b1c55d7867cfb894056ec240e412ca2e5eacc2 + checksum: d460e9ea8cb538131dc3318beed5c4cebab9be66592dc42a138d80b9e1692684 - filename: packages/contentstack-config/src/services/totp/types.ts checksum: 8ab48ff2bcd11d69b77df0dd71262c28703ba674a552f6b536a53c855d828117 - filename: packages/contentstack-config/test/unit/commands/totp.test.ts @@ -16,5 +16,7 @@ fileignoreconfig: - filename: packages/contentstack-config/src/commands/config/totp/add.ts checksum: 48d2ddefec00834fff94dac250be2c20a47d44d23fca87d0e145b38b11604219 - filename: packages/contentstack-config/test/unit/services/totp.service.test.ts - checksum: bfb93f2b62f606007cc84a4a51a3e61ded10593c65a499f8748379728f9592e2 -version: "1.0" + checksum: d460e9ea8cb538131dc3318beed5c4cebab9be66592dc42a138d80b9e1692684 +- filename: packages/contentstack-auth/src/commands/auth/login.ts + checksum: 7c6f82a7e4147c327c3d634c3845d5cebf55f91e5feefc7871fc77e77bdd9a46 +version: "1.0" \ No newline at end of file diff --git a/packages/contentstack-auth/src/commands/auth/login.ts b/packages/contentstack-auth/src/commands/auth/login.ts index 17256b35ff..77705d6fd8 100644 --- a/packages/contentstack-auth/src/commands/auth/login.ts +++ b/packages/contentstack-auth/src/commands/auth/login.ts @@ -40,15 +40,12 @@ export default class LoginCommand extends BaseCommand { required: false, exclusive: ['oauth'], }), - 'totp-secret': flags.string({ - description: 'TOTP secret for 2FA authentication.', - exclusive: ['oauth'], - }), + oauth: flags.boolean({ description: 'Enables single sign-on (SSO) in Contentstack CLI.', required: false, default: false, - exclusive: ['username', 'password', 'totp-secret'], + exclusive: ['username', 'password'], }), }; @@ -80,15 +77,13 @@ export default class LoginCommand extends BaseCommand { log.debug('Starting basic authentication flow', this.contextDetails); const username = loginFlags?.username || (await interactive.askUsername()); const password = loginFlags?.password || (await interactive.askPassword()); - const totpSecret = loginFlags?.['totp-secret']; log.debug('Credentials obtained', { ...this.contextDetails, hasUsername: !!username, - hasPassword: !!password, - hasTotpSecret: !!totpSecret + hasPassword: !!password }); - await this.login(username, password, totpSecret); + await this.login(username, password); } } catch (error) { log.debug('Login command failed', { ...this.contextDetails, error }); @@ -98,22 +93,19 @@ export default class LoginCommand extends BaseCommand { } } - async login(username: string, password: string, totpSecret?: string): Promise { + async login(username: string, password: string): Promise { log.debug('Starting login process', { ...this.contextDetails, username }); try { log.debug('Calling auth handler login', this.contextDetails); let tfaToken: string | undefined; - if (totpSecret) { - log.debug('Generating TOTP token from provided secret', this.contextDetails); - try { - tfaToken = totpHandler.generateTOTPFromSecret(totpSecret); - log.debug('TOTP token generated successfully', this.contextDetails); - } catch (error) { - log.debug('Failed to generate TOTP token', { ...this.contextDetails, error }); - tfaToken = undefined; - } + try { + tfaToken = await totpHandler.getTOTPCode(); + log.debug('TOTP token generated from stored configuration', this.contextDetails); + } catch (error) { + log.debug('Failed to generate TOTP token from config', { ...this.contextDetails, error }); + tfaToken = undefined; } const user: User = await authHandler.login(username, password, tfaToken); diff --git a/packages/contentstack-config/src/services/totp/totp-service.interface.ts b/packages/contentstack-config/src/services/totp/totp-service.interface.ts index a780e556c2..09e7fab8bb 100644 --- a/packages/contentstack-config/src/services/totp/totp-service.interface.ts +++ b/packages/contentstack-config/src/services/totp/totp-service.interface.ts @@ -5,7 +5,7 @@ export interface ITOTPService { encryptSecret(secret: string): string; decryptSecret(encryptedSecret: string): string; getStoredConfig(): TOTPConfig | null; - storeConfig(config: TOTPConfig): void; + storeConfig(config: Partial): void; removeConfig(): void; generateTOTP(secret: string): string; verifyTOTP(secret: string, token: string): boolean; diff --git a/packages/contentstack-config/src/services/totp/totp.service.ts b/packages/contentstack-config/src/services/totp/totp.service.ts index f649302273..3160936e6c 100644 --- a/packages/contentstack-config/src/services/totp/totp.service.ts +++ b/packages/contentstack-config/src/services/totp/totp.service.ts @@ -1,6 +1,7 @@ import { configHandler, NodeCrypto, log } from '@contentstack/cli-utilities'; import { authenticator } from 'otplib'; -import { ITOTPService, TOTPConfig, TOTPError } from './types'; +import { TOTPConfig, TOTPError } from './totp.types'; +import { ITOTPService } from './totp-service.interface'; export class TOTPService implements ITOTPService { private readonly encrypter: NodeCrypto; @@ -80,9 +81,14 @@ export class TOTPService implements ITOTPService { } } - storeConfig(config: TOTPConfig): void { + storeConfig(config: Partial): void { try { - configHandler.set('totp', config); + const updatedConfig: TOTPConfig = { + ...config, + last_updated: new Date().toISOString(), + secret: config.secret! + }; + configHandler.set('totp', updatedConfig); } catch (error) { this.logger.error('Failed to store TOTP config', { error }); throw new TOTPError('Failed to store TOTP configuration'); diff --git a/packages/contentstack-config/src/services/totp/totp.types.ts b/packages/contentstack-config/src/services/totp/totp.types.ts index fd1ead9e8d..9e34470748 100644 --- a/packages/contentstack-config/src/services/totp/totp.types.ts +++ b/packages/contentstack-config/src/services/totp/totp.types.ts @@ -1,5 +1,6 @@ export interface TOTPConfig { secret: string; + last_updated: string; } export interface TOTPValidationResult { From 10117bbed15e5314dcc1ba9477e8548dc4476006 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Mon, 11 Aug 2025 14:09:17 +0530 Subject: [PATCH 15/23] Lock-file update --- .talismanrc | 2 +- package-lock.json | 393 +++------------------------------------------- 2 files changed, 24 insertions(+), 371 deletions(-) diff --git a/.talismanrc b/.talismanrc index 2ab10334d1..37ae583c83 100644 --- a/.talismanrc +++ b/.talismanrc @@ -2,7 +2,7 @@ fileignoreconfig: - filename: pnpm-lock.yaml checksum: 470990d838d1c5a2ac15ab6114701897013ba801f1b26199911843ec95ef5dcd - filename: package-lock.json - checksum: 67a2ed97561ded878580305140ed3cbb31ac97e3b7ec7fdcd957ed77d7434fe2 + checksum: abf7eaa17745ea602424c7092c9973f794b31be49dbe0fec8a9bbd3e17c6954b - filename: pnpm-lock.yaml checksum: 0ca85066946c49994a4353c9f64b8f380d5d2050194e3e57ad7ccd7faa030d36 - filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts diff --git a/package-lock.json b/package-lock.json index c9cfe7d060..6d79ffe10d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2992,66 +2992,6 @@ "node": ">=8" } }, - "node_modules/@inquirer/editor": { - "version": "4.2.16", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.16.tgz", - "integrity": "sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/external-editor": "^1.0.0", - "@inquirer/type": "^3.0.8" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.17.tgz", - "integrity": "sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz", - "integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==", - "license": "MIT", - "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, "node_modules/@inquirer/figures": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", @@ -3073,131 +3013,6 @@ }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.17.tgz", - "integrity": "sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.17.tgz", - "integrity": "sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.1.tgz", - "integrity": "sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==", - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.2.0", - "@inquirer/confirm": "^5.1.14", - "@inquirer/editor": "^4.2.16", - "@inquirer/expand": "^4.0.17", - "@inquirer/input": "^4.2.1", - "@inquirer/number": "^3.0.17", - "@inquirer/password": "^4.0.17", - "@inquirer/rawlist": "^4.1.5", - "@inquirer/search": "^3.1.0", - "@inquirer/select": "^4.3.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.5.tgz", - "integrity": "sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.0.tgz", - "integrity": "sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } } }, "node_modules/@inquirer/select": { @@ -6289,13 +6104,10 @@ } }, "node_modules/@types/node": { - "version": "24.2.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", - "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.10.0" - } + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", @@ -7901,18 +7713,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8419,9 +8219,9 @@ } }, "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "license": "MIT" }, "node_modules/check-error": { @@ -12168,24 +11968,6 @@ "node": ">=4" } }, - "node_modules/external-editor/node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "license": "MIT" - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13668,12 +13450,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -13982,18 +13764,6 @@ "node": ">=4" } }, - "node_modules/inquirer-search-checkbox/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/inquirer-search-checkbox/node_modules/inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -14253,18 +14023,6 @@ "node": ">=4" } }, - "node_modules/inquirer-search-list/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/inquirer-search-list/node_modules/inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -21115,111 +20873,6 @@ "node": ">=18.0.0" } }, - "node_modules/oclif/node_modules/@inquirer/confirm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/core": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/core/node_modules/@inquirer/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/input": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/select": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/oclif/node_modules/@types/node": { - "version": "22.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz", - "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, "node_modules/oclif/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -22412,18 +22065,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -26106,6 +25747,18 @@ "node": ">=12" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", From c2b47234f5b3cffa736581af3f72308c9db899a1 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Mon, 11 Aug 2025 14:21:24 +0530 Subject: [PATCH 16/23] Fixed Test cases --- .talismanrc | 4 +++ .../test/unit/commands/totp.test.ts | 31 +++++++++++++------ .../test/unit/services/totp.service.test.ts | 22 +++++++++++-- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/.talismanrc b/.talismanrc index 37ae583c83..3401062686 100644 --- a/.talismanrc +++ b/.talismanrc @@ -37,4 +37,8 @@ fileignoreconfig: checksum: c09f6dc93702caff3adf689b501ec32586a16c865c1fe3a63b53ae645ca22349 - filename: packages/contentstack-import-setup/test/unit/modules/assets.test.ts checksum: 449a5e3383631a6f78d1291aa3c28c91681879289398f0a933158fba5c5d5acf +- filename: packages/contentstack-config/test/unit/commands/totp.test.ts + checksum: 3c9e7e43bebec8683b4af2ed2b28ed71c24cf0e7e7379aa7acceee620d2cc310 +- filename: packages/contentstack-config/test/unit/services/totp.service.test.ts + checksum: 68a9e64134c5972828d6c1e65d6975b6200f36a0edab3ee6e4df05445a52f941 version: "1.0" \ No newline at end of file diff --git a/packages/contentstack-config/test/unit/commands/totp.test.ts b/packages/contentstack-config/test/unit/commands/totp.test.ts index ebc087407e..a57d4952bd 100644 --- a/packages/contentstack-config/test/unit/commands/totp.test.ts +++ b/packages/contentstack-config/test/unit/commands/totp.test.ts @@ -56,23 +56,33 @@ describe('TOTP Commands', function () { 'JBSWY3DPEHPK3PXP ', // Trailing space ]; - it('should add TOTP configuration successfully', async function () { + it('should add TOTP configuration successfully with last_updated', async function () { configStub.get.returns(null); encrypterStub.encrypt.returns(encryptedSecret); authenticatorStub.generate.returns('123456'); authenticatorStub.check.returns(true); inquireStub.returns(Promise.resolve(true)); + const now = new Date(); + const clock = sinon.useFakeTimers(now.getTime()); + await TotpAddCommand.run(['--secret', validSecret]); expect(configStub.set.calledOnce).to.be.true; expect(configStub.set.firstCall.args[0]).to.equal('totp'); - expect(configStub.set.firstCall.args[1]).to.deep.include({ - secret: encryptedSecret, - }); + const storedConfig = configStub.set.firstCall.args[1]; + expect(storedConfig).to.have.property('secret', encryptedSecret); + expect(storedConfig).to.have.property('last_updated'); + expect(new Date(storedConfig.last_updated).getTime()).to.equal(now.getTime()); + + clock.restore(); }); it('should cancel when user declines to overwrite existing config', async function () { - configStub.get.returns({ secret: 'existing-secret' }); + const existingConfig = { + secret: 'existing-secret', + last_updated: new Date().toISOString() + }; + configStub.get.returns(existingConfig); inquireStub.returns(Promise.resolve(false)); authenticatorStub.check.returns(true); authenticatorStub.generate.returns('123456'); @@ -80,7 +90,6 @@ describe('TOTP Commands', function () { await TotpAddCommand.run(['--secret', validSecret]); expect(configStub.set.called).to.be.false; expect(inquireStub.calledOnce).to.be.true; - expect(inquireStub.calledOnce).to.be.true; }); it('should fail with invalid secret format', async function () { @@ -115,7 +124,7 @@ describe('TOTP Commands', function () { expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to encrypt TOTP secret'); + expect(err.message).to.contain('Failed to store TOTP secret'); } }); @@ -194,7 +203,11 @@ describe('TOTP Commands', function () { const decryptedSecret = 'JBSWY3DPEHPK3PXP'; it('should remove TOTP configuration successfully', async function () { - configStub.get.returns({ secret: encryptedSecret }); + const config = { + secret: encryptedSecret, + last_updated: new Date().toISOString() + }; + configStub.get.returns(config); encrypterStub.decrypt.returns(decryptedSecret); inquireStub.returns(Promise.resolve(true)); @@ -324,7 +337,7 @@ describe('TOTP Commands', function () { expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to read TOTP configuration'); + expect(err.message).to.contain('Failed to remove TOTP configuration'); } }); diff --git a/packages/contentstack-config/test/unit/services/totp.service.test.ts b/packages/contentstack-config/test/unit/services/totp.service.test.ts index 6341f6af25..2c937e5b64 100644 --- a/packages/contentstack-config/test/unit/services/totp.service.test.ts +++ b/packages/contentstack-config/test/unit/services/totp.service.test.ts @@ -159,10 +159,28 @@ describe('TOTP Service', () => { }); describe('storeConfig', () => { - it('should store config successfully', () => { + it('should store config with valid ISO timestamp', () => { const config = { secret: 'encrypted-secret|iv' }; totpService.storeConfig(config); - expect(configStub.set.calledWith('totp', config)).to.be.true; + + const storedConfig = configStub.set.firstCall.args[1]; + expect(storedConfig.last_updated).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/); + expect(() => new Date(storedConfig.last_updated)).to.not.throw(); + }); + it('should store config successfully with last_updated', () => { + const config = { secret: 'encrypted-secret|iv' }; + const now = new Date(); + const clock = sinon.useFakeTimers(now.getTime()); + + totpService.storeConfig(config); + + expect(configStub.set.calledOnce).to.be.true; + const storedConfig = configStub.set.firstCall.args[1]; + expect(storedConfig).to.have.property('secret', 'encrypted-secret|iv'); + expect(storedConfig).to.have.property('last_updated'); + expect(new Date(storedConfig.last_updated).getTime()).to.equal(now.getTime()); + + clock.restore(); }); it('should handle storage errors', () => { From f539bfbd7c45dad7bc4ed490e7cdc92a57d5ed46 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Mon, 11 Aug 2025 14:43:48 +0530 Subject: [PATCH 17/23] Fixed the test cases --- .talismanrc | 7 ++++- .../src/commands/config/totp/add.ts | 13 +++++----- .../src/commands/config/totp/remove.ts | 19 +++++++------- .../src/services/totp/totp.service.ts | 26 ++++++++----------- .../test/unit/commands/totp.test.ts | 16 ++++++------ .../test/unit/services/totp.service.test.ts | 12 ++++----- 6 files changed, 46 insertions(+), 47 deletions(-) diff --git a/.talismanrc b/.talismanrc index 3401062686..53da45a9c1 100644 --- a/.talismanrc +++ b/.talismanrc @@ -41,4 +41,9 @@ fileignoreconfig: checksum: 3c9e7e43bebec8683b4af2ed2b28ed71c24cf0e7e7379aa7acceee620d2cc310 - filename: packages/contentstack-config/test/unit/services/totp.service.test.ts checksum: 68a9e64134c5972828d6c1e65d6975b6200f36a0edab3ee6e4df05445a52f941 -version: "1.0" \ No newline at end of file +- filename: packages/contentstack-config/src/services/totp/totp.service.ts + checksum: 63aeb5dc49a60c195a5cfcefd52aeb276f0bb5227152d44c7d6305b0dbf7bee5 +- filename: packages/contentstack-config/src/commands/config/totp/remove.ts + checksum: 17f6576f90d3b30f37c5ef1318b188db2c70ab31e7fdedc3c94807d1eb822a8b +version: "1.0" + diff --git a/packages/contentstack-config/src/commands/config/totp/add.ts b/packages/contentstack-config/src/commands/config/totp/add.ts index 79b41af866..0a54009689 100644 --- a/packages/contentstack-config/src/commands/config/totp/add.ts +++ b/packages/contentstack-config/src/commands/config/totp/add.ts @@ -30,14 +30,13 @@ export default class AddTOTPCommand extends BaseCommand { const { flags } = await this.parse(AddTOTPCommand); let secret = flags.secret; - // Validate and normalize secret if (!secret) { secret = await cliux.inquire({ type: 'password', name: 'secret', - message: 'Enter your TOTP secret:', + message: 'Enter your secret:', validate: (input: string) => { - if (!input) return 'TOTP secret is required'; + if (!input) return 'Secret is required'; if (!this.totpService.validateSecret(input)) return 'Invalid TOTP secret format'; return true; }, @@ -55,7 +54,7 @@ export default class AddTOTPCommand extends BaseCommand { const confirm = await cliux.inquire({ type: 'confirm', name: 'confirm', - message: 'TOTP configuration already exists. Do you want to overwrite it?', + message: 'Secret configuration already exists. Do you want to overwrite it?', }); if (!confirm) { @@ -68,18 +67,18 @@ export default class AddTOTPCommand extends BaseCommand { try { const encryptedSecret = this.totpService.encryptSecret(secret); this.totpService.storeConfig({ secret: encryptedSecret }); - cliux.success('TOTP secret has been stored successfully'); + cliux.success('Secret has been stored successfully'); } catch (error) { if (error instanceof TOTPError) { throw error; } - throw new TOTPError('Failed to store TOTP secret'); + throw new TOTPError('Failed to store configuration'); } } catch (error) { if (error instanceof TOTPError) { cliux.error(error.message); } else { - cliux.error('Failed to store TOTP secret'); + cliux.error('Failed to store configuration'); } throw error; } diff --git a/packages/contentstack-config/src/commands/config/totp/remove.ts b/packages/contentstack-config/src/commands/config/totp/remove.ts index 6cbfa35ddf..01f87c017d 100644 --- a/packages/contentstack-config/src/commands/config/totp/remove.ts +++ b/packages/contentstack-config/src/commands/config/totp/remove.ts @@ -5,7 +5,7 @@ import { TOTPError } from '../../../services/totp/types'; import { Flags } from '@oclif/core'; export default class RemoveTOTPCommand extends BaseCommand { - static readonly description = 'Remove stored TOTP secret'; + static readonly description = 'Remove stored secret'; static readonly examples = [ '$ csdx config:totp:remove', @@ -31,18 +31,17 @@ export default class RemoveTOTPCommand extends BaseCommand { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to encrypt TOTP secret'); + expect((error as TOTPError).message).to.equal('Failed to encrypt secret'); }); it('should normalize secret before encryption', () => { @@ -123,7 +123,7 @@ describe('TOTP Service', () => { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to decrypt TOTP secret'); + expect((error as TOTPError).message).to.equal('Failed to decrypt secret'); }); }); @@ -154,7 +154,7 @@ describe('TOTP Service', () => { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to read TOTP configuration'); + expect((error as TOTPError).message).to.equal('Failed to read configuration'); }); }); @@ -193,7 +193,7 @@ describe('TOTP Service', () => { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to store TOTP configuration'); + expect((error as TOTPError).message).to.equal('Failed to store configuration'); }); }); @@ -213,7 +213,7 @@ describe('TOTP Service', () => { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to remove TOTP configuration'); + expect((error as TOTPError).message).to.equal('Failed to remove configuration'); }); }); @@ -237,7 +237,7 @@ describe('TOTP Service', () => { error = err; } expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to generate TOTP code'); + expect((error as TOTPError).message).to.equal('Failed to generate code'); }); it('should normalize secret before generation', () => { From d3f2a47f2c7c33d1c4f6c0678ffb187d19fbf948 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 14:42:23 +0530 Subject: [PATCH 18/23] Changed the totp to MFA --- .talismanrc | 8 + .../src/commands/config/{totp => mfa}/add.ts | 40 +-- .../commands/config/{totp => mfa}/remove.ts | 34 +-- .../src/services/mfa/mfa-service.interface.ts | 12 + .../totp.service.ts => mfa/mfa.service.ts} | 53 ++-- .../src/services/mfa/mfa.types.ts | 17 ++ .../src/services/mfa/types.ts | 20 ++ .../services/totp/totp-service.interface.ts | 12 - .../src/services/totp/totp.types.ts | 17 -- .../src/services/totp/types.ts | 26 -- .../commands/{totp.test.ts => mfa.test.ts} | 127 ++++---- .../test/unit/services/mfa.service.test.ts | 252 ++++++++++++++++ .../test/unit/services/totp.service.test.ts | 279 ------------------ 13 files changed, 431 insertions(+), 466 deletions(-) rename packages/contentstack-config/src/commands/config/{totp => mfa}/add.ts (54%) rename packages/contentstack-config/src/commands/config/{totp => mfa}/remove.ts (64%) create mode 100644 packages/contentstack-config/src/services/mfa/mfa-service.interface.ts rename packages/contentstack-config/src/services/{totp/totp.service.ts => mfa/mfa.service.ts} (63%) create mode 100644 packages/contentstack-config/src/services/mfa/mfa.types.ts create mode 100644 packages/contentstack-config/src/services/mfa/types.ts delete mode 100644 packages/contentstack-config/src/services/totp/totp-service.interface.ts delete mode 100644 packages/contentstack-config/src/services/totp/totp.types.ts delete mode 100644 packages/contentstack-config/src/services/totp/types.ts rename packages/contentstack-config/test/unit/commands/{totp.test.ts => mfa.test.ts} (73%) create mode 100644 packages/contentstack-config/test/unit/services/mfa.service.test.ts delete mode 100644 packages/contentstack-config/test/unit/services/totp.service.test.ts diff --git a/.talismanrc b/.talismanrc index 53da45a9c1..7da36c3bfe 100644 --- a/.talismanrc +++ b/.talismanrc @@ -45,5 +45,13 @@ fileignoreconfig: checksum: 63aeb5dc49a60c195a5cfcefd52aeb276f0bb5227152d44c7d6305b0dbf7bee5 - filename: packages/contentstack-config/src/commands/config/totp/remove.ts checksum: 17f6576f90d3b30f37c5ef1318b188db2c70ab31e7fdedc3c94807d1eb822a8b +- filename: packages/contentstack-config/src/services/mfa/types.ts + checksum: 2817710204fc907642803e514bb51df506f60a196d00548362e7178a3bf21208 +- filename: packages/contentstack-config/src/services/mfa/mfa-service.interface.ts + checksum: 68158e62e4e5f6d51538bed0789074a4f595f1e4b3a37e82edce6afe5b69bc30 +- filename: packages/contentstack-config/src/services/totp/types.ts + checksum: 3aaf2a825de2e8876590518bb6a5ae8f964d5d33188cbd44c3a8555507424a32 +- filename: packages/contentstack-config/test/unit/services/mfa.service.test.ts + checksum: 8ba652904813cc27d5be3c7829588c3f4b0a3b3fab50439676690fe95a1d4733 version: "1.0" diff --git a/packages/contentstack-config/src/commands/config/totp/add.ts b/packages/contentstack-config/src/commands/config/mfa/add.ts similarity index 54% rename from packages/contentstack-config/src/commands/config/totp/add.ts rename to packages/contentstack-config/src/commands/config/mfa/add.ts index 0a54009689..bf34a400ad 100644 --- a/packages/contentstack-config/src/commands/config/totp/add.ts +++ b/packages/contentstack-config/src/commands/config/mfa/add.ts @@ -1,33 +1,33 @@ import { cliux } from '@contentstack/cli-utilities'; import { Flags } from '@oclif/core'; import { BaseCommand } from '../../../base-command'; -import { TOTPService } from '../../../services/totp/totp.service'; -import { TOTPError } from '../../../services/totp/types'; +import { MFAService } from '../../../services/mfa/mfa.service'; +import { MFAError } from '../../../services/mfa/mfa.types'; -export default class AddTOTPCommand extends BaseCommand { - static readonly description = 'Add TOTP secret for 2FA authentication'; +export default class AddMFACommand extends BaseCommand { + static readonly description = 'Add MFA secret for 2FA authentication'; static readonly examples = [ - '$ csdx config:totp:add', + '$ csdx config:mfa:add', ]; - private readonly totpService: TOTPService; + private readonly mfaService: MFAService; constructor(argv: string[], config: any) { super(argv, config); - this.totpService = new TOTPService(); + this.mfaService = new MFAService(); } static readonly flags = { secret: Flags.string({ - description: 'TOTP secret for 2FA authentication', + description: 'MFA secret for 2FA authentication', required: false, }), }; async run(): Promise { try { - const { flags } = await this.parse(AddTOTPCommand); + const { flags } = await this.parse(AddMFACommand); let secret = flags.secret; if (!secret) { @@ -37,19 +37,19 @@ export default class AddTOTPCommand extends BaseCommand { message: 'Enter your secret:', validate: (input: string) => { if (!input) return 'Secret is required'; - if (!this.totpService.validateSecret(input)) return 'Invalid TOTP secret format'; + if (!this.mfaService.validateSecret(input)) return 'Invalid secret format'; return true; }, }); } // Validate secret if provided via flag - if (!secret || !this.totpService.validateSecret(secret)) { - throw new TOTPError('Invalid TOTP secret format'); + if (!secret || !this.mfaService.validateSecret(secret)) { + throw new MFAError('Invalid secret format'); } - // Check if TOTP configuration already exists - const existingConfig = this.totpService.getStoredConfig(); + // Check if MFA configuration already exists + const existingConfig = this.mfaService.getStoredConfig(); if (existingConfig) { const confirm = await cliux.inquire({ type: 'confirm', @@ -65,20 +65,20 @@ export default class AddTOTPCommand extends BaseCommand { // Encrypt and store the secret try { - const encryptedSecret = this.totpService.encryptSecret(secret); - this.totpService.storeConfig({ secret: encryptedSecret }); + const encryptedSecret = this.mfaService.encryptSecret(secret); + this.mfaService.storeConfig({ secret: encryptedSecret }); cliux.success('Secret has been stored successfully'); } catch (error) { - if (error instanceof TOTPError) { + if (error instanceof MFAError) { throw error; } - throw new TOTPError('Failed to store configuration'); + throw new MFAError('Failed to store secret'); } } catch (error) { - if (error instanceof TOTPError) { + if (error instanceof MFAError) { cliux.error(error.message); } else { - cliux.error('Failed to store configuration'); + cliux.error('Failed to store secret'); } throw error; } diff --git a/packages/contentstack-config/src/commands/config/totp/remove.ts b/packages/contentstack-config/src/commands/config/mfa/remove.ts similarity index 64% rename from packages/contentstack-config/src/commands/config/totp/remove.ts rename to packages/contentstack-config/src/commands/config/mfa/remove.ts index 01f87c017d..cf25137354 100644 --- a/packages/contentstack-config/src/commands/config/totp/remove.ts +++ b/packages/contentstack-config/src/commands/config/mfa/remove.ts @@ -1,15 +1,15 @@ import { cliux } from '@contentstack/cli-utilities'; import { BaseCommand } from '../../../base-command'; -import { TOTPService } from '../../../services/totp/totp.service'; -import { TOTPError } from '../../../services/totp/types'; +import { MFAService } from '../../../services/mfa/mfa.service'; +import { MFAError } from '../../../services/mfa/mfa.types'; import { Flags } from '@oclif/core'; -export default class RemoveTOTPCommand extends BaseCommand { +export default class RemoveMFACommand extends BaseCommand { static readonly description = 'Remove stored secret'; static readonly examples = [ - '$ csdx config:totp:remove', - '$ csdx config:totp:remove -y', + '$ csdx config:mfa:remove', + '$ csdx config:mfa:remove -y', ]; static readonly flags = { @@ -20,34 +20,34 @@ export default class RemoveTOTPCommand extends BaseCommand { try { - const { flags } = await this.parse(RemoveTOTPCommand); + const { flags } = await this.parse(RemoveMFACommand); let config; try { - config = this.totpService.getStoredConfig(); + config = this.mfaService.getStoredConfig(); if (!config?.secret) { - throw new TOTPError('Failed to remove configuration'); + throw new MFAError('Failed to remove secret configuration'); } } catch (error) { - if (error instanceof TOTPError) { + if (error instanceof MFAError) { throw error; } - throw new TOTPError('Failed to remove configuration'); + throw new MFAError('Failed to remove secret configuration'); } // Verify the configuration is valid let isCorrupted = false; try { - this.totpService.decryptSecret(config.secret); + this.mfaService.decryptSecret(config.secret); } catch (error) { this.logger.debug('Failed to decrypt secret', { error }); isCorrupted = true; @@ -73,17 +73,17 @@ export default class RemoveTOTPCommand extends BaseCommand): void; + removeConfig(): void; + generateMFA(secret: string): string; + verifyMFA(secret: string, token: string): boolean; +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp.service.ts b/packages/contentstack-config/src/services/mfa/mfa.service.ts similarity index 63% rename from packages/contentstack-config/src/services/totp/totp.service.ts rename to packages/contentstack-config/src/services/mfa/mfa.service.ts index adcf5e72c8..5d6ec102a3 100644 --- a/packages/contentstack-config/src/services/totp/totp.service.ts +++ b/packages/contentstack-config/src/services/mfa/mfa.service.ts @@ -1,9 +1,9 @@ import { configHandler, NodeCrypto, log } from '@contentstack/cli-utilities'; import { authenticator } from 'otplib'; -import { TOTPConfig, TOTPError } from './totp.types'; -import { ITOTPService } from './totp-service.interface'; +import { MFAConfig, MFAError } from './mfa.types'; +import { IMFAService } from './mfa-service.interface'; -export class TOTPService implements ITOTPService { +export class MFAService implements IMFAService { private readonly encrypter: NodeCrypto; private readonly logger = log; @@ -28,15 +28,19 @@ export class TOTPService implements ITOTPService { return false; } - const paddingRegex = /=+$/; + // Check padding - must be 0, 2, 4, 5, 6, or 7 equals signs + const paddingRegex = /=*$/; const paddingMatch = paddingRegex.exec(normalizedSecret); if (paddingMatch) { const paddingLength = paddingMatch[0].length; - const unpadded = normalizedSecret.slice(0, -paddingLength); - if (paddingLength > 6 || unpadded.length % 8 !== 0) { + if (paddingLength === 1 || paddingLength === 3 || paddingLength > 7) { return false; } - } else if (normalizedSecret.length % 8 !== 0) { + } + + // Check that the length without padding is a multiple of 8 + const unpaddedLength = normalizedSecret.replace(/=+$/, '').length; + if (unpaddedLength % 8 !== 0) { return false; } @@ -54,7 +58,7 @@ export class TOTPService implements ITOTPService { return this.encrypter.encrypt(secret.trim().toUpperCase()); } catch (error) { this.logger.error('Secret encryption failed', { error }); - throw new TOTPError('Failed to encrypt secret'); + throw new MFAError('Failed to encrypt secret'); } } @@ -63,53 +67,52 @@ export class TOTPService implements ITOTPService { return this.encrypter.decrypt(encryptedSecret); } catch (error) { this.logger.error('Secret decryption failed', { error }); - throw new TOTPError('Failed to decrypt secret'); + throw new MFAError('Failed to decrypt secret'); } } - getStoredConfig(): TOTPConfig | null { + getStoredConfig(): MFAConfig | null { try { - const config = configHandler.get('totp'); - return config?.secret ? config as TOTPConfig : null; + const config = configHandler.get('mfa'); + return config?.secret ? config as MFAConfig : null; } catch (error) { this.logger.error('Failed to read config', { error }); - throw new TOTPError('Failed to read configuration'); + throw new MFAError('Failed to read configuration'); } } - storeConfig(config: Partial): void { + storeConfig(config: Partial): void { try { - const updatedConfig: TOTPConfig = { - ...config, - last_updated: new Date().toISOString(), - secret: config.secret! + const updatedConfig: MFAConfig = { + secret: config.secret!, + last_updated: new Date().toISOString() }; - configHandler.set('totp', updatedConfig); + configHandler.set('mfa', updatedConfig); } catch (error) { this.logger.error('Failed to store config', { error }); - throw new TOTPError('Failed to store configuration'); + throw new MFAError('Failed to store configuration'); } } removeConfig(): void { try { - configHandler.delete('totp'); + configHandler.delete('mfa'); } catch (error) { this.logger.error('Failed to remove config', { error }); - throw new TOTPError('Failed to remove configuration'); + throw new MFAError('Failed to remove configuration'); } } - generateTOTP(secret: string): string { + generateMFA(secret: string): string { try { return authenticator.generate(secret.trim().toUpperCase()); } catch (error) { this.logger.error('Failed to generate code', { error }); - throw new TOTPError('Failed to generate code'); + throw new MFAError('Failed to generate code'); } } - verifyTOTP(secret: string, token: string): boolean { + verifyMFA(secret: string, token: string): boolean { try { return authenticator.check(token, secret.trim().toUpperCase()); } catch (error) { diff --git a/packages/contentstack-config/src/services/mfa/mfa.types.ts b/packages/contentstack-config/src/services/mfa/mfa.types.ts new file mode 100644 index 0000000000..a609fa90e8 --- /dev/null +++ b/packages/contentstack-config/src/services/mfa/mfa.types.ts @@ -0,0 +1,17 @@ +export interface MFAConfig { + secret: string; + last_updated: string; +} + +export interface MFAValidationResult { + isValid: boolean; + error?: string; +} + +export class MFAError extends Error { + constructor(message: string) { + super(message); + this.name = 'MFAError'; + Object.setPrototypeOf(this, MFAError.prototype); + } +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/mfa/types.ts b/packages/contentstack-config/src/services/mfa/types.ts new file mode 100644 index 0000000000..4294c8e83f --- /dev/null +++ b/packages/contentstack-config/src/services/mfa/types.ts @@ -0,0 +1,20 @@ +export interface MFAConfig { + secret: string; + last_updated: string; +} + +export interface MFAValidationResult { + isValid: boolean; + error?: string; +} + +export interface IMFAService { + validateSecret(secret: string): boolean; + encryptSecret(secret: string): string; + decryptSecret(encryptedSecret: string): string; + getStoredConfig(): MFAConfig | null; + storeConfig(config: MFAConfig): void; + removeConfig(): void; + generateMFA(secret: string): string; + verifyMFA(secret: string, token: string): boolean; +} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp-service.interface.ts b/packages/contentstack-config/src/services/totp/totp-service.interface.ts deleted file mode 100644 index 09e7fab8bb..0000000000 --- a/packages/contentstack-config/src/services/totp/totp-service.interface.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TOTPConfig } from './totp.types'; - -export interface ITOTPService { - validateSecret(secret: string): boolean; - encryptSecret(secret: string): string; - decryptSecret(encryptedSecret: string): string; - getStoredConfig(): TOTPConfig | null; - storeConfig(config: Partial): void; - removeConfig(): void; - generateTOTP(secret: string): string; - verifyTOTP(secret: string, token: string): boolean; -} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/totp.types.ts b/packages/contentstack-config/src/services/totp/totp.types.ts deleted file mode 100644 index 9e34470748..0000000000 --- a/packages/contentstack-config/src/services/totp/totp.types.ts +++ /dev/null @@ -1,17 +0,0 @@ -export interface TOTPConfig { - secret: string; - last_updated: string; -} - -export interface TOTPValidationResult { - isValid: boolean; - error?: string; -} - -export class TOTPError extends Error { - constructor(message: string) { - super(message); - this.name = 'TOTPError'; - Object.setPrototypeOf(this, TOTPError.prototype); - } -} \ No newline at end of file diff --git a/packages/contentstack-config/src/services/totp/types.ts b/packages/contentstack-config/src/services/totp/types.ts deleted file mode 100644 index af028a0ac8..0000000000 --- a/packages/contentstack-config/src/services/totp/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -export interface TOTPConfig { - secret: string; -} - -export interface TOTPValidationResult { - isValid: boolean; - error?: string; -} - -export class TOTPError extends Error { - constructor(message: string) { - super(message); - this.name = 'TOTPError'; - } -} - -export interface ITOTPService { - validateSecret(secret: string): boolean; - encryptSecret(secret: string): string; - decryptSecret(encryptedSecret: string): string; - getStoredConfig(): TOTPConfig | null; - storeConfig(config: TOTPConfig): void; - removeConfig(): void; - generateTOTP(secret: string): string; - verifyTOTP(secret: string, token: string): boolean; -} \ No newline at end of file diff --git a/packages/contentstack-config/test/unit/commands/totp.test.ts b/packages/contentstack-config/test/unit/commands/mfa.test.ts similarity index 73% rename from packages/contentstack-config/test/unit/commands/totp.test.ts rename to packages/contentstack-config/test/unit/commands/mfa.test.ts index d06318579f..b6ff0ca558 100644 --- a/packages/contentstack-config/test/unit/commands/totp.test.ts +++ b/packages/contentstack-config/test/unit/commands/mfa.test.ts @@ -2,10 +2,10 @@ import { expect } from 'chai'; import { configHandler, cliux, NodeCrypto } from '@contentstack/cli-utilities'; import { authenticator } from 'otplib'; import * as sinon from 'sinon'; -import TotpAddCommand from '../../../src/commands/config/totp/add'; -import TotpRemoveCommand from '../../../src/commands/config/totp/remove'; +import MFAAddCommand from '../../../src/commands/config/mfa/add'; +import MFARemoveCommand from '../../../src/commands/config/mfa/remove'; -describe('TOTP Commands', function () { +describe('MFA Commands', function () { let inquireStub: sinon.SinonStub; let configStub: { get: sinon.SinonStub; @@ -36,7 +36,7 @@ describe('TOTP Commands', function () { sinon.restore(); }); - describe('config:totp:add', function () { + describe('config:mfa:add', function () { const validSecret = 'JBSWY3DPEHPK3PXP'; // Example valid Base32 secret const encryptedSecret = 'encrypted-secret|iv'; const validSecrets = [ @@ -56,60 +56,51 @@ describe('TOTP Commands', function () { 'JBSWY3DPEHPK3PXP ', // Trailing space ]; - it('should add TOTP configuration successfully with last_updated', async function () { + it('should add MFA configuration successfully', async function () { configStub.get.returns(null); encrypterStub.encrypt.returns(encryptedSecret); authenticatorStub.generate.returns('123456'); authenticatorStub.check.returns(true); inquireStub.returns(Promise.resolve(true)); - const now = new Date(); - const clock = sinon.useFakeTimers(now.getTime()); - - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect(configStub.set.calledOnce).to.be.true; - expect(configStub.set.firstCall.args[0]).to.equal('totp'); - const storedConfig = configStub.set.firstCall.args[1]; - expect(storedConfig).to.have.property('secret', encryptedSecret); - expect(storedConfig).to.have.property('last_updated'); - expect(new Date(storedConfig.last_updated).getTime()).to.equal(now.getTime()); - - clock.restore(); + expect(configStub.set.firstCall.args[0]).to.equal('mfa'); + expect(configStub.set.firstCall.args[1]).to.deep.include({ + secret: encryptedSecret, + }); }); it('should cancel when user declines to overwrite existing config', async function () { - const existingConfig = { - secret: 'existing-secret', - last_updated: new Date().toISOString() - }; - configStub.get.returns(existingConfig); + configStub.get.returns({ secret: 'existing-secret' }); inquireStub.returns(Promise.resolve(false)); authenticatorStub.check.returns(true); authenticatorStub.generate.returns('123456'); - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect(configStub.set.called).to.be.false; expect(inquireStub.calledOnce).to.be.true; + expect(inquireStub.calledOnce).to.be.true; }); it('should fail with invalid secret format', async function () { try { - await TotpAddCommand.run(['--secret', 'invalid!@#']); + await MFAAddCommand.run(['--secret', 'invalid!@#']); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Invalid TOTP secret format'); + expect(err.message).to.contain('Invalid secret format'); } }); it('should fail when secret cannot generate valid codes', async function () { authenticatorStub.check.returns(false); try { - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Invalid TOTP secret format'); + expect(err.message).to.contain('Invalid secret format'); } }); @@ -120,11 +111,11 @@ describe('TOTP Commands', function () { encrypterStub.encrypt.throws(new Error('Encryption failed')); try { - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to store configuration'); + expect(err.message).to.contain('Failed to encrypt secret'); } }); @@ -136,7 +127,7 @@ describe('TOTP Commands', function () { authenticatorStub.generate.returns('123456'); encrypterStub.encrypt.returns(encryptedSecret); - await TotpAddCommand.run(['--secret', secret]); + await MFAAddCommand.run(['--secret', secret]); expect(configStub.set.calledOnce).to.be.true; }); }); @@ -145,32 +136,32 @@ describe('TOTP Commands', function () { invalidSecrets.forEach((secret) => { it(`should reject invalid secret format: ${secret}`, async function () { try { - await TotpAddCommand.run(['--secret', secret]); + await MFAAddCommand.run(['--secret', secret]); expect.fail('Should have thrown an error'); } catch (error: unknown) { - const err = error as Error; - expect(err.message).to.contain('Invalid TOTP secret format'); + const err = error as Error; + expect(err.message).to.contain('Invalid secret format'); } }); }); it('should handle missing secret flag', async function () { try { - await TotpAddCommand.run([]); + await MFAAddCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Invalid TOTP secret format'); + expect(err.message).to.contain('Invalid secret format'); } }); it('should handle empty secret value', async function () { try { - await TotpAddCommand.run(['--secret', '']); + await MFAAddCommand.run(['--secret', '']); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Invalid TOTP secret format'); + expect(err.message).to.contain('Invalid secret format'); } }); @@ -181,7 +172,7 @@ describe('TOTP Commands', function () { authenticatorStub.generate.returns(testCode); encrypterStub.encrypt.returns(encryptedSecret); - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect(authenticatorStub.generate.calledWith(validSecret)).to.be.true; expect(configStub.set.calledOnce).to.be.true; }); @@ -193,37 +184,33 @@ describe('TOTP Commands', function () { authenticatorStub.generate.returns('123456'); inquireStub.returns(Promise.resolve(true)); - await TotpAddCommand.run(['--secret', validSecret]); + await MFAAddCommand.run(['--secret', validSecret]); expect(configStub.set.calledOnce).to.be.true; }); }); - describe('config:totp:remove', function () { + describe('config:mfa:remove', function () { const encryptedSecret = 'encrypted-secret|iv'; const decryptedSecret = 'JBSWY3DPEHPK3PXP'; - it('should remove TOTP configuration successfully', async function () { - const config = { - secret: encryptedSecret, - last_updated: new Date().toISOString() - }; - configStub.get.returns(config); + it('should remove MFA configuration successfully', async function () { + configStub.get.returns({ secret: encryptedSecret }); encrypterStub.decrypt.returns(decryptedSecret); inquireStub.returns(Promise.resolve(true)); - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect(configStub.delete.called).to.be.true; - expect(configStub.delete.firstCall.args[0]).to.equal('totp'); + expect(configStub.delete.firstCall.args[0]).to.equal('mfa'); }); it('should fail when no configuration exists', async function () { configStub.get.returns(null); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.equal('Failed to remove configuration'); + expect(err.message).to.equal('Failed to remove secret configuration'); expect(configStub.delete.called).to.be.false; } }); @@ -233,7 +220,7 @@ describe('TOTP Commands', function () { encrypterStub.decrypt.throws(new Error('Decryption failed')); inquireStub.returns(Promise.resolve(false)); - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect(configStub.delete.called).to.be.false; }); @@ -242,70 +229,70 @@ describe('TOTP Commands', function () { encrypterStub.decrypt.returns(decryptedSecret); inquireStub.returns(Promise.resolve(false)); - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect(configStub.delete.called).to.be.false; }); it('should remove configuration without confirmation when forced', async function () { configStub.get.returns({ secret: encryptedSecret }); - await TotpRemoveCommand.run(['-y']); + await MFARemoveCommand.run(['-y']); expect(configStub.delete.called).to.be.true; - expect(configStub.delete.firstCall.args[0]).to.equal('totp'); + expect(configStub.delete.firstCall.args[0]).to.equal('mfa'); }); it('should handle deletion errors', async function () { configStub.get.returns({ secret: encryptedSecret }); configStub.delete.throws(new Error('Delete failed')); try { - await TotpRemoveCommand.run(['-y']); + await MFARemoveCommand.run(['-y']); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to remove secret configuration'); } }); it('should handle invalid config format', async function () { configStub.get.returns({ invalid: 'config' }); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to remove secret configuration'); } }); it('should handle null secret in config', async function () { configStub.get.returns({ secret: null }); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to remove secret configuration'); } }); it('should handle undefined secret in config', async function () { configStub.get.returns({ secret: undefined }); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to remove secret configuration'); } }); it('should handle empty string secret in config', async function () { configStub.get.returns({ secret: '' }); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to remove secret configuration'); } }); @@ -318,7 +305,7 @@ describe('TOTP Commands', function () { // Second prompt: "Are you sure?" inquireStub.onSecondCall().returns(Promise.resolve(true)); - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect(configStub.delete.called).to.be.true; }); @@ -326,18 +313,18 @@ describe('TOTP Commands', function () { configStub.get.returns({ secret: encryptedSecret }); encrypterStub.decrypt.throws(new Error('Decryption failed')); - await TotpRemoveCommand.run(['-y']); + await MFARemoveCommand.run(['-y']); expect(configStub.delete.called).to.be.true; }); it('should handle config.get throwing an error', async function () { configStub.get.throws(new Error('Failed to read config')); try { - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; - expect(err.message).to.contain('Failed to remove configuration'); + expect(err.message).to.contain('Failed to read configuration'); } }); @@ -349,13 +336,13 @@ describe('TOTP Commands', function () { encrypterStub.decrypt.onSecondCall().returns(decryptedSecret); inquireStub.returns(Promise.resolve(true)); - await TotpRemoveCommand.run([]); + await MFARemoveCommand.run([]); expect(configStub.delete.called).to.be.true; }); it('should handle invalid flags', async function () { try { - await TotpRemoveCommand.run(['--invalid-flag']); + await MFARemoveCommand.run(['--invalid-flag']); expect.fail('Should have thrown an error'); } catch (error: unknown) { const err = error as Error; @@ -363,4 +350,4 @@ describe('TOTP Commands', function () { } }); }); -}); \ No newline at end of file +}); diff --git a/packages/contentstack-config/test/unit/services/mfa.service.test.ts b/packages/contentstack-config/test/unit/services/mfa.service.test.ts new file mode 100644 index 0000000000..4b618bd362 --- /dev/null +++ b/packages/contentstack-config/test/unit/services/mfa.service.test.ts @@ -0,0 +1,252 @@ +import { expect } from 'chai'; +import { configHandler, NodeCrypto } from '@contentstack/cli-utilities'; +import { authenticator } from 'otplib'; +import * as sinon from 'sinon'; +import { MFAService } from '../../../src/services/mfa/mfa.service'; +import { MFAError } from '../../../src/services/mfa/mfa.types'; + +describe('MFA Service', () => { + let mfaService: MFAService; + let configStub: { + get: sinon.SinonStub; + set: sinon.SinonStub; + delete: sinon.SinonStub; + }; + let encrypterStub: sinon.SinonStubbedInstance; + let authenticatorStub: { + generate: sinon.SinonStub; + check: sinon.SinonStub; + }; + + beforeEach(() => { + configStub = { + get: sinon.stub(configHandler, 'get'), + set: sinon.stub(configHandler, 'set'), + delete: sinon.stub(configHandler, 'delete'), + }; + encrypterStub = sinon.stub(NodeCrypto.prototype); + authenticatorStub = { + generate: sinon.stub(authenticator, 'generate'), + check: sinon.stub(authenticator, 'check'), + }; + mfaService = new MFAService(); + }); + + afterEach(() => { + sinon.restore(); + }); + + describe('validateSecret', () => { + const validSecrets = [ + 'JBSWY3DPEHPK3PXP', // Standard length + 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', // Double length + 'JBSWY3DPEHPK3PXP====', // With padding + 'AAAAAAAAAAAAAAAA', // Minimum length + ]; + + const invalidSecrets = [ + 'invalid!@#', // Invalid characters + 'JBSW', // Too short + '12345678', // Numbers only + 'abcdefgh', // Lowercase + 'JBSWY3DPEHPK3PXP=', // Invalid padding + '', // Empty string + ' JBSWY3DPEHPK3PXP', // Leading space + 'JBSWY3DPEHPK3PXP ', // Trailing space + ]; + + validSecrets.forEach((secret) => { + it(`should validate secret: ${secret}`, () => { + authenticatorStub.generate.returns('123456'); + authenticatorStub.check.returns(true); + expect(mfaService.validateSecret(secret)).to.be.true; + }); + }); + + invalidSecrets.forEach((secret) => { + it(`should reject invalid secret: ${secret}`, () => { + expect(mfaService.validateSecret(secret)).to.be.false; + }); + }); + }); + + describe('encryptSecret', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const encrypted = 'encrypted-secret|iv'; + + it('should encrypt secret successfully', () => { + encrypterStub.encrypt.returns(encrypted); + expect(mfaService.encryptSecret(secret)).to.equal(encrypted); + }); + + it('should handle encryption errors', () => { + encrypterStub.encrypt.throws(new Error('Encryption failed')); + try { + mfaService.encryptSecret('JBSWY3DPEHPK3PXP'); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to encrypt secret'); + } + }); + + it('should normalize secret before encryption', () => { + encrypterStub.encrypt.returns(encrypted); + mfaService.encryptSecret(secret); + expect(encrypterStub.encrypt.calledWith(secret.toUpperCase())).to.be.true; + }); + }); + + describe('decryptSecret', () => { + const encrypted = 'encrypted-secret|iv'; + const decrypted = 'JBSWY3DPEHPK3PXP'; + + it('should decrypt secret successfully', () => { + encrypterStub.decrypt.returns(decrypted); + expect(mfaService.decryptSecret(encrypted)).to.equal(decrypted); + }); + + it('should handle decryption errors', () => { + encrypterStub.decrypt.throws(new Error('Decryption failed')); + try { + mfaService.decryptSecret('encrypted-secret|iv'); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to decrypt secret'); + } + }); + }); + + describe('getStoredConfig', () => { + it('should return null when no config exists', () => { + configStub.get.returns(null); + expect(mfaService.getStoredConfig()).to.be.null; + }); + + it('should return null when config has no secret', () => { + configStub.get.returns({}); + expect(mfaService.getStoredConfig()).to.be.null; + }); + + it('should return config when valid', () => { + const config = { secret: 'encrypted', last_updated: new Date().toISOString() }; + configStub.get.returns(config); + expect(mfaService.getStoredConfig()).to.deep.equal(config); + }); + + it('should handle config read errors', () => { + configStub.get.throws(new Error('Read failed')); + try { + mfaService.getStoredConfig(); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to read configuration'); + } + }); + }); + + describe('storeConfig', () => { + const config = { secret: 'encrypted' }; + + it('should store config successfully', () => { + const now = new Date(); + const isoString = now.toISOString(); + const clock = sinon.useFakeTimers(now); + + mfaService.storeConfig(config); + + expect(configStub.set.calledOnce).to.be.true; + expect(configStub.set.firstCall.args[0]).to.equal('mfa'); + expect(configStub.set.firstCall.args[1]).to.deep.equal({ + secret: config.secret, + last_updated: isoString + }); + + clock.restore(); + }); + + it('should handle store errors', () => { + configStub.set.throws(new Error('Store failed')); + try { + mfaService.storeConfig({ secret: 'encrypted' }); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to store configuration'); + } + }); + }); + + describe('removeConfig', () => { + it('should remove config successfully', () => { + mfaService.removeConfig(); + expect(configStub.delete.calledWith('mfa')).to.be.true; + }); + + it('should handle remove errors', () => { + configStub.delete.throws(new Error('Delete failed')); + try { + mfaService.removeConfig(); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to remove configuration'); + } + }); + }); + + describe('generateMFA', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const code = '123456'; + + it('should generate MFA code successfully', () => { + authenticatorStub.generate.returns(code); + expect(mfaService.generateMFA(secret)).to.equal(code); + }); + + it('should handle generate errors', () => { + authenticatorStub.generate.throws(new Error('Generate failed')); + try { + mfaService.generateMFA('JBSWY3DPEHPK3PXP'); + expect.fail('Should have thrown an error'); + } catch (error) { + expect(error).to.be.an('error').with.property('name', 'MFAError'); + expect((error as MFAError).message).to.equal('Failed to generate code'); + } + }); + + it('should normalize secret before generating code', () => { + authenticatorStub.generate.returns(code); + mfaService.generateMFA(secret); + expect(authenticatorStub.generate.calledWith(secret.toUpperCase())).to.be.true; + }); + }); + + describe('verifyMFA', () => { + const secret = 'JBSWY3DPEHPK3PXP'; + const token = '123456'; + + it('should verify MFA code successfully', () => { + authenticatorStub.check.returns(true); + expect(mfaService.verifyMFA(secret, token)).to.be.true; + }); + + it('should return false for invalid code', () => { + authenticatorStub.check.returns(false); + expect(mfaService.verifyMFA('JBSWY3DPEHPK3PXP', '123456')).to.be.false; + }); + + it('should handle verify errors gracefully', () => { + authenticatorStub.check.returns(false); + expect(mfaService.verifyMFA('JBSWY3DPEHPK3PXP', '123456')).to.be.false; + }); + + it('should normalize secret before verification', () => { + authenticatorStub.check.returns(true); + mfaService.verifyMFA(secret, token); + expect(authenticatorStub.check.calledWith(token, secret.toUpperCase())).to.be.true; + }); + }); +}); \ No newline at end of file diff --git a/packages/contentstack-config/test/unit/services/totp.service.test.ts b/packages/contentstack-config/test/unit/services/totp.service.test.ts deleted file mode 100644 index a26f5c1371..0000000000 --- a/packages/contentstack-config/test/unit/services/totp.service.test.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { expect } from 'chai'; -import { configHandler, NodeCrypto } from '@contentstack/cli-utilities'; -import { authenticator } from 'otplib'; -import * as sinon from 'sinon'; -import { TOTPService } from '../../../src/services/totp/totp.service'; -import { TOTPError } from '../../../src/services/totp/totp.types'; - -describe('TOTP Service', () => { - let totpService: TOTPService; - let configStub: { - get: sinon.SinonStub; - set: sinon.SinonStub; - delete: sinon.SinonStub; - }; - let encrypterStub: sinon.SinonStubbedInstance; - let authenticatorStub: { - generate: sinon.SinonStub; - check: sinon.SinonStub; - }; - - beforeEach(() => { - totpService = new TOTPService(); - configStub = { - get: sinon.stub(configHandler, 'get'), - set: sinon.stub(configHandler, 'set'), - delete: sinon.stub(configHandler, 'delete') - }; - encrypterStub = sinon.stub(NodeCrypto.prototype); - authenticatorStub = { - generate: sinon.stub(authenticator, 'generate'), - check: sinon.stub(authenticator, 'check') - }; - }); - - afterEach(() => { - sinon.restore(); - }); - - describe('validateSecret', () => { - const validSecrets = [ - 'JBSWY3DPEHPK3PXP', // Standard length - 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', // Double length - 'JBSWY3DPEHPK3PXP====', // With padding - 'AAAAAAAAAAAAAAAA', // Minimum length - ]; - - const invalidSecrets = [ - 'invalid!@#', // Invalid characters - 'JBSW', // Too short - '12345678', // Numbers only - 'abcdefgh', // Lowercase - 'JBSWY3DPEHPK3PXP=', // Invalid padding - '', // Empty string - ' JBSWY3DPEHPK3PXP', // Leading space - 'JBSWY3DPEHPK3PXP ', // Trailing space - ]; - - validSecrets.forEach(secret => { - it(`should validate correct secret format: ${secret}`, () => { - authenticatorStub.generate.returns('123456'); - authenticatorStub.check.returns(true); - expect(totpService.validateSecret(secret)).to.be.true; - }); - }); - - invalidSecrets.forEach(secret => { - it(`should reject invalid secret format: ${secret}`, () => { - authenticatorStub.generate.returns('123456'); - authenticatorStub.check.returns(false); - expect(totpService.validateSecret(secret)).to.be.false; - }); - }); - }); - - describe('encryptSecret', () => { - it('should encrypt secret successfully', () => { - const secret = 'JBSWY3DPEHPK3PXP'; - const encrypted = 'encrypted-secret|iv'; - encrypterStub.encrypt.returns(encrypted); - - expect(totpService.encryptSecret(secret)).to.equal(encrypted); - expect(encrypterStub.encrypt.calledWith(secret)).to.be.true; - }); - - it('should handle encryption errors', () => { - encrypterStub.encrypt.throws(new Error('Encryption failed')); - let error: unknown; - try { - totpService.encryptSecret('JBSWY3DPEHPK3PXP'); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to encrypt secret'); - }); - - it('should normalize secret before encryption', () => { - const secret = ' jbswy3dpehpk3pxp '; - encrypterStub.encrypt.returns('encrypted'); - totpService.encryptSecret(secret); - expect(encrypterStub.encrypt.calledWith('JBSWY3DPEHPK3PXP')).to.be.true; - }); - }); - - describe('decryptSecret', () => { - it('should decrypt secret successfully', () => { - const encrypted = 'encrypted-secret|iv'; - const decrypted = 'JBSWY3DPEHPK3PXP'; - encrypterStub.decrypt.returns(decrypted); - - expect(totpService.decryptSecret(encrypted)).to.equal(decrypted); - expect(encrypterStub.decrypt.calledWith(encrypted)).to.be.true; - }); - - it('should handle decryption errors', () => { - encrypterStub.decrypt.throws(new Error('Decryption failed')); - let error: unknown; - try { - totpService.decryptSecret('encrypted-secret|iv'); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to decrypt secret'); - }); - }); - - describe('getStoredConfig', () => { - it('should return null when no config exists', () => { - configStub.get.returns(null); - expect(totpService.getStoredConfig()).to.be.null; - }); - - it('should return null when config has no secret', () => { - configStub.get.returns({}); - expect(totpService.getStoredConfig()).to.be.null; - }); - - it('should return config when valid', () => { - const config = { secret: 'encrypted-secret|iv' }; - configStub.get.returns(config); - expect(totpService.getStoredConfig()).to.deep.equal(config); - }); - - it('should handle config read errors', () => { - configStub.get.throws(new Error('Read failed')); - let error: unknown; - try { - totpService.getStoredConfig(); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to read configuration'); - }); - }); - - describe('storeConfig', () => { - it('should store config with valid ISO timestamp', () => { - const config = { secret: 'encrypted-secret|iv' }; - totpService.storeConfig(config); - - const storedConfig = configStub.set.firstCall.args[1]; - expect(storedConfig.last_updated).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/); - expect(() => new Date(storedConfig.last_updated)).to.not.throw(); - }); - it('should store config successfully with last_updated', () => { - const config = { secret: 'encrypted-secret|iv' }; - const now = new Date(); - const clock = sinon.useFakeTimers(now.getTime()); - - totpService.storeConfig(config); - - expect(configStub.set.calledOnce).to.be.true; - const storedConfig = configStub.set.firstCall.args[1]; - expect(storedConfig).to.have.property('secret', 'encrypted-secret|iv'); - expect(storedConfig).to.have.property('last_updated'); - expect(new Date(storedConfig.last_updated).getTime()).to.equal(now.getTime()); - - clock.restore(); - }); - - it('should handle storage errors', () => { - configStub.set.throws(new Error('Storage failed')); - let error: unknown; - try { - totpService.storeConfig({ secret: 'encrypted' }); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to store configuration'); - }); - }); - - describe('removeConfig', () => { - it('should remove config successfully', () => { - totpService.removeConfig(); - expect(configStub.delete.calledWith('totp')).to.be.true; - }); - - it('should handle removal errors', () => { - configStub.delete.throws(new Error('Removal failed')); - let error: unknown; - try { - totpService.removeConfig(); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to remove configuration'); - }); - }); - - describe('generateTOTP', () => { - it('should generate TOTP code successfully', () => { - const secret = 'JBSWY3DPEHPK3PXP'; - const code = '123456'; - authenticatorStub.generate.returns(code); - - expect(totpService.generateTOTP(secret)).to.equal(code); - expect(authenticatorStub.generate.calledWith(secret)).to.be.true; - }); - - it('should handle generation errors', () => { - authenticatorStub.generate.throws(new Error('Generation failed')); - let error: unknown; - try { - totpService.generateTOTP('JBSWY3DPEHPK3PXP'); - expect.fail('Should have thrown an error'); - } catch (err) { - error = err; - } - expect(error).to.be.an('error').with.property('name', 'TOTPError'); - expect((error as TOTPError).message).to.equal('Failed to generate code'); - }); - - it('should normalize secret before generation', () => { - const secret = ' jbswy3dpehpk3pxp '; - authenticatorStub.generate.returns('123456'); - totpService.generateTOTP(secret); - expect(authenticatorStub.generate.calledWith('JBSWY3DPEHPK3PXP')).to.be.true; - }); - }); - - describe('verifyTOTP', () => { - it('should verify TOTP code successfully', () => { - const secret = 'JBSWY3DPEHPK3PXP'; - const token = '123456'; - authenticatorStub.check.returns(true); - - expect(totpService.verifyTOTP(secret, token)).to.be.true; - expect(authenticatorStub.check.calledWith(token, secret)).to.be.true; - }); - - it('should return false for invalid code', () => { - authenticatorStub.check.returns(false); - expect(totpService.verifyTOTP('JBSWY3DPEHPK3PXP', '123456')).to.be.false; - }); - - it('should handle verification errors gracefully', () => { - authenticatorStub.check.throws(new Error('Verification failed')); - expect(totpService.verifyTOTP('JBSWY3DPEHPK3PXP', '123456')).to.be.false; - }); - - it('should normalize secret before verification', () => { - const secret = ' jbswy3dpehpk3pxp '; - const token = '123456'; - authenticatorStub.check.returns(true); - totpService.verifyTOTP(secret, token); - expect(authenticatorStub.check.calledWith(token, 'JBSWY3DPEHPK3PXP')).to.be.true; - }); - }); -}); \ No newline at end of file From af47903f46536cd9b4c40ce8ba26818688e6f075 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 15:14:11 +0530 Subject: [PATCH 19/23] Updated talismand and command shortcut name --- .talismanrc | 17 +- package-lock.json | 356 ++++++------- packages/contentstack-config/package.json | 4 +- .../src/commands/config/set/region.ts | 28 +- pnpm-lock.yaml | 498 +++++++++--------- 5 files changed, 445 insertions(+), 458 deletions(-) diff --git a/.talismanrc b/.talismanrc index 7da36c3bfe..3d0d115188 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,10 +1,8 @@ fileignoreconfig: -- filename: pnpm-lock.yaml - checksum: 470990d838d1c5a2ac15ab6114701897013ba801f1b26199911843ec95ef5dcd - filename: package-lock.json - checksum: abf7eaa17745ea602424c7092c9973f794b31be49dbe0fec8a9bbd3e17c6954b + checksum: ddcdc0f28b1df533e26c370f92810f1c877aae48ed2157f8822a1f275adad612 - filename: pnpm-lock.yaml - checksum: 0ca85066946c49994a4353c9f64b8f380d5d2050194e3e57ad7ccd7faa030d36 + checksum: c32024bc35de63368636624ef52c1b0cf6c4e1dbcfa93ced09e57f6e8ca454ca - filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts checksum: 0582d62b88834554cf12951c8690a73ef3ddbb78b82d2804d994cf4148e1ef93 - filename: packages/contentstack-import-setup/test/config.json @@ -37,21 +35,10 @@ fileignoreconfig: checksum: c09f6dc93702caff3adf689b501ec32586a16c865c1fe3a63b53ae645ca22349 - filename: packages/contentstack-import-setup/test/unit/modules/assets.test.ts checksum: 449a5e3383631a6f78d1291aa3c28c91681879289398f0a933158fba5c5d5acf -- filename: packages/contentstack-config/test/unit/commands/totp.test.ts - checksum: 3c9e7e43bebec8683b4af2ed2b28ed71c24cf0e7e7379aa7acceee620d2cc310 -- filename: packages/contentstack-config/test/unit/services/totp.service.test.ts - checksum: 68a9e64134c5972828d6c1e65d6975b6200f36a0edab3ee6e4df05445a52f941 -- filename: packages/contentstack-config/src/services/totp/totp.service.ts - checksum: 63aeb5dc49a60c195a5cfcefd52aeb276f0bb5227152d44c7d6305b0dbf7bee5 -- filename: packages/contentstack-config/src/commands/config/totp/remove.ts - checksum: 17f6576f90d3b30f37c5ef1318b188db2c70ab31e7fdedc3c94807d1eb822a8b - filename: packages/contentstack-config/src/services/mfa/types.ts checksum: 2817710204fc907642803e514bb51df506f60a196d00548362e7178a3bf21208 - filename: packages/contentstack-config/src/services/mfa/mfa-service.interface.ts checksum: 68158e62e4e5f6d51538bed0789074a4f595f1e4b3a37e82edce6afe5b69bc30 -- filename: packages/contentstack-config/src/services/totp/types.ts - checksum: 3aaf2a825de2e8876590518bb6a5ae8f964d5d33188cbd44c3a8555507424a32 - filename: packages/contentstack-config/test/unit/services/mfa.service.test.ts checksum: 8ba652904813cc27d5be3c7829588c3f4b0a3b3fab50439676690fe95a1d4733 version: "1.0" - diff --git a/package-lock.json b/package-lock.json index 6d79ffe10d..e2f586cd6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1817,9 +1817,9 @@ } }, "node_modules/@contentstack/marketplace-sdk": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@contentstack/marketplace-sdk/-/marketplace-sdk-1.2.9.tgz", - "integrity": "sha512-oXGDJIc3vrJyOrtsAo9dm6t4d6i+fo1+PP1Zl/0VM5L7lbZFDFb8pQenEHN9D+ItsYSOcAYiJ1404vE16hkbFQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@contentstack/marketplace-sdk/-/marketplace-sdk-1.3.0.tgz", + "integrity": "sha512-zEpAxDeSSFxcE409IqDjepEzROe8zk/sqHhh+KkcwwYra1h5NVdbboQQXZrwjQEDVy4UsW0+Y1Ttnl8avu4w3A==", "license": "MIT", "dependencies": { "axios": "^1.11.0" @@ -1918,9 +1918,9 @@ } }, "node_modules/@es-joy/jsdoccomment/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -3612,9 +3612,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -3633,15 +3633,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5586,14 +5586,14 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", + "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5604,9 +5604,9 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -5618,16 +5618,16 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", + "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/project-service": "8.39.1", + "@typescript-eslint/tsconfig-utils": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5647,16 +5647,16 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", + "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5671,13 +5671,13 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", + "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -6349,14 +6349,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", - "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.1.tgz", + "integrity": "sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.39.0", - "@typescript-eslint/types": "^8.39.0", + "@typescript-eslint/tsconfig-utils": "^8.39.1", + "@typescript-eslint/types": "^8.39.1", "debug": "^4.3.4" }, "engines": { @@ -6371,9 +6371,9 @@ } }, "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -6403,9 +6403,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", - "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz", + "integrity": "sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==", "dev": true, "license": "MIT", "engines": { @@ -9570,9 +9570,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", - "integrity": "sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==", + "version": "1.5.200", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", "dev": true, "license": "ISC" }, @@ -10461,17 +10461,17 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", - "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz", + "integrity": "sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/type-utils": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/type-utils": "8.39.1", + "@typescript-eslint/utils": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -10485,7 +10485,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.39.0", + "@typescript-eslint/parser": "^8.39.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -10501,16 +10501,16 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/parser": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", - "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.1.tgz", + "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4" }, "engines": { @@ -10526,14 +10526,14 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", + "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10544,15 +10544,15 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/type-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", - "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz", + "integrity": "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/utils": "8.39.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -10569,9 +10569,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -10583,16 +10583,16 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", + "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/project-service": "8.39.1", + "@typescript-eslint/tsconfig-utils": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -10628,16 +10628,16 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", + "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10652,13 +10652,13 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", + "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -11432,14 +11432,14 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", + "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11450,9 +11450,9 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -11464,16 +11464,16 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", + "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/project-service": "8.39.1", + "@typescript-eslint/tsconfig-utils": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -11493,16 +11493,16 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", + "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11517,13 +11517,13 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", + "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -25141,16 +25141,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz", - "integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.1.tgz", + "integrity": "sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.39.0", - "@typescript-eslint/parser": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0" + "@typescript-eslint/eslint-plugin": "8.39.1", + "@typescript-eslint/parser": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/utils": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25165,17 +25165,17 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", - "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz", + "integrity": "sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/type-utils": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/type-utils": "8.39.1", + "@typescript-eslint/utils": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -25189,22 +25189,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.39.0", + "@typescript-eslint/parser": "^8.39.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", - "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.1.tgz", + "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4" }, "engines": { @@ -25220,14 +25220,14 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", + "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25238,15 +25238,15 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", - "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz", + "integrity": "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/utils": "8.39.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -25263,9 +25263,9 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -25277,16 +25277,16 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", + "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", + "@typescript-eslint/project-service": "8.39.1", + "@typescript-eslint/tsconfig-utils": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -25306,16 +25306,16 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", + "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25330,13 +25330,13 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", + "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { diff --git a/packages/contentstack-config/package.json b/packages/contentstack-config/package.json index eb9cddd75b..ca712b2c00 100644 --- a/packages/contentstack-config/package.json +++ b/packages/contentstack-config/package.json @@ -77,8 +77,8 @@ "config:set:rate-limit": "RLST", "config:get:rate-limit": "RLGT", "config:remove:rate-limit": "RLRM", - "config:totp:add": "TFADD", - "config:totp:remove": "TFRM" + "config:mfa:add": "TFADD", + "config:mfa:remove": "TFRM" } }, "repository": "contentstack/cli" diff --git a/packages/contentstack-config/src/commands/config/set/region.ts b/packages/contentstack-config/src/commands/config/set/region.ts index fa9934db15..f3d1ab93ed 100644 --- a/packages/contentstack-config/src/commands/config/set/region.ts +++ b/packages/contentstack-config/src/commands/config/set/region.ts @@ -12,15 +12,15 @@ import { import { Region } from '../../../interfaces'; import { regionHandler, interactive } from '../../../utils'; import { Args, BaseCommand } from '../../../base-command'; -import { TOTPService } from '../../../services/totp/totp.service'; +import { MFAService } from '../../../services/mfa/mfa.service'; export default class RegionSetCommand extends BaseCommand { config: any; - private readonly totpService: TOTPService; + private readonly mfaService: MFAService; constructor(argv: string[], config: any) { super(argv, config); - this.totpService = new TOTPService(); + this.mfaService = new MFAService(); } static description = 'Set region for CLI'; static flags: FlagInput = { @@ -77,22 +77,22 @@ export default class RegionSetCommand extends BaseCommand=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 dev: true /@apollo/client/3.13.9_graphql@16.11.0: @@ -1775,8 +1775,8 @@ packages: dependencies: '@babel/parser': 7.28.0 '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 dev: true @@ -2129,7 +2129,7 @@ packages: resolution: {integrity: sha512-ybG+6AycUbVoDhIE9WF+aZkAlv4XA40E1X2B3etbgLk5oOZKRRXaZ3oZjToqF94sd2jFxu96sDDBs50DJcwaYA==} dependencies: '@contentstack/management': 1.22.0_debug@4.4.1 - '@contentstack/marketplace-sdk': 1.2.9_debug@4.4.1 + '@contentstack/marketplace-sdk': 1.3.0_debug@4.4.1 '@oclif/core': 4.5.2 axios: 1.11.0_debug@4.4.1 chalk: 4.1.2 @@ -2210,16 +2210,16 @@ packages: - debug dev: false - /@contentstack/marketplace-sdk/1.2.9: - resolution: {integrity: sha512-oXGDJIc3vrJyOrtsAo9dm6t4d6i+fo1+PP1Zl/0VM5L7lbZFDFb8pQenEHN9D+ItsYSOcAYiJ1404vE16hkbFQ==} + /@contentstack/marketplace-sdk/1.3.0: + resolution: {integrity: sha512-zEpAxDeSSFxcE409IqDjepEzROe8zk/sqHhh+KkcwwYra1h5NVdbboQQXZrwjQEDVy4UsW0+Y1Ttnl8avu4w3A==} dependencies: axios: 1.11.0 transitivePeerDependencies: - debug dev: false - /@contentstack/marketplace-sdk/1.2.9_debug@4.4.1: - resolution: {integrity: sha512-oXGDJIc3vrJyOrtsAo9dm6t4d6i+fo1+PP1Zl/0VM5L7lbZFDFb8pQenEHN9D+ItsYSOcAYiJ1404vE16hkbFQ==} + /@contentstack/marketplace-sdk/1.3.0_debug@4.4.1: + resolution: {integrity: sha512-zEpAxDeSSFxcE409IqDjepEzROe8zk/sqHhh+KkcwwYra1h5NVdbboQQXZrwjQEDVy4UsW0+Y1Ttnl8avu4w3A==} dependencies: axios: 1.11.0_debug@4.4.1 transitivePeerDependencies: @@ -2275,7 +2275,7 @@ packages: engines: {node: '>=18'} dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -3598,7 +3598,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 '@types/node': 20.19.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -3632,7 +3632,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -3663,7 +3663,7 @@ packages: dependencies: '@babel/core': 7.28.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -3703,11 +3703,11 @@ packages: chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping/0.3.12: - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + /@jridgewell/gen-mapping/0.3.13: + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 dev: true /@jridgewell/resolve-uri/3.1.2: @@ -3715,21 +3715,21 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.5.4: - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + /@jridgewell/sourcemap-codec/1.5.5: + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - /@jridgewell/trace-mapping/0.3.29: - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + /@jridgewell/trace-mapping/0.3.30: + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 dev: true /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 dev: true /@jsdoc/salty/0.2.9: @@ -4773,7 +4773,7 @@ packages: peerDependencies: eslint: '>=8.40.0' dependencies: - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4790,7 +4790,7 @@ packages: peerDependencies: eslint: '>=8.40.0' dependencies: - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 eslint: 7.32.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4807,7 +4807,7 @@ packages: peerDependencies: eslint: '>=8.40.0' dependencies: - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4824,7 +4824,7 @@ packages: peerDependencies: eslint: '>=8.40.0' dependencies: - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4841,7 +4841,7 @@ packages: peerDependencies: eslint: '>=9.0.0' dependencies: - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4858,7 +4858,7 @@ packages: peerDependencies: eslint: '>=9.0.0' dependencies: - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 eslint: 7.32.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4875,7 +4875,7 @@ packages: peerDependencies: eslint: '>=9.0.0' dependencies: - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -4892,7 +4892,7 @@ packages: peerDependencies: eslint: '>=9.0.0' dependencies: - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu eslint: 8.57.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -5352,21 +5352,21 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/8.39.0_afisypzonua2m5iv24dxve4ljm: - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + /@typescript-eslint/eslint-plugin/8.39.1_5lmbpww2pqx7hideynqhkwygjq: + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0_eslint@8.57.1 - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 - '@typescript-eslint/visitor-keys': 8.39.0 - eslint: 8.57.1 + '@typescript-eslint/parser': 8.39.1_eslint@7.32.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1_eslint@7.32.0 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 + '@typescript-eslint/visitor-keys': 8.39.1 + eslint: 7.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -5375,73 +5375,73 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/8.39.0_idijxifckbvuj7jzk34pnze6vi: - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + /@typescript-eslint/eslint-plugin/8.39.1_hmwivclb3zehleadqphiapvkau: + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0_eslint@7.32.0 - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 - '@typescript-eslint/visitor-keys': 8.39.0 - eslint: 7.32.0 + '@typescript-eslint/parser': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/visitor-keys': 8.39.1 + eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0 + ts-api-utils: 2.1.0_typescript@5.9.2 + typescript: 5.9.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin/8.39.0_jmqmfammfjkeppa3uezqx4e67y: - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + /@typescript-eslint/eslint-plugin/8.39.1_lofr4jetgpymholsq26yn2jo2m: + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/parser': 8.39.1_eslint@8.57.1 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1_eslint@8.57.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 + '@typescript-eslint/visitor-keys': 8.39.1 eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0_typescript@4.9.5 - typescript: 4.9.5 + ts-api-utils: 2.1.0 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin/8.39.0_lle3kt2omsygqvq3losp3djrcy: - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + /@typescript-eslint/eslint-plugin/8.39.1_syoivlttnpvan7slni6wxcwh6i: + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/parser': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/visitor-keys': 8.39.1 eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0_typescript@5.9.2 - typescript: 5.9.2 + ts-api-utils: 2.1.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -5488,17 +5488,17 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + /@typescript-eslint/parser/8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji: + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@4.9.5 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@4.9.5 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 eslint: 8.57.1 typescript: 4.9.5 @@ -5506,51 +5506,51 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/8.39.0_eslint@7.32.0: - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + /@typescript-eslint/parser/8.39.1_eslint@7.32.0: + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 eslint: 7.32.0 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/8.39.0_eslint@8.57.1: - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + /@typescript-eslint/parser/8.39.1_eslint@8.57.1: + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 eslint: 8.57.1 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/8.39.0_owjsyeuugtyevmmlm2yzh3xodu: - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + /@typescript-eslint/parser/8.39.1_owjsyeuugtyevmmlm2yzh3xodu: + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@5.9.2 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@5.9.2 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 eslint: 8.57.1 typescript: 5.9.2 @@ -5558,41 +5558,41 @@ packages: - supports-color dev: true - /@typescript-eslint/project-service/8.39.0: - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + /@typescript-eslint/project-service/8.39.1: + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0 - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1 + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/project-service/8.39.0_typescript@4.9.5: - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + /@typescript-eslint/project-service/8.39.1_typescript@4.9.5: + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0_typescript@4.9.5 - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1_typescript@4.9.5 + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/project-service/8.39.0_typescript@5.9.2: - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + /@typescript-eslint/project-service/8.39.1_typescript@5.9.2: + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0_typescript@5.9.2 - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1_typescript@5.9.2 + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: @@ -5623,23 +5623,23 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 dev: true - /@typescript-eslint/scope-manager/8.39.0: - resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} + /@typescript-eslint/scope-manager/8.39.1: + resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 dev: true - /@typescript-eslint/tsconfig-utils/8.39.0: - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + /@typescript-eslint/tsconfig-utils/8.39.1: + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dev: true - /@typescript-eslint/tsconfig-utils/8.39.0_typescript@4.9.5: - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + /@typescript-eslint/tsconfig-utils/8.39.1_typescript@4.9.5: + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -5647,8 +5647,8 @@ packages: typescript: 4.9.5 dev: true - /@typescript-eslint/tsconfig-utils/8.39.0_typescript@5.9.2: - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + /@typescript-eslint/tsconfig-utils/8.39.1_typescript@5.9.2: + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -5716,16 +5716,16 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + /@typescript-eslint/type-utils/8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji: + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@4.9.5 - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@4.9.5 + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji debug: 4.4.1 eslint: 8.57.1 ts-api-utils: 2.1.0_typescript@4.9.5 @@ -5734,16 +5734,16 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/8.39.0_eslint@7.32.0: - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + /@typescript-eslint/type-utils/8.39.1_eslint@7.32.0: + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 debug: 4.4.1 eslint: 7.32.0 ts-api-utils: 2.1.0 @@ -5751,16 +5751,16 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/8.39.0_eslint@8.57.1: - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + /@typescript-eslint/type-utils/8.39.1_eslint@8.57.1: + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 debug: 4.4.1 eslint: 8.57.1 ts-api-utils: 2.1.0 @@ -5768,16 +5768,16 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/8.39.0_owjsyeuugtyevmmlm2yzh3xodu: - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + /@typescript-eslint/type-utils/8.39.1_owjsyeuugtyevmmlm2yzh3xodu: + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@5.9.2 - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@5.9.2 + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu debug: 4.4.1 eslint: 8.57.1 ts-api-utils: 2.1.0_typescript@5.9.2 @@ -5801,8 +5801,8 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/types/8.39.0: - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + /@typescript-eslint/types/8.39.1: + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true @@ -5915,16 +5915,16 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/8.39.0: - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + /@typescript-eslint/typescript-estree/8.39.1: + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/project-service': 8.39.0 - '@typescript-eslint/tsconfig-utils': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1 + '@typescript-eslint/tsconfig-utils': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -5935,16 +5935,16 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/8.39.0_typescript@4.9.5: - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + /@typescript-eslint/typescript-estree/8.39.1_typescript@4.9.5: + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/project-service': 8.39.0_typescript@4.9.5 - '@typescript-eslint/tsconfig-utils': 8.39.0_typescript@4.9.5 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1_typescript@4.9.5 + '@typescript-eslint/tsconfig-utils': 8.39.1_typescript@4.9.5 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -5956,16 +5956,16 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/8.39.0_typescript@5.9.2: - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + /@typescript-eslint/typescript-estree/8.39.1_typescript@5.9.2: + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/project-service': 8.39.0_typescript@5.9.2 - '@typescript-eslint/tsconfig-utils': 8.39.0_typescript@5.9.2 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1_typescript@5.9.2 + '@typescript-eslint/tsconfig-utils': 8.39.1_typescript@5.9.2 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6067,66 +6067,66 @@ packages: - typescript dev: true - /@typescript-eslint/utils/8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + /@typescript-eslint/utils/8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji: + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/eslint-utils': 4.7.0_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@4.9.5 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@4.9.5 eslint: 8.57.1 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/8.39.0_eslint@7.32.0: - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + /@typescript-eslint/utils/8.39.1_eslint@7.32.0: + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/eslint-utils': 4.7.0_eslint@7.32.0 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 eslint: 7.32.0 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/8.39.0_eslint@8.57.1: - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + /@typescript-eslint/utils/8.39.1_eslint@8.57.1: + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/eslint-utils': 4.7.0_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1 eslint: 8.57.1 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/8.39.0_owjsyeuugtyevmmlm2yzh3xodu: - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + /@typescript-eslint/utils/8.39.1_owjsyeuugtyevmmlm2yzh3xodu: + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: '@eslint-community/eslint-utils': 4.7.0_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0_typescript@5.9.2 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1_typescript@5.9.2 eslint: 8.57.1 typescript: 5.9.2 transitivePeerDependencies: @@ -6157,11 +6157,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys/8.39.0: - resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + /@typescript-eslint/visitor-keys/8.39.1: + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 dev: true @@ -6954,7 +6954,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001734 - electron-to-chromium: 1.5.199 + electron-to-chromium: 1.5.200 node-releases: 2.0.19 update-browserslist-db: 1.1.3_browserslist@4.25.2 dev: true @@ -7966,8 +7966,8 @@ packages: dependencies: jake: 10.9.4 - /electron-to-chromium/1.5.199: - resolution: {integrity: sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==} + /electron-to-chromium/1.5.200: + resolution: {integrity: sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==} dev: true /elegant-spinner/1.0.1: @@ -8316,19 +8316,19 @@ packages: '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/eslint-plugin': 8.39.0_jmqmfammfjkeppa3uezqx4e67y - '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.39.1_syoivlttnpvan7slni6wxcwh6i + '@typescript-eslint/parser': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-oclif: 5.2.2_eslint@8.57.1 eslint-config-xo: 0.48.0_avq3eyf5kaj6ssrwo7fvkrwnji eslint-config-xo-space: 0.35.0_eslint@8.57.1 eslint-import-resolver-typescript: 3.10.1_2exwcduccderqiu2u7qw4rc7d4 - eslint-plugin-import: 2.32.0_fl75h5hlasq2p2yi5zoyihg67u + eslint-plugin-import: 2.32.0_bd7u2uzyupo3vv2zbdlsxwkney eslint-plugin-jsdoc: 50.8.0_eslint@8.57.1 eslint-plugin-mocha: 10.5.0_eslint@8.57.1 eslint-plugin-n: 17.21.3_avq3eyf5kaj6ssrwo7fvkrwnji eslint-plugin-perfectionist: 4.15.0_avq3eyf5kaj6ssrwo7fvkrwnji eslint-plugin-unicorn: 56.0.1_eslint@8.57.1 - typescript-eslint: 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + typescript-eslint: 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -8345,19 +8345,19 @@ packages: '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_eslint@7.32.0 - '@typescript-eslint/eslint-plugin': 8.39.0_idijxifckbvuj7jzk34pnze6vi - '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 + '@typescript-eslint/eslint-plugin': 8.39.1_5lmbpww2pqx7hideynqhkwygjq + '@typescript-eslint/parser': 8.39.1_eslint@7.32.0 eslint-config-oclif: 5.2.2_eslint@7.32.0 eslint-config-xo: 0.48.0_eslint@7.32.0 eslint-config-xo-space: 0.35.0_eslint@7.32.0 eslint-import-resolver-typescript: 3.10.1_euuv2s2m4azrqak6tzap5kwzai - eslint-plugin-import: 2.32.0_uphmnggiwstc5b3oictz5pu57e + eslint-plugin-import: 2.32.0_dcr5xn6363qx3ifedxnrnoe45a eslint-plugin-jsdoc: 50.8.0_eslint@7.32.0 eslint-plugin-mocha: 10.5.0_eslint@7.32.0 eslint-plugin-n: 17.21.3_eslint@7.32.0 eslint-plugin-perfectionist: 4.15.0_eslint@7.32.0 eslint-plugin-unicorn: 56.0.1_eslint@7.32.0 - typescript-eslint: 8.39.0_eslint@7.32.0 + typescript-eslint: 8.39.1_eslint@7.32.0 transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -8374,19 +8374,19 @@ packages: '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_eslint@8.57.1 - '@typescript-eslint/eslint-plugin': 8.39.0_afisypzonua2m5iv24dxve4ljm - '@typescript-eslint/parser': 8.39.0_eslint@8.57.1 + '@typescript-eslint/eslint-plugin': 8.39.1_lofr4jetgpymholsq26yn2jo2m + '@typescript-eslint/parser': 8.39.1_eslint@8.57.1 eslint-config-oclif: 5.2.2_eslint@8.57.1 eslint-config-xo: 0.48.0_eslint@8.57.1 eslint-config-xo-space: 0.35.0_eslint@8.57.1 eslint-import-resolver-typescript: 3.10.1_2exwcduccderqiu2u7qw4rc7d4 - eslint-plugin-import: 2.32.0_fl75h5hlasq2p2yi5zoyihg67u + eslint-plugin-import: 2.32.0_bd7u2uzyupo3vv2zbdlsxwkney eslint-plugin-jsdoc: 50.8.0_eslint@8.57.1 eslint-plugin-mocha: 10.5.0_eslint@8.57.1 eslint-plugin-n: 17.21.3_eslint@8.57.1 eslint-plugin-perfectionist: 4.15.0_eslint@8.57.1 eslint-plugin-unicorn: 56.0.1_eslint@8.57.1 - typescript-eslint: 8.39.0_eslint@8.57.1 + typescript-eslint: 8.39.1_eslint@8.57.1 transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -8403,19 +8403,19 @@ packages: '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.33.0 '@stylistic/eslint-plugin': 3.1.0_owjsyeuugtyevmmlm2yzh3xodu - '@typescript-eslint/eslint-plugin': 8.39.0_lle3kt2omsygqvq3losp3djrcy - '@typescript-eslint/parser': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/eslint-plugin': 8.39.1_hmwivclb3zehleadqphiapvkau + '@typescript-eslint/parser': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu eslint-config-oclif: 5.2.2_eslint@8.57.1 eslint-config-xo: 0.48.0_owjsyeuugtyevmmlm2yzh3xodu eslint-config-xo-space: 0.35.0_eslint@8.57.1 eslint-import-resolver-typescript: 3.10.1_2exwcduccderqiu2u7qw4rc7d4 - eslint-plugin-import: 2.32.0_fl75h5hlasq2p2yi5zoyihg67u + eslint-plugin-import: 2.32.0_bd7u2uzyupo3vv2zbdlsxwkney eslint-plugin-jsdoc: 50.8.0_eslint@8.57.1 eslint-plugin-mocha: 10.5.0_eslint@8.57.1 eslint-plugin-n: 17.21.3_owjsyeuugtyevmmlm2yzh3xodu eslint-plugin-perfectionist: 4.15.0_owjsyeuugtyevmmlm2yzh3xodu eslint-plugin-unicorn: 56.0.1_eslint@8.57.1 - typescript-eslint: 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + typescript-eslint: 8.39.1_owjsyeuugtyevmmlm2yzh3xodu transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -8558,7 +8558,7 @@ packages: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 eslint: 8.57.1 - eslint-plugin-import: 2.32.0_fl75h5hlasq2p2yi5zoyihg67u + eslint-plugin-import: 2.32.0_bd7u2uzyupo3vv2zbdlsxwkney get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 @@ -8584,7 +8584,7 @@ packages: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 eslint: 7.32.0 - eslint-plugin-import: 2.32.0_uphmnggiwstc5b3oictz5pu57e + eslint-plugin-import: 2.32.0_dcr5xn6363qx3ifedxnrnoe45a get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 @@ -8594,7 +8594,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.12.1_awtqiromzhtisgq7atutzusdba: + /eslint-module-utils/2.12.1_sgrhdovgiqm2dw4plsbifcq7si: resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} engines: {node: '>=4'} peerDependencies: @@ -8615,16 +8615,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/parser': 8.39.1_eslint@7.32.0 debug: 3.2.7 - eslint: 8.57.1 + eslint: 7.32.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1_2exwcduccderqiu2u7qw4rc7d4 + eslint-import-resolver-typescript: 3.10.1_euuv2s2m4azrqak6tzap5kwzai transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.12.1_kwjlw6lyffv6siucpqtwfu2et4: + /eslint-module-utils/2.12.1_tcdndhsb6oeve7vavaxixccnv4: resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} engines: {node: '>=4'} peerDependencies: @@ -8645,11 +8645,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 + '@typescript-eslint/parser': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji debug: 3.2.7 - eslint: 7.32.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1_euuv2s2m4azrqak6tzap5kwzai + eslint-import-resolver-typescript: 3.10.1_2exwcduccderqiu2u7qw4rc7d4 transitivePeerDependencies: - supports-color dev: true @@ -8767,7 +8767,7 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.32.0_fl75h5hlasq2p2yi5zoyihg67u: + /eslint-plugin-import/2.32.0_bd7u2uzyupo3vv2zbdlsxwkney: resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} engines: {node: '>=4'} peerDependencies: @@ -8778,7 +8778,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/parser': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -8787,7 +8787,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1_awtqiromzhtisgq7atutzusdba + eslint-module-utils: 2.12.1_tcdndhsb6oeve7vavaxixccnv4 hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -8804,7 +8804,7 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.32.0_uphmnggiwstc5b3oictz5pu57e: + /eslint-plugin-import/2.32.0_dcr5xn6363qx3ifedxnrnoe45a: resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} engines: {node: '>=4'} peerDependencies: @@ -8815,7 +8815,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 + '@typescript-eslint/parser': 8.39.1_eslint@7.32.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -8824,7 +8824,7 @@ packages: doctrine: 2.1.0 eslint: 7.32.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1_kwjlw6lyffv6siucpqtwfu2et4 + eslint-module-utils: 2.12.1_sgrhdovgiqm2dw4plsbifcq7si hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -9081,8 +9081,8 @@ packages: peerDependencies: eslint: '>=8.45.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji eslint: 8.57.1 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -9096,8 +9096,8 @@ packages: peerDependencies: eslint: '>=8.45.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 eslint: 7.32.0 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -9111,8 +9111,8 @@ packages: peerDependencies: eslint: '>=8.45.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 eslint: 8.57.1 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -9126,8 +9126,8 @@ packages: peerDependencies: eslint: '>=8.45.0' dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu eslint: 8.57.1 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -11973,7 +11973,7 @@ packages: /magic-string/0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 dev: false /make-dir/3.1.0: @@ -14851,66 +14851,66 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false - /typescript-eslint/8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + /typescript-eslint/8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0_jmqmfammfjkeppa3uezqx4e67y - '@typescript-eslint/parser': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/typescript-estree': 8.39.0_typescript@4.9.5 - '@typescript-eslint/utils': 8.39.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.39.1_syoivlttnpvan7slni6wxcwh6i + '@typescript-eslint/parser': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/typescript-estree': 8.39.1_typescript@4.9.5 + '@typescript-eslint/utils': 8.39.1_avq3eyf5kaj6ssrwo7fvkrwnji eslint: 8.57.1 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /typescript-eslint/8.39.0_eslint@7.32.0: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + /typescript-eslint/8.39.1_eslint@7.32.0: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0_idijxifckbvuj7jzk34pnze6vi - '@typescript-eslint/parser': 8.39.0_eslint@7.32.0 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@7.32.0 + '@typescript-eslint/eslint-plugin': 8.39.1_5lmbpww2pqx7hideynqhkwygjq + '@typescript-eslint/parser': 8.39.1_eslint@7.32.0 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@7.32.0 eslint: 7.32.0 transitivePeerDependencies: - supports-color dev: true - /typescript-eslint/8.39.0_eslint@8.57.1: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + /typescript-eslint/8.39.1_eslint@8.57.1: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0_afisypzonua2m5iv24dxve4ljm - '@typescript-eslint/parser': 8.39.0_eslint@8.57.1 - '@typescript-eslint/typescript-estree': 8.39.0 - '@typescript-eslint/utils': 8.39.0_eslint@8.57.1 + '@typescript-eslint/eslint-plugin': 8.39.1_lofr4jetgpymholsq26yn2jo2m + '@typescript-eslint/parser': 8.39.1_eslint@8.57.1 + '@typescript-eslint/typescript-estree': 8.39.1 + '@typescript-eslint/utils': 8.39.1_eslint@8.57.1 eslint: 8.57.1 transitivePeerDependencies: - supports-color dev: true - /typescript-eslint/8.39.0_owjsyeuugtyevmmlm2yzh3xodu: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + /typescript-eslint/8.39.1_owjsyeuugtyevmmlm2yzh3xodu: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0_lle3kt2omsygqvq3losp3djrcy - '@typescript-eslint/parser': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu - '@typescript-eslint/typescript-estree': 8.39.0_typescript@5.9.2 - '@typescript-eslint/utils': 8.39.0_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/eslint-plugin': 8.39.1_hmwivclb3zehleadqphiapvkau + '@typescript-eslint/parser': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu + '@typescript-eslint/typescript-estree': 8.39.1_typescript@5.9.2 + '@typescript-eslint/utils': 8.39.1_owjsyeuugtyevmmlm2yzh3xodu eslint: 8.57.1 typescript: 5.9.2 transitivePeerDependencies: @@ -15099,7 +15099,7 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true From a46f34d1fdf965b39c1a9df925057215fd5e199c Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 15:18:24 +0530 Subject: [PATCH 20/23] Readme update --- .talismanrc | 2 + packages/contentstack-config/README.md | 82 ++++++++++++++------------ 2 files changed, 47 insertions(+), 37 deletions(-) diff --git a/.talismanrc b/.talismanrc index 3d0d115188..cf8afb259c 100644 --- a/.talismanrc +++ b/.talismanrc @@ -41,4 +41,6 @@ fileignoreconfig: checksum: 68158e62e4e5f6d51538bed0789074a4f595f1e4b3a37e82edce6afe5b69bc30 - filename: packages/contentstack-config/test/unit/services/mfa.service.test.ts checksum: 8ba652904813cc27d5be3c7829588c3f4b0a3b3fab50439676690fe95a1d4733 +- filename: packages/contentstack-config/README.md + checksum: b560bf300a07b40d9c24534c8e3493b7569233de061cfcdd58eb615c96e83d75 version: "1.0" diff --git a/packages/contentstack-config/README.md b/packages/contentstack-config/README.md index 38434c1ebd..bd67712635 100644 --- a/packages/contentstack-config/README.md +++ b/packages/contentstack-config/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-config $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-config/1.15.0 darwin-arm64 node-v22.14.0 +@contentstack/cli-config/1.16.0 darwin-arm64 node-v23.11.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND @@ -35,6 +35,8 @@ USAGE * [`csdx config:get:log`](#csdx-configgetlog) * [`csdx config:get:rate-limit`](#csdx-configgetrate-limit) * [`csdx config:get:region`](#csdx-configgetregion) +* [`csdx config:mfa:add`](#csdx-configmfaadd) +* [`csdx config:mfa:remove`](#csdx-configmfaremove) * [`csdx config:remove:base-branch`](#csdx-configremovebase-branch) * [`csdx config:remove:ea-header`](#csdx-configremoveea-header) * [`csdx config:remove:early-access-header`](#csdx-configremoveearly-access-header) @@ -45,8 +47,6 @@ USAGE * [`csdx config:set:log`](#csdx-configsetlog) * [`csdx config:set:rate-limit`](#csdx-configsetrate-limit) * [`csdx config:set:region [REGION]`](#csdx-configsetregion-region) -* [`csdx config:totp:add`](#csdx-configtotpadd) -* [`csdx config:totp:remove`](#csdx-configtotpremove) ## `csdx config:get:base-branch` @@ -154,6 +154,48 @@ EXAMPLES _See code: [src/commands/config/get/region.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/get/region.ts)_ +## `csdx config:mfa:add` + +Add MFA secret for 2FA authentication + +``` +USAGE + $ csdx config:mfa:add [--secret ] + +FLAGS + --secret= MFA secret for 2FA authentication + +DESCRIPTION + Add MFA secret for 2FA authentication + +EXAMPLES + $ csdx config:mfa:add +``` + +_See code: [src/commands/config/mfa/add.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/mfa/add.ts)_ + +## `csdx config:mfa:remove` + +Remove stored secret + +``` +USAGE + $ csdx config:mfa:remove [-y] + +FLAGS + -y, --yes Skip confirmation prompt + +DESCRIPTION + Remove stored secret + +EXAMPLES + $ csdx config:mfa:remove + + $ csdx config:mfa:remove -y +``` + +_See code: [src/commands/config/mfa/remove.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/mfa/remove.ts)_ + ## `csdx config:remove:base-branch` Remove branch config for CLI @@ -432,38 +474,4 @@ EXAMPLES ``` _See code: [src/commands/config/set/region.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/set/region.ts)_ - -## `csdx config:totp:add` - -Add TOTP secret for 2FA authentication - -``` -USAGE - $ csdx config:totp:add - -DESCRIPTION - Add TOTP secret for 2FA authentication - -EXAMPLES - $ csdx config:totp:add -``` - -_See code: [src/commands/config/totp/add.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/totp/add.ts)_ - -## `csdx config:totp:remove` - -Remove stored TOTP secret - -``` -USAGE - $ csdx config:totp:remove - -DESCRIPTION - Remove stored TOTP secret - -EXAMPLES - $ csdx config:totp:remove -``` - -_See code: [src/commands/config/totp/remove.ts](https://github.com/contentstack/cli/blob/main/packages/contentstack-config/src/commands/config/totp/remove.ts)_ From e64af7120fb814eeaf579a833e983a2ae618c87a Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 16:00:04 +0530 Subject: [PATCH 21/23] Tests updated --- .talismanrc | 2 + .../test/integration/auth.test.ts | 167 +++++++++--------- 2 files changed, 82 insertions(+), 87 deletions(-) diff --git a/.talismanrc b/.talismanrc index cf8afb259c..6fd6cbbe80 100644 --- a/.talismanrc +++ b/.talismanrc @@ -43,4 +43,6 @@ fileignoreconfig: checksum: 8ba652904813cc27d5be3c7829588c3f4b0a3b3fab50439676690fe95a1d4733 - filename: packages/contentstack-config/README.md checksum: b560bf300a07b40d9c24534c8e3493b7569233de061cfcdd58eb615c96e83d75 +- filename: packages/contentstack-auth/test/integration/auth.test.ts + checksum: 96a66c141cf8f83443f967f62be210c3a95e06cf3d6c7bcb25229a4de7f05c5f version: "1.0" diff --git a/packages/contentstack-auth/test/integration/auth.test.ts b/packages/contentstack-auth/test/integration/auth.test.ts index 07f0055858..46d2e12111 100644 --- a/packages/contentstack-auth/test/integration/auth.test.ts +++ b/packages/contentstack-auth/test/integration/auth.test.ts @@ -1,115 +1,108 @@ -import * as path from 'path'; import { expect } from 'chai'; -import { runCommand } from '@oclif/test'; -import { fancy } from 'fancy-test'; -// @ts-ignore +import * as sinon from 'sinon'; +import { authHandler, interactive } from '../../src/utils'; +import { configHandler, cliux } from '@contentstack/cli-utilities'; import { Helper } from './helper'; -// @ts-ignore -import { PRINT_LOGS, encryptionKey } from './config.json'; -import { cliux as CliUx, messageHandler, NodeCrypto } from '@contentstack/cli-utilities'; -import Sinon from 'sinon'; -const messageFilePath = path.join(__dirname, '..', '..', '..', 'contentstack-utilities', 'messages/auth.json'); -const crypto = new NodeCrypto({ - typeIdentifier: '◈', - algorithm: 'aes-192-cbc', - encryptionKey: process.env.ENCRYPTION_KEY || encryptionKey, -}); -const username = process.env.ENCRYPTION_KEY ? crypto.decrypt(process.env.USERNAME) : process.env.USERNAME; -const password = process.env.ENCRYPTION_KEY ? crypto.decrypt(process.env.PASSWORD) : process.env.PASSWORD; +const config = configHandler; +const credentials = { email: 'test@example.com', password: 'testpassword' }; +const invalidCredentials = { email: 'test@example.com', password: 'invalidpassword' }; +const TFATestToken = '24563992'; describe('contentstack-auth plugin test', () => { - let exitStub: Sinon.SinonStub | undefined; - let inquireStub: Sinon.SinonStub | undefined; - let helperStub: Sinon.SinonStub | undefined; + let sandbox: sinon.SinonSandbox; beforeEach(() => { - messageHandler.init({ messageFilePath }); - exitStub = Sinon.stub(process, 'exit'); + sandbox = sinon.createSandbox(); + + // Stub interactive prompts + sandbox.stub(interactive, 'askUsername').resolves(credentials.email); + sandbox.stub(interactive, 'askPassword').resolves(credentials.password); + sandbox.stub(interactive, 'askOTPChannel').resolves('authy'); + sandbox.stub(interactive, 'askOTP').resolves(TFATestToken); + + // Stub cliux + sandbox.stub(cliux, 'success'); + sandbox.stub(cliux, 'error'); + sandbox.stub(cliux, 'inquire').resolves(credentials.email); + + // Stub config + sandbox.stub(config, 'set'); + sandbox.stub(config, 'get').returns(credentials.email); }); + afterEach(() => { - messageHandler.init({ messageFilePath: '' }); - if (exitStub && exitStub.restore) exitStub.restore(); - if (inquireStub && inquireStub.restore) inquireStub.restore(); - if (helperStub && helperStub.restore) helperStub.restore(); + sandbox.restore(); }); - describe('Check auth:login command with wrong credentials (prompt)', () => { - beforeEach(() => { - inquireStub = Sinon.stub(CliUx, 'inquire').callsFake(async (inquire: any) => { - switch (inquire.name) { - case 'username': - return username; - case 'password': - return 'WrongPassword@12345%$#@!'; - } - }); - }); + describe('Check auth:login command with --username, --password flags and wrong credentials', function() { + this.timeout(10000); // Increase timeout to 10s - fancy.stdout({ print: PRINT_LOGS || false }).it('Login should fail due to wrong credentials (prompt)', async () => { - const { stdout } = await runCommand(['auth:login'], { root: process.cwd() }); - expect(stdout).to.include('Login Error'); + it('Login should fail due to wrong credentials (flags)', async () => { + sandbox.stub(authHandler, 'login').rejects(new Error('Invalid credentials')); + + try { + await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${invalidCredentials.password}`]); + } catch (error) { + expect((error as Error).message).to.include('Invalid credentials'); + } }); }); - describe('Check auth:login command with correct credentials (prompt)', () => { - beforeEach(() => { - inquireStub = Sinon.stub(CliUx, 'inquire').callsFake(async (inquire: any) => { - switch (inquire.name) { - case 'username': - return username; - case 'password': - return password; - } - }); - }); + describe('Check auth:login command with --username, --password flags', function() { + this.timeout(10000); // Increase timeout to 10s - fancy.stdout({ print: PRINT_LOGS || false }).it('Login should succeed (prompt)', async () => { - const { stdout } = await runCommand(['auth:login'], { root: process.cwd() }); - expect(stdout).to.match(/Login Error|Successfully logged in/i); + it('Login should succeed (flags)', async () => { + sandbox.stub(authHandler, 'login').resolves({ + email: credentials.email, + authtoken: 'test-token' + }); + + await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${credentials.password}`]); + expect(config.get('email')).to.equal(credentials.email); }); }); - describe('Check auth:login command with --username, --password flags and wrong credentials', () => { - fancy.stdout({ print: PRINT_LOGS || false }).it('Login should fail due to wrong credentials (flags)', async () => { - const { stdout } = await runCommand( - ['auth:login', `--username=${username}`, '--password=WrongPassword@12345%$#@!'], - { root: process.cwd() }, - ); - expect(stdout).to.include('Login Error'); - }); - }); + describe('Check auth:login command with 2FA', function() { + this.timeout(10000); // Increase timeout to 10s - describe('Check auth:login command with --username, --password flags', () => { - fancy.stdout({ print: PRINT_LOGS || false }).it('Login should succeed (flags)', async () => { - const { stdout } = await runCommand(['auth:login', `-u=${username}`, `-p=${password}`], { root: process.cwd() }); - expect(stdout).to.match(/Login Error|Successfully logged in/i); + it('Login should succeed with 2FA', async () => { + const loginStub = sandbox.stub(authHandler, 'login'); + loginStub.onFirstCall().rejects({ error_code: 294 }); + loginStub.onSecondCall().resolves({ + email: credentials.email, + authtoken: 'test-token' + }); + + await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${credentials.password}`]); + expect(loginStub.calledTwice).to.be.true; }); - }); - describe('Check auth:logout command', () => { - beforeEach(() => { - inquireStub = Sinon.stub().callsFake(async () => 'Yes'); - }); - fancy.stdout({ print: PRINT_LOGS || false }).it('Logout should succeed', async () => { - const { stdout } = await runCommand(['auth:logout', '--yes'], { root: process.cwd() }); - expect(stdout).to.match(/CLI_AUTH_LOGOUT_ALREADY|Successfully logged out/i); + it('Login should fail with invalid 2FA code', async () => { + const loginStub = sandbox.stub(authHandler, 'login'); + loginStub.onFirstCall().rejects({ error_code: 294 }); + loginStub.onSecondCall().rejects(new Error('Invalid 2FA code')); + + try { + await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${credentials.password}`]); + } catch (error) { + expect((error as Error).message).to.include('Invalid 2FA code'); + } + + expect(loginStub.calledTwice).to.be.true; }); }); - describe('Test whoami command', () => { - let mail: string; - before(() => { - helperStub = Sinon.stub(Helper, 'run').resolves('dummyuser@example.com' as any); - mail = 'dummyuser@example.com'; - }); - after(() => { - mail = ''; - }); - fancy.stdout({ print: PRINT_LOGS || false }).it('shows user email who logged in', async () => { - const { stdout } = await runCommand(['whoami'], { root: process.cwd() }); + describe('Check auth:login command with OAuth', function() { + this.timeout(10000); // Increase timeout to 10s - expect(stdout).to.match(new RegExp(`You are currently logged in with email|You are not logged in`)); + it('Login should succeed with OAuth', async () => { + Object.defineProperty(authHandler, 'oauth', { + value: sandbox.stub().resolves(), + configurable: true + }); + + await Helper.run(['auth:login', '--oauth']); }); }); -}); +}); \ No newline at end of file From 2b59ba683e30740128d9c82b38434165da60f80d Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 17:51:17 +0530 Subject: [PATCH 22/23] Integration Test fixes and unit test fixes --- .talismanrc | 2 + .../test/integration/auth.test.ts | 93 +++++++++++++------ .../test/unit/commands/login.test.ts | 40 ++++++-- 3 files changed, 100 insertions(+), 35 deletions(-) diff --git a/.talismanrc b/.talismanrc index 6fd6cbbe80..2086a4c22b 100644 --- a/.talismanrc +++ b/.talismanrc @@ -45,4 +45,6 @@ fileignoreconfig: checksum: b560bf300a07b40d9c24534c8e3493b7569233de061cfcdd58eb615c96e83d75 - filename: packages/contentstack-auth/test/integration/auth.test.ts checksum: 96a66c141cf8f83443f967f62be210c3a95e06cf3d6c7bcb25229a4de7f05c5f +- filename: packages/contentstack-auth/test/unit/commands/login.test.ts + checksum: c756628a3f814340035a97fbb0dbabdf5e20b9557e63e6a77138f661e3e234d5 version: "1.0" diff --git a/packages/contentstack-auth/test/integration/auth.test.ts b/packages/contentstack-auth/test/integration/auth.test.ts index 46d2e12111..bb4a593db2 100644 --- a/packages/contentstack-auth/test/integration/auth.test.ts +++ b/packages/contentstack-auth/test/integration/auth.test.ts @@ -1,7 +1,14 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; -import { authHandler, interactive } from '../../src/utils'; -import { configHandler, cliux } from '@contentstack/cli-utilities'; +import { authHandler, interactive, totpHandler } from '../../src/utils'; +import { + configHandler, + cliux, + messageHandler, + authHandler as oauthHandler, + CLIError +} from '@contentstack/cli-utilities'; +import * as managementSDK from '@contentstack/cli-utilities'; import { Helper } from './helper'; const config = configHandler; @@ -11,24 +18,48 @@ const TFATestToken = '24563992'; describe('contentstack-auth plugin test', () => { let sandbox: sinon.SinonSandbox; + let mockClient: { + login: sinon.SinonStub; + logout: sinon.SinonStub; + getUser: sinon.SinonStub; + }; beforeEach(() => { sandbox = sinon.createSandbox(); - // Stub interactive prompts + // Interactive prompts sandbox.stub(interactive, 'askUsername').resolves(credentials.email); sandbox.stub(interactive, 'askPassword').resolves(credentials.password); - sandbox.stub(interactive, 'askOTPChannel').resolves('authy'); + sandbox.stub(interactive, 'askOTPChannel').resolves('authenticator_app'); sandbox.stub(interactive, 'askOTP').resolves(TFATestToken); - // Stub cliux + // CLI UI sandbox.stub(cliux, 'success'); sandbox.stub(cliux, 'error'); sandbox.stub(cliux, 'inquire').resolves(credentials.email); - // Stub config + // Config sandbox.stub(config, 'set'); sandbox.stub(config, 'get').returns(credentials.email); + + // Management SDK Client + mockClient = { + login: sandbox.stub().resolves({ user: { email: credentials.email, authtoken: 'test-token' } }), + logout: sandbox.stub().resolves({}), + getUser: sandbox.stub().resolves({ email: credentials.email }) + }; + sandbox.stub(managementSDK, 'managementSDKClient').resolves(mockClient); + authHandler.client = mockClient; + + // TOTP Handler + sandbox.stub(totpHandler, 'getTOTPCode').resolves(TFATestToken); + + // OAuth Handler + sandbox.stub(oauthHandler, 'setConfigData').resolves(); + sandbox.stub(oauthHandler, 'host').value('https://api.contentstack.io'); + + // Message Handler + sandbox.stub(messageHandler, 'parse').returns('Successfully logged in!!'); }); afterEach(() => { @@ -64,33 +95,37 @@ describe('contentstack-auth plugin test', () => { }); describe('Check auth:login command with 2FA', function() { - this.timeout(10000); // Increase timeout to 10s + this.timeout(10000); it('Login should succeed with 2FA', async () => { - const loginStub = sandbox.stub(authHandler, 'login'); - loginStub.onFirstCall().rejects({ error_code: 294 }); - loginStub.onSecondCall().resolves({ - email: credentials.email, - authtoken: 'test-token' + mockClient.login.resetBehavior(); + mockClient.login.resetHistory(); + + mockClient.login + .onFirstCall().resolves({ error_code: 294 }) + .onSecondCall().resolves({ user: { email: credentials.email, authtoken: 'test-token' } }); + + await authHandler.login(credentials.email, credentials.password); + expect(mockClient.login.callCount).to.equal(2); }); - - await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${credentials.password}`]); - expect(loginStub.calledTwice).to.be.true; - }); - it('Login should fail with invalid 2FA code', async () => { - const loginStub = sandbox.stub(authHandler, 'login'); - loginStub.onFirstCall().rejects({ error_code: 294 }); - loginStub.onSecondCall().rejects(new Error('Invalid 2FA code')); - - try { - await Helper.run(['auth:login', `--username=${credentials.email}`, `--password=${credentials.password}`]); - } catch (error) { - expect((error as Error).message).to.include('Invalid 2FA code'); - } - - expect(loginStub.calledTwice).to.be.true; - }); + it('Login should fail with invalid 2FA code', async () => { + mockClient.login.resetBehavior(); + mockClient.login.resetHistory(); + + mockClient.login + .onFirstCall().resolves({ error_code: 294 }) + .onSecondCall().rejects(new Error('Invalid 2FA code')); + + try { + await authHandler.login(credentials.email, credentials.password); + throw new Error('Should have failed'); + } catch (error) { + expect(error).to.be.instanceOf(CLIError); + } + + expect(mockClient.login.callCount).to.equal(2); + }); }); describe('Check auth:login command with OAuth', function() { diff --git a/packages/contentstack-auth/test/unit/commands/login.test.ts b/packages/contentstack-auth/test/unit/commands/login.test.ts index 7e2d73c838..011c07deab 100644 --- a/packages/contentstack-auth/test/unit/commands/login.test.ts +++ b/packages/contentstack-auth/test/unit/commands/login.test.ts @@ -1,8 +1,14 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; import LoginCommand from '../../../src/commands/auth/login'; -import { authHandler, interactive } from '../../../src/utils'; -import { configHandler, cliux } from '@contentstack/cli-utilities'; +import { authHandler, interactive, totpHandler } from '../../../src/utils'; +import { + configHandler, + cliux, + messageHandler, + authHandler as oauthHandler +} from '@contentstack/cli-utilities'; +import * as managementSDK from '@contentstack/cli-utilities'; // @ts-ignore import * as conf from '../../config.json'; @@ -16,17 +22,39 @@ const TFATestToken = '24563992'; describe('Login Command', () => { let loginStub: sinon.SinonStub; - before(function () { - loginStub = sinon.stub(authHandler, 'login').callsFake(function (email, password, tfaToken): Promise { + let sandbox: sinon.SinonSandbox; + + beforeEach(function () { + sandbox = sinon.createSandbox(); + // Setup auth handler stub + loginStub = sandbox.stub(authHandler, 'login').callsFake(function (email, password, tfaToken): Promise { if (password === credentials.password) { return Promise.resolve(user); } return Promise.reject({ message: 'invalid credentials' }); }); + + // Setup management SDK client stub + const mockClient = { + login: sandbox.stub().resolves({ user: { email: credentials.email, authtoken: 'test-token' } }), + logout: sandbox.stub().resolves({}), + getUser: sandbox.stub().resolves({ email: credentials.email }) + }; + sandbox.stub(managementSDK, 'managementSDKClient').resolves(mockClient); + authHandler.client = mockClient; + + // Setup TOTP handler stub + sandbox.stub(totpHandler, 'getTOTPCode').resolves(TFATestToken); + + // Setup OAuth handler stub + sandbox.stub(oauthHandler, 'setConfigData').resolves(); + + // Setup message handler stub + sandbox.stub(messageHandler, 'parse').returns('Successfully logged in!!'); }); - after(() => { - loginStub.restore(); + afterEach(() => { + sandbox.restore(); }); it('Login with valid credentials, should be successful', async function () { From 6ba4223e2eaa518b70b51ca3986bb2d0abb146e9 Mon Sep 17 00:00:00 2001 From: raj pandey Date: Tue, 12 Aug 2025 17:58:01 +0530 Subject: [PATCH 23/23] Fixed the stub --- .talismanrc | 2 +- .../test/unit/commands/login.test.ts | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.talismanrc b/.talismanrc index 2086a4c22b..effafb37e0 100644 --- a/.talismanrc +++ b/.talismanrc @@ -46,5 +46,5 @@ fileignoreconfig: - filename: packages/contentstack-auth/test/integration/auth.test.ts checksum: 96a66c141cf8f83443f967f62be210c3a95e06cf3d6c7bcb25229a4de7f05c5f - filename: packages/contentstack-auth/test/unit/commands/login.test.ts - checksum: c756628a3f814340035a97fbb0dbabdf5e20b9557e63e6a77138f661e3e234d5 + checksum: c256cb00cbe8a5f2ded2907677f7a55b4661cd95f1145d7bbd10740702e10e5c version: "1.0" diff --git a/packages/contentstack-auth/test/unit/commands/login.test.ts b/packages/contentstack-auth/test/unit/commands/login.test.ts index 011c07deab..617f39697a 100644 --- a/packages/contentstack-auth/test/unit/commands/login.test.ts +++ b/packages/contentstack-auth/test/unit/commands/login.test.ts @@ -26,6 +26,18 @@ describe('Login Command', () => { beforeEach(function () { sandbox = sinon.createSandbox(); + + // Setup config handler stubs + sandbox.stub(config, 'get').returns(credentials.email); + sandbox.stub(config, 'set').resolves(); + + // Setup CLI stubs + sandbox.stub(cliux, 'success').returns(); + sandbox.stub(cliux, 'error').returns(); + sandbox.stub(cliux, 'print').returns(); + + // Setup host property + sandbox.stub(LoginCommand.prototype, 'cmaHost').value('https://api.contentstack.io'); // Setup auth handler stub loginStub = sandbox.stub(authHandler, 'login').callsFake(function (email, password, tfaToken): Promise { if (password === credentials.password) { @@ -58,26 +70,21 @@ describe('Login Command', () => { }); it('Login with valid credentials, should be successful', async function () { - const cliuxStub1 = sinon.stub(cliux, 'success').returns(); await LoginCommand.run(['-u', credentials.email, '-p', credentials.password]); expect(config.get('email')).to.be.equal(credentials.email); - cliuxStub1.restore(); }); it('Login with with only email, should prompt for password', async function () { - const askPasswordStub = sinon.stub(interactive, 'askPassword').resolves(credentials.password); + const askPasswordStub = sandbox.stub(interactive, 'askPassword').resolves(credentials.password); await LoginCommand.run(['-u', credentials.email]); expect(askPasswordStub.calledOnce).to.be.true; - askPasswordStub.restore(); }); it('Login with no flags, should prompt for credentials', async function () { - const askPasswordStub = sinon.stub(interactive, 'askPassword').resolves(credentials.password); - const askEmailStub = sinon.stub(cliux, 'inquire').resolves(credentials.email); + const askPasswordStub = sandbox.stub(interactive, 'askPassword').resolves(credentials.password); + const askEmailStub = sandbox.stub(cliux, 'inquire').resolves(credentials.email); await LoginCommand.run([]); expect(askPasswordStub.calledOnce).to.be.true; expect(askEmailStub.calledOnce).to.be.true; - askPasswordStub.restore(); - askEmailStub.restore(); }); });