From eb37f5f25d079968a676cfc7b06892233e0c9e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sans=C3=A3o=20Araldi?= Date: Fri, 19 Jun 2026 10:03:07 -0300 Subject: [PATCH 1/5] chore: add scripts to exe specific workspace --- package-lock.json | 435 +++++++++++++++++++++++++++++++++++++++------- package.json | 8 +- 2 files changed, 375 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ce3f9b..2243ceb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,6 @@ "zustand": "^5.0.12" }, "devDependencies": { - "@azify/aziface-web": "1.0.6", "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", @@ -48,12 +47,6 @@ "typescript": "5" } }, - "apps/nextapp/node_modules/@azify/aziface-web": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@azify/aziface-web/-/aziface-web-1.0.6.tgz", - "integrity": "sha512-T+iaOk1zZbCdEU8B8MwBma3sI7qJ3rAdcClSvjpO2lQ5yWdyaI0QSb6thIcoT6dpuPoLuqLD6c4OEItIv9RvSQ==", - "dev": true - }, "apps/viteapp": { "version": "0.0.0", "dependencies": { @@ -141,7 +134,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -214,6 +206,7 @@ "integrity": "sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@actions/exec": "^3.0.0", "@actions/http-client": "^4.0.0" @@ -225,6 +218,7 @@ "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@actions/io": "^3.0.2" } @@ -235,6 +229,7 @@ "integrity": "sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tunnel": "^0.0.6", "undici": "^6.23.0" @@ -246,6 +241,7 @@ "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18.17" } @@ -255,7 +251,8 @@ "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", @@ -305,7 +302,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -552,6 +548,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=0.1.90" } @@ -1975,7 +1972,6 @@ "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -2834,7 +2830,8 @@ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@semantic-release/changelog": { "version": "6.0.3", @@ -3256,6 +3253,7 @@ "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -3269,6 +3267,7 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -3649,7 +3648,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3699,7 +3697,6 @@ "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", @@ -4238,7 +4235,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4303,6 +4299,7 @@ "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "environment": "^1.0.0" }, @@ -4319,6 +4316,7 @@ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4332,6 +4330,7 @@ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4358,7 +4357,8 @@ "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/aria-query": { "version": "5.3.2", @@ -4684,7 +4684,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -4810,6 +4809,7 @@ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -4823,6 +4823,7 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" } @@ -4859,6 +4860,7 @@ "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -4881,6 +4883,7 @@ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4897,6 +4900,7 @@ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4914,6 +4918,7 @@ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -4926,6 +4931,7 @@ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4944,6 +4950,7 @@ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -4963,6 +4970,7 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=10" } @@ -4973,6 +4981,7 @@ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "string-width": "^4.2.0" }, @@ -4995,6 +5004,7 @@ "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", @@ -5009,7 +5019,8 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/cliui/node_modules/string-width": { "version": "7.2.0", @@ -5017,6 +5028,7 @@ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -5035,6 +5047,7 @@ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.2.2" }, @@ -5202,6 +5215,7 @@ "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5229,6 +5243,7 @@ "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -5256,6 +5271,7 @@ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5317,8 +5333,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -5536,6 +5551,7 @@ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "readable-stream": "^2.0.2" } @@ -5552,14 +5568,16 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/emojilib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/enhanced-resolve": { "version": "5.20.1", @@ -5580,6 +5598,7 @@ "integrity": "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "execa": "^8.0.0", "java-properties": "^1.0.2" @@ -5594,6 +5613,7 @@ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -5618,6 +5638,7 @@ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16" }, @@ -5631,6 +5652,7 @@ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=16.17.0" } @@ -5641,6 +5663,7 @@ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5654,6 +5677,7 @@ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5667,6 +5691,7 @@ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "path-key": "^4.0.0" }, @@ -5683,6 +5708,7 @@ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mimic-fn": "^4.0.0" }, @@ -5699,6 +5725,7 @@ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5712,6 +5739,7 @@ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=14" }, @@ -5725,6 +5753,7 @@ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5738,6 +5767,7 @@ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -5748,6 +5778,7 @@ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -5761,6 +5792,7 @@ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -5946,7 +5978,6 @@ "devOptional": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -6011,7 +6042,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6197,7 +6227,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -6646,7 +6675,8 @@ "url": "https://opencollective.com/fastify" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -6702,6 +6732,7 @@ "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-unicode-supported": "^2.0.0" }, @@ -6744,6 +6775,7 @@ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^2.0.0" }, @@ -6770,6 +6802,7 @@ "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "semver-regex": "^4.0.5", "super-regex": "^1.0.0" @@ -6921,6 +6954,7 @@ "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -6985,6 +7019,7 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6995,6 +7030,7 @@ "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -7089,6 +7125,7 @@ "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", @@ -7104,6 +7141,7 @@ "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "through2": "~2.0.0" } @@ -7348,6 +7386,7 @@ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": "*" } @@ -7358,6 +7397,7 @@ "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -7580,7 +7620,8 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/is-async-function": { "version": "2.1.1", @@ -7741,6 +7782,7 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -7847,6 +7889,7 @@ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -7985,6 +8028,7 @@ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -8093,6 +8137,7 @@ "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6.0" } @@ -8161,14 +8206,16 @@ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -8196,7 +8243,8 @@ "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.8.tgz", "integrity": "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -8586,6 +8634,7 @@ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -8602,6 +8651,7 @@ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -8626,6 +8676,7 @@ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -8725,6 +8776,7 @@ "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-event": "^6.0.0", "type-fest": "^4.6.0", @@ -8757,6 +8809,7 @@ "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-escapes": "^7.0.0", "ansi-regex": "^6.1.0", @@ -9080,6 +9133,7 @@ "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", @@ -11038,7 +11092,6 @@ "dev": true, "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -11880,6 +11933,7 @@ "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -11893,6 +11947,7 @@ "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-timeout": "^6.1.2" }, @@ -11935,6 +11990,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-try": "^1.0.0" }, @@ -11948,6 +12004,7 @@ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^1.1.0" }, @@ -11984,6 +12041,7 @@ "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" }, @@ -11997,6 +12055,7 @@ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -12038,6 +12097,7 @@ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -12050,7 +12110,8 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", @@ -12058,6 +12119,7 @@ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "parse5": "^6.0.1" } @@ -12067,7 +12129,8 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/path-exists": { "version": "3.0.0", @@ -12075,6 +12138,7 @@ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -12138,6 +12202,7 @@ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -12158,6 +12223,7 @@ "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -12275,6 +12341,7 @@ "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "parse-ms": "^4.0.0" }, @@ -12369,7 +12436,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12379,7 +12445,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -12432,6 +12497,7 @@ "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "find-up-simple": "^1.0.1", "read-pkg": "^10.0.0", @@ -12450,6 +12516,7 @@ "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "lru-cache": "^11.1.0" }, @@ -12463,6 +12530,7 @@ "integrity": "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==", "dev": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": "20 || >=22" } @@ -12473,6 +12541,7 @@ "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", @@ -12488,6 +12557,7 @@ "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", @@ -12508,6 +12578,7 @@ "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", "dev": true, "license": "(MIT OR CC0-1.0)", + "peer": true, "dependencies": { "tagged-tag": "^1.0.0" }, @@ -12524,6 +12595,7 @@ "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -12676,6 +12748,7 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -12975,6 +13048,7 @@ "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 20" } @@ -13005,6 +13079,7 @@ "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" @@ -13019,6 +13094,7 @@ "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", @@ -13033,7 +13109,8 @@ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/@octokit/plugin-paginate-rest": { "version": "14.0.0", @@ -13041,6 +13118,7 @@ "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/types": "^16.0.0" }, @@ -13057,6 +13135,7 @@ "integrity": "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", @@ -13075,6 +13154,7 @@ "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" @@ -13092,6 +13172,7 @@ "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", @@ -13110,6 +13191,7 @@ "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/types": "^16.0.0" }, @@ -13123,6 +13205,7 @@ "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/openapi-types": "^27.0.0" } @@ -13133,6 +13216,7 @@ "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-writer": "^8.0.0", @@ -13156,6 +13240,7 @@ "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -13166,6 +13251,7 @@ "integrity": "sha512-aYYFkwHW3c6YtHwQF0t0+lAjlU+87NFOZuH2CvWFD0Ylivc7MwhZMiHOJ0FMpIgPpCVib/VUAcOwvrW0KnxQtA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/core": "^7.0.0", "@octokit/plugin-paginate-rest": "^14.0.0", @@ -13198,6 +13284,7 @@ "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@actions/core": "^3.0.0", "@semantic-release/error": "^4.0.0", @@ -13228,6 +13315,7 @@ "integrity": "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-writer": "^8.0.0", @@ -13253,6 +13341,7 @@ "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16" }, @@ -13266,6 +13355,7 @@ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "lru-cache": "^10.0.1" }, @@ -13278,7 +13368,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/@semantic-release/release-notes-generator/node_modules/normalize-package-data": { "version": "6.0.2", @@ -13286,6 +13377,7 @@ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", @@ -13301,6 +13393,7 @@ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", @@ -13319,6 +13412,7 @@ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", @@ -13339,6 +13433,7 @@ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -13352,6 +13447,7 @@ "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -13365,6 +13461,7 @@ "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -13381,7 +13478,8 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/semantic-release/node_modules/clean-stack": { "version": "5.3.0", @@ -13389,6 +13487,7 @@ "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -13405,6 +13504,7 @@ "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "compare-func": "^2.0.0" }, @@ -13418,6 +13518,7 @@ "integrity": "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "conventional-commits-filter": "^5.0.0", @@ -13438,6 +13539,7 @@ "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -13448,6 +13550,7 @@ "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "meow": "^13.0.0" @@ -13465,6 +13568,7 @@ "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", @@ -13492,6 +13596,7 @@ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" @@ -13509,6 +13614,7 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -13522,6 +13628,7 @@ "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "lru-cache": "^11.1.0" }, @@ -13535,6 +13642,7 @@ "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } @@ -13545,6 +13653,7 @@ "integrity": "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.3.4", "import-meta-resolve": "^4.0.0" @@ -13559,6 +13668,7 @@ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13572,6 +13682,7 @@ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -13585,6 +13696,7 @@ "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -13602,6 +13714,7 @@ "integrity": "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==", "dev": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": "20 || >=22" } @@ -13612,6 +13725,7 @@ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -13625,6 +13739,7 @@ "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", @@ -13640,6 +13755,7 @@ "integrity": "sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -13720,6 +13836,7 @@ ], "dev": true, "license": "Artistic-2.0", + "peer": true, "workspaces": [ "docs", "smoke-tests", @@ -13808,6 +13925,7 @@ "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" @@ -13824,6 +13942,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -13833,6 +13952,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.4" }, @@ -13844,13 +13964,15 @@ "version": "1.1.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/agent": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -13867,6 +13989,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.0", "@isaacs/string-locale-compare": "^1.1.0", @@ -13915,6 +14038,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/map-workspaces": "^5.0.0", "@npmcli/package-json": "^7.0.0", @@ -13934,6 +14058,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -13946,6 +14071,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/promise-spawn": "^9.0.0", @@ -13965,6 +14091,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" @@ -13981,6 +14108,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/name-from-folder": "^4.0.0", "@npmcli/package-json": "^7.0.0", @@ -13996,6 +14124,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "cacache": "^20.0.0", "json-parse-even-better-errors": "^5.0.0", @@ -14012,6 +14141,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14021,6 +14151,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14030,6 +14161,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^7.0.0", "glob": "^13.0.0", @@ -14048,6 +14180,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "which": "^6.0.0" }, @@ -14060,6 +14193,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -14072,6 +14206,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14081,6 +14216,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", @@ -14097,6 +14233,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" }, @@ -14109,6 +14246,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14118,6 +14256,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -14127,6 +14266,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.2", "@sigstore/bundle": "^4.0.0", @@ -14144,6 +14284,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/protobuf-specs": "^0.5.0", "tuf-js": "^4.1.0" @@ -14157,6 +14298,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", @@ -14171,6 +14313,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -14180,6 +14323,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" @@ -14193,6 +14337,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14202,6 +14347,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 14" } @@ -14210,19 +14356,22 @@ "version": "2.1.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/archy": { "version": "1.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/balanced-match": { "version": "4.0.4", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "18 || 20 || >=22" } @@ -14232,6 +14381,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "cmd-shim": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", @@ -14248,6 +14398,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18.20" }, @@ -14260,6 +14411,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "balanced-match": "^4.0.2" }, @@ -14272,6 +14424,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", @@ -14293,6 +14446,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -14305,6 +14459,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -14320,6 +14475,7 @@ ], "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -14329,6 +14485,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=20" } @@ -14338,6 +14495,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14347,6 +14505,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">= 18" } @@ -14356,6 +14515,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "bin": { "cssesc": "bin/cssesc" }, @@ -14368,6 +14528,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.3" }, @@ -14385,6 +14546,7 @@ "dev": true, "inBundle": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.3.1" } @@ -14394,6 +14556,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -14402,13 +14565,15 @@ "version": "3.1.3", "dev": true, "inBundle": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 4.9.1" } @@ -14418,6 +14583,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -14430,6 +14596,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", @@ -14446,13 +14613,15 @@ "version": "4.2.11", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/hosted-git-info": { "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "lru-cache": "^11.1.0" }, @@ -14464,13 +14633,15 @@ "version": "4.2.0", "dev": true, "inBundle": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/http-proxy-agent": { "version": "7.0.2", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -14484,6 +14655,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -14498,6 +14670,7 @@ "inBundle": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -14514,6 +14687,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minimatch": "^10.0.3" }, @@ -14526,6 +14700,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14535,6 +14710,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/package-json": "^7.0.0", "npm-package-arg": "^13.0.0", @@ -14552,6 +14728,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 12" } @@ -14561,6 +14738,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "cidr-regex": "^5.0.1" }, @@ -14573,6 +14751,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=20" } @@ -14582,6 +14761,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14591,6 +14771,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -14602,25 +14783,29 @@ "node >= 0.2.0" ], "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/just-diff": { "version": "6.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/libnpmaccess": { "version": "10.0.3", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-package-arg": "^13.0.0", "npm-registry-fetch": "^19.0.0" @@ -14634,6 +14819,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^9.4.2", "@npmcli/installed-package-contents": "^4.0.0", @@ -14653,6 +14839,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/arborist": "^9.4.2", @@ -14676,6 +14863,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^9.4.2" }, @@ -14688,6 +14876,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "aproba": "^2.0.0", "npm-registry-fetch": "^19.0.0" @@ -14701,6 +14890,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/arborist": "^9.4.2", "@npmcli/run-script": "^10.0.0", @@ -14716,6 +14906,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/package-json": "^7.0.0", "ci-info": "^4.0.0", @@ -14735,6 +14926,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-registry-fetch": "^19.0.0" }, @@ -14747,6 +14939,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "aproba": "^2.0.0", "npm-registry-fetch": "^19.0.0" @@ -14760,6 +14953,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/git": "^7.0.0", "@npmcli/run-script": "^10.0.0", @@ -14776,6 +14970,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": "20 || >=22" } @@ -14785,6 +14980,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", @@ -14808,6 +15004,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "brace-expansion": "^5.0.2" }, @@ -14823,6 +15020,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -14832,6 +15030,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -14844,6 +15043,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", @@ -14861,6 +15061,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -14873,6 +15074,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14884,13 +15086,15 @@ "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -14903,6 +15107,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14914,13 +15119,15 @@ "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/minipass-sized": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.1.2" }, @@ -14933,6 +15140,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "minipass": "^7.1.2" }, @@ -14944,13 +15152,15 @@ "version": "2.1.3", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/mute-stream": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -14960,6 +15170,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -14969,6 +15180,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -14993,6 +15205,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "abbrev": "^4.0.0" }, @@ -15008,6 +15221,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15017,6 +15231,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-normalize-package-bin": "^5.0.0" }, @@ -15029,6 +15244,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "semver": "^7.1.1" }, @@ -15041,6 +15257,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15050,6 +15267,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "hosted-git-info": "^9.0.0", "proc-log": "^6.0.0", @@ -15065,6 +15283,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "ignore-walk": "^8.0.0", "proc-log": "^6.0.0" @@ -15078,6 +15297,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-install-checks": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", @@ -15093,6 +15313,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0" @@ -15106,6 +15327,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@npmcli/redact": "^4.0.0", "jsonparse": "^1.3.1", @@ -15125,6 +15347,7 @@ "dev": true, "inBundle": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15134,6 +15357,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -15146,6 +15370,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/git": "^7.0.0", @@ -15177,6 +15402,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "json-parse-even-better-errors": "^5.0.0", "just-diff": "^6.0.0", @@ -15191,6 +15417,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" @@ -15207,6 +15434,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15220,6 +15448,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15229,6 +15458,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15238,6 +15468,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -15247,6 +15478,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -15256,6 +15488,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "read": "^5.0.0" }, @@ -15267,6 +15500,7 @@ "version": "0.12.0", "dev": true, "inBundle": true, + "peer": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" } @@ -15276,6 +15510,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "mute-stream": "^3.0.0" }, @@ -15288,6 +15523,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15297,13 +15533,15 @@ "dev": true, "inBundle": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/semver": { "version": "7.7.4", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -15316,6 +15554,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": ">=14" }, @@ -15328,6 +15567,7 @@ "dev": true, "inBundle": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", @@ -15345,6 +15585,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -15355,6 +15596,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" @@ -15369,6 +15611,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", @@ -15382,13 +15625,15 @@ "version": "2.5.0", "dev": true, "inBundle": true, - "license": "CC-BY-3.0" + "license": "CC-BY-3.0", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/spdx-expression-parse": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -15398,13 +15643,15 @@ "version": "3.0.23", "dev": true, "inBundle": true, - "license": "CC0-1.0" + "license": "CC0-1.0", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/ssri": { "version": "13.0.1", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -15417,6 +15664,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -15429,6 +15677,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -15444,19 +15693,22 @@ "version": "0.2.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/tiny-relative-date": { "version": "2.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/tinyglobby": { "version": "0.2.15", "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -15473,6 +15725,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" }, @@ -15503,6 +15756,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -15512,6 +15766,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "dependencies": { "@tufjs/models": "4.1.0", "debug": "^4.4.3", @@ -15525,13 +15780,15 @@ "version": "1.0.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semantic-release/node_modules/npm/node_modules/validate-npm-package-name": { "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.17.0 || >=22.9.0" } @@ -15541,6 +15798,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "engines": { "node": "20 || >=22" } @@ -15550,6 +15808,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "isexe": "^4.0.0" }, @@ -15565,6 +15824,7 @@ "dev": true, "inBundle": true, "license": "ISC", + "peer": true, "dependencies": { "signal-exit": "^4.0.1" }, @@ -15577,6 +15837,7 @@ "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "peer": true, "engines": { "node": ">=18" } @@ -15587,6 +15848,7 @@ "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15600,6 +15862,7 @@ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15613,6 +15876,7 @@ "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", @@ -15633,6 +15897,7 @@ "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", "dev": true, "license": "(MIT OR CC0-1.0)", + "peer": true, "dependencies": { "tagged-tag": "^1.0.0" }, @@ -15649,6 +15914,7 @@ "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -15662,6 +15928,7 @@ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=14" }, @@ -15675,6 +15942,7 @@ "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -15687,7 +15955,8 @@ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/semver": { "version": "7.7.4", @@ -15708,6 +15977,7 @@ "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15921,6 +16191,7 @@ "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", @@ -15936,6 +16207,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -15949,6 +16221,7 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -15964,6 +16237,7 @@ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -15973,7 +16247,8 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/signale/node_modules/escape-string-regexp": { "version": "1.0.5", @@ -15981,6 +16256,7 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -15991,6 +16267,7 @@ "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -16004,6 +16281,7 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -16014,6 +16292,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -16027,6 +16306,7 @@ "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" }, @@ -16071,7 +16351,8 @@ "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/spdx-correct": { "version": "3.2.0", @@ -16146,6 +16427,7 @@ "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -16167,6 +16449,7 @@ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16295,6 +16578,7 @@ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16308,6 +16592,7 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -16394,6 +16679,7 @@ "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", @@ -16425,6 +16711,7 @@ "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -16455,6 +16742,7 @@ "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -16585,6 +16873,7 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -16596,6 +16885,7 @@ "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "convert-hrtime": "^5.0.0" }, @@ -16651,7 +16941,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -16678,6 +16967,7 @@ "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -16816,6 +17106,7 @@ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } @@ -16930,7 +17221,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17009,6 +17299,7 @@ "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=20.18.1" } @@ -17026,6 +17317,7 @@ "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -17185,7 +17477,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz", "integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -17279,7 +17570,8 @@ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/which": { "version": "2.0.2", @@ -17416,6 +17708,7 @@ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -17433,7 +17726,8 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "7.2.0", @@ -17441,6 +17735,7 @@ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -17459,6 +17754,7 @@ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.2.2" }, @@ -17482,6 +17778,7 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.4" } @@ -17492,6 +17789,7 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=10" } @@ -17509,6 +17807,7 @@ "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", @@ -17527,6 +17826,7 @@ "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" } @@ -17536,7 +17836,8 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/yargs/node_modules/string-width": { "version": "7.2.0", @@ -17544,6 +17845,7 @@ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -17562,6 +17864,7 @@ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^6.2.2" }, @@ -17591,6 +17894,7 @@ "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -17604,7 +17908,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 4dfa98a..25d741c 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,18 @@ "build": "npm run build --workspaces --if-present", "dev": "npm run dev --workspaces --if-present", "release": "cd packages/aziface && npm run build && npx semantic-release", - "clean": "npm run clean --workspaces --if-present" + "clean": "npm run clean --workspaces --if-present", + "next:dev": "npm run dev -w nextapp", + "next:build": "npm run build -w nextapp", + "vite:dev": "npm run dev -w viteapp", + "vite:build": "npm run build -w viteapp" }, "repository": { "type": "git", "url": "git+https://github.com/azifydev/aziface-web.git" }, "keywords": [], - "author": "Azify (https://github.com/azifydev)", + "author": "Azify (https://github.com/azifydev)", "license": "MIT", "type": "commonjs", "bugs": { From f98f6f1022762be612a421aeb6491b91d30ed0b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sans=C3=A3o=20Araldi?= Date: Fri, 19 Jun 2026 10:48:57 -0300 Subject: [PATCH 2/5] feat: swap return void by promise boolean --- packages/aziface/src/errors/errors.ts | 2 +- packages/aziface/src/module/aziface.ts | 165 ++++++++++++------ .../src/services/networking-request.ts | 23 ++- .../aziface/src/services/request-processor.ts | 17 +- packages/aziface/src/utils/index.ts | 2 + .../src/utils/{utils.ts => sessions.ts} | 10 +- packages/aziface/src/utils/styles.ts | 21 +++ 7 files changed, 169 insertions(+), 71 deletions(-) create mode 100644 packages/aziface/src/utils/index.ts rename packages/aziface/src/utils/{utils.ts => sessions.ts} (91%) create mode 100644 packages/aziface/src/utils/styles.ts diff --git a/packages/aziface/src/errors/errors.ts b/packages/aziface/src/errors/errors.ts index 939d705..3f03c2e 100644 --- a/packages/aziface/src/errors/errors.ts +++ b/packages/aziface/src/errors/errors.ts @@ -1,5 +1,5 @@ import { SessionCode } from '../types/aziface'; -import { getSessionStatusCauseByCode } from '../utils/utils'; +import { getSessionStatusCauseByCode } from '../utils'; export class SessionError extends Error { constructor(public code: SessionCode) { diff --git a/packages/aziface/src/module/aziface.ts b/packages/aziface/src/module/aziface.ts index c18726d..f55f021 100644 --- a/packages/aziface/src/module/aziface.ts +++ b/packages/aziface/src/module/aziface.ts @@ -1,9 +1,13 @@ -import { FaceTecInitializationError, FaceTecSDKInstance, FaceTecSessionStatus } from '../types/FaceTecPublicApi'; +import { + FaceTecInitializationError, + FaceTecSDKInstance, + FaceTecSessionStatus, +} from '../types/FaceTecPublicApi'; import { FaceTecSDK as FaceTecSDKType } from '../types/FaceTecSDK'; import { SessionError } from '../errors/errors'; import { SessionRequestProcessor } from '../services/request-processor'; import { applyTheme, getBackgroundColor } from '../styles/theme'; -import { getInitializationErrorCauseByCode } from '../utils/utils'; +import { getInitializationErrorCauseByCode } from '../utils'; import { Controller, DisposeCallback, @@ -26,7 +30,10 @@ export class AzifaceController implements Controller { public static baseUrl: string = ''; public static headers: InitializeHeaders = {} as InitializeHeaders; private faceTecSDKInstance: FaceTecSDKInstance | null = null; - public initialize = (init: Initialize, callback: InitializeCallback): void => { + public initialize = ( + init: Initialize, + callback: InitializeCallback, + ): void => { this.setupController(init); FaceTecSDK.setImagesDirectory(`/core/images`); @@ -42,30 +49,35 @@ export class AzifaceController implements Controller { return; } - const sessionRequestProcessor: SessionRequestProcessor = new SessionRequestProcessor( - this.generateExternalDatabaseRefID(), - this.onComplete, - ); - - FaceTecSDK.initializeWithSessionRequest(AzifaceController.deviceKeyIdentifier, sessionRequestProcessor, { - onSuccess: (newFaceTecSdkInstance: FaceTecSDKInstance) => { - this.onInitializationSuccess(newFaceTecSdkInstance); - callback({ - isSuccess: true, - error: undefined, - }); - }, - onError: (initializationError: FaceTecInitializationError) => { - this.onInitializationError(); - callback({ - isSuccess: false, - error: { - code: initializationError, - cause: getInitializationErrorCauseByCode(initializationError), - }, - }); + const sessionRequestProcessor: SessionRequestProcessor = + new SessionRequestProcessor( + this.generateExternalDatabaseRefID(), + this.onComplete, + ); + + FaceTecSDK.initializeWithSessionRequest( + AzifaceController.deviceKeyIdentifier, + sessionRequestProcessor, + { + onSuccess: (newFaceTecSdkInstance: FaceTecSDKInstance) => { + this.onInitializationSuccess(newFaceTecSdkInstance); + callback({ + isSuccess: true, + error: undefined, + }); + }, + onError: (initializationError: FaceTecInitializationError) => { + this.onInitializationError(); + callback({ + isSuccess: false, + error: { + code: initializationError, + cause: getInitializationErrorCauseByCode(initializationError), + }, + }); + }, }, - }); + ); }; public dispose = (callback: DisposeCallback): void => { @@ -83,8 +95,8 @@ export class AzifaceController implements Controller { } }; - public authenticate = (): void => - this.decorator((instance) => { + public authenticate = async (): Promise => { + return await this.decoratorAsync(instance => { if (AzifaceController.latestExternalDatabaseRefID.length === 0) { throw new SessionError(MethodError.NoUserEnrolled); } else { @@ -93,48 +105,59 @@ export class AzifaceController implements Controller { this.onAttach(); } }); + }; - public enroll = (): void => - this.decorator((instance) => { - AzifaceController.latestExternalDatabaseRefID = this.generateExternalDatabaseRefID(); + public enroll = async (): Promise => { + return await this.decoratorAsync(instance => { + AzifaceController.latestExternalDatabaseRefID = + this.generateExternalDatabaseRefID(); const processor = this.makeSessionRequestProcessor(); instance.start3DLiveness(processor); this.onAttach(); }); + }; - public liveness = (): void => - this.decorator((instance) => { + public liveness = async (): Promise => { + return await this.decoratorAsync(instance => { AzifaceController.latestExternalDatabaseRefID = ''; const processor = this.makeSessionRequestProcessor(); instance.start3DLiveness(processor); this.onAttach(); }); + }; - public photoMatch = (): void => - this.decorator((instance) => { - AzifaceController.latestExternalDatabaseRefID = this.generateExternalDatabaseRefID(); + public photoMatch = async (): Promise => { + return await this.decoratorAsync(instance => { + AzifaceController.latestExternalDatabaseRefID = + this.generateExternalDatabaseRefID(); const processor = this.makeSessionRequestProcessor(); instance.start3DLivenessThen3D2DPhotoIDMatch(processor); this.onAttach(); }); + }; - public photoScan = (): void => - this.decorator((instance) => { - AzifaceController.latestExternalDatabaseRefID = this.generateExternalDatabaseRefID(); + public photoScan = async (): Promise => { + return await this.decoratorAsync(instance => { + AzifaceController.latestExternalDatabaseRefID = + this.generateExternalDatabaseRefID(); const processor = this.makeSessionRequestProcessor(); instance.startIDScanOnly(processor); this.onAttach(); }); + }; public withTheme = (overrides?: Style): void => applyTheme(overrides); - public setLocale = (locale: Locale): void => this.decorator(() => FaceTecSDK.configureLocalization(i18n[locale])); + public setLocale = (locale: Locale): void => + this.decoratorSync(() => FaceTecSDK.configureLocalization(i18n[locale])); - private decorator = (callback: (instance: FaceTecSDKInstance) => void): void => { + private decoratorSync = ( + callback: (instance: FaceTecSDKInstance) => void, + ): void => { if (!AzifaceController.isInitialized || !this.faceTecSDKInstance) { throw new SessionError(MethodError.NotInitialized); } else { @@ -142,11 +165,28 @@ export class AzifaceController implements Controller { } }; + private decoratorAsync = ( + callback: (instance: FaceTecSDKInstance) => void, + ): Promise => { + return new Promise((resolve, reject) => { + try { + this.decoratorSync(callback); + resolve(true); + } catch (error) { + reject(error); + } + }); + }; + private makeSessionRequestProcessor = (): SessionRequestProcessor => - new SessionRequestProcessor(AzifaceController.latestExternalDatabaseRefID, this.onComplete); + new SessionRequestProcessor( + AzifaceController.latestExternalDatabaseRefID, + this.onComplete, + ); private setupController = (init: Initialize): void => { - AzifaceController.deviceKeyIdentifier = init?.params?.deviceKeyIdentifier || ''; + AzifaceController.deviceKeyIdentifier = + init?.params?.deviceKeyIdentifier || ''; AzifaceController.baseUrl = init?.params?.baseUrl || ''; AzifaceController.isDevelopment = init?.params?.isDevelopment || false; AzifaceController.headers = init?.headers; @@ -163,9 +203,12 @@ export class AzifaceController implements Controller { this.withTheme(); }; - private generateExternalDatabaseRefID = (): string => `aziface_web_${crypto.randomUUID()}`; + private generateExternalDatabaseRefID = (): string => + `aziface_web_${crypto.randomUUID()}`; - private onInitializationSuccess = (newFaceTecSdkInstance: FaceTecSDKInstance): void => { + private onInitializationSuccess = ( + newFaceTecSdkInstance: FaceTecSDKInstance, + ): void => { this.faceTecSDKInstance = newFaceTecSdkInstance; AzifaceController.isInitialized = true; }; @@ -173,14 +216,17 @@ export class AzifaceController implements Controller { private onInitializationError = (): void => this.cleanup(); private onComplete = (faceTecSessionStatus: FaceTecSessionStatus): void => { - const isError = faceTecSessionStatus !== FaceTecSDK.FaceTecSessionStatus.SessionCompleted; + const isError = + faceTecSessionStatus !== FaceTecSDK.FaceTecSessionStatus.SessionCompleted; if (isError) { throw new SessionError(faceTecSessionStatus); } }; private onAttach = () => { - const container = document.getElementById('DOM_FT_PRIMARY_TOPLEVEL_mainContainer'); + const container = document.getElementById( + 'DOM_FT_PRIMARY_TOPLEVEL_mainContainer', + ); if (container) { container.style.backgroundColor = getBackgroundColor(); @@ -192,7 +238,10 @@ export class AzifaceController implements Controller { const controller = new AzifaceController(); -export function initialize(init: Initialize, callback: InitializeCallback): void { +export function initialize( + init: Initialize, + callback: InitializeCallback, +): void { controller.initialize(init, callback); } @@ -200,24 +249,24 @@ export function dispose(callback: DisposeCallback): void { controller.dispose(callback); } -export function enroll(): void { - controller.enroll(); +export async function enroll(): Promise { + return await controller.enroll(); } -export function authenticate(): void { - controller.authenticate(); +export async function authenticate(): Promise { + return await controller.authenticate(); } -export function liveness(): void { - controller.liveness(); +export async function liveness(): Promise { + return await controller.liveness(); } -export function photoMatch(): void { - controller.photoMatch(); +export async function photoMatch(): Promise { + return await controller.photoMatch(); } -export function photoScan(): void { - controller.photoScan(); +export async function photoScan(): Promise { + return await controller.photoScan(); } export function withTheme(overrides?: Style): void { diff --git a/packages/aziface/src/services/networking-request.ts b/packages/aziface/src/services/networking-request.ts index 5df680b..a5d94cd 100644 --- a/packages/aziface/src/services/networking-request.ts +++ b/packages/aziface/src/services/networking-request.ts @@ -47,11 +47,17 @@ export class FaceTecTestingAPINetworkingRequest { // Developer Note: This is ONLY needed for calls to the FaceTec Testing API. // You should remove this when using Your App connected to Your Webservice + FaceTec Server - this.request.setRequestHeader('X-Device-Key', AzifaceController.deviceKeyIdentifier); + this.request.setRequestHeader( + 'X-Device-Key', + AzifaceController.deviceKeyIdentifier, + ); // Developer Note: This is ONLY needed for calls to the FaceTec Testing API. // You should remove this when using Your App connected to Your Webservice + FaceTec Server if (AzifaceController.isDevelopment) { - this.request.setRequestHeader('X-Testing-API-Header', FaceTecSDK.getTestingAPIHeader()); + this.request.setRequestHeader( + 'X-Testing-API-Header', + FaceTecSDK.getTestingAPIHeader(), + ); } Object.entries(AzifaceController.headers).forEach(([key, value]) => { @@ -111,8 +117,13 @@ export class FaceTecTestingAPINetworkingRequest { }; // Send the payload - if (typeof faceTecTestingAPIPayload === 'object' && Object.keys(faceTecTestingAPIPayload).length > 0) { - const faceTecTestingAPIPayloadJSON = JSON.parse(JSON.stringify(faceTecTestingAPIPayload)); + if ( + typeof faceTecTestingAPIPayload === 'object' && + Object.keys(faceTecTestingAPIPayload).length > 0 + ) { + const faceTecTestingAPIPayloadJSON = JSON.parse( + JSON.stringify(faceTecTestingAPIPayload), + ); if (faceTecTestingAPIPayload.externalDatabaseRefID.length === 0) { delete faceTecTestingAPIPayloadJSON.externalDatabaseRefID; @@ -124,7 +135,9 @@ export class FaceTecTestingAPINetworkingRequest { } }; - public processResponse = (onResponseBlobReceived: (responseBlob: string) => void): void => { + public processResponse = ( + onResponseBlobReceived: (responseBlob: string) => void, + ): void => { const parsedResponse: { responseBlob: string; result?: { [key: string]: string | undefined }; diff --git a/packages/aziface/src/services/request-processor.ts b/packages/aziface/src/services/request-processor.ts index f74b428..76484c7 100644 --- a/packages/aziface/src/services/request-processor.ts +++ b/packages/aziface/src/services/request-processor.ts @@ -8,7 +8,9 @@ import { FaceTecTestingAPINetworkingRequest } from './networking-request'; export class SessionRequestProcessor { public requestCallback!: FaceTecSessionRequestProcessorCallback; // Save the onCompleteCallback - public onCompleteCallback: (faceTecSessionStatus: FaceTecSessionStatus) => void; + public onCompleteCallback: ( + faceTecSessionStatus: FaceTecSessionStatus, + ) => void; public onOfficialIDPhotoCallback?: (image: string) => void; // ** Important Note: ** // The API parameter demonstrationExternalDatabaseRefID is developer-defined and created and set by you using your own business logic. @@ -26,13 +28,17 @@ export class SessionRequestProcessor { onCompleteCallback: (faceTecSessionStatus: FaceTecSessionStatus) => void, onOfficialIDPhotoCallback?: (image: string) => void, ) { - this.demonstrationExternalDatabaseRefID = demonstrationExternalDatabaseRefID; + this.demonstrationExternalDatabaseRefID = + demonstrationExternalDatabaseRefID; this.onCompleteCallback = onCompleteCallback; this.onOfficialIDPhotoCallback = onOfficialIDPhotoCallback; } // This method gets called from inside the FaceTecSDK when some server side process is needed to continue processing - public onSessionRequest = (requestBlob: string, requestCallback: FaceTecSessionRequestProcessorCallback): void => { + public onSessionRequest = ( + requestBlob: string, + requestCallback: FaceTecSessionRequestProcessorCallback, + ): void => { // Create the simple payload to send to the networking class const sessionRequestProcessorPayload: { requestBlob: string; @@ -44,7 +50,10 @@ export class SessionRequestProcessor { // Here you will call your implementation of networking that communicates through your middleware that contacts your server code // Send the payload to the FaceTecTestingAPI for processing - new FaceTecTestingAPINetworkingRequest().send(sessionRequestProcessorPayload, requestCallback); + new FaceTecTestingAPINetworkingRequest().send( + sessionRequestProcessorPayload, + requestCallback, + ); }; // Session is completely done diff --git a/packages/aziface/src/utils/index.ts b/packages/aziface/src/utils/index.ts new file mode 100644 index 0000000..471dca8 --- /dev/null +++ b/packages/aziface/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './sessions'; +export * from './styles'; diff --git a/packages/aziface/src/utils/utils.ts b/packages/aziface/src/utils/sessions.ts similarity index 91% rename from packages/aziface/src/utils/utils.ts rename to packages/aziface/src/utils/sessions.ts index 670855a..c37828e 100644 --- a/packages/aziface/src/utils/utils.ts +++ b/packages/aziface/src/utils/sessions.ts @@ -4,7 +4,9 @@ import { MethodError, SessionCode } from '../types/aziface'; declare const FaceTecSDK: typeof FaceTecSDKType; -export function getInitializationErrorCauseByCode(value: FaceTecInitializationError): string { +export function getInitializationErrorCauseByCode( + value: FaceTecInitializationError, +): string { switch (value) { case FaceTecSDK.FaceTecInitializationError.RejectedByServer: return 'The Aziface SDK Server could not validate this application.'; @@ -12,9 +14,11 @@ export function getInitializationErrorCauseByCode(value: FaceTecInitializationEr return 'The provided FaceTecSessionRequestProcessor called abortOnCatastrophicError() and the application could not be validated.'; case FaceTecSDK.FaceTecInitializationError.DeviceNotSupported: return 'This device/platform/browser/version combination is not supported by the Aziface Browser SDK.'; - case FaceTecSDK.FaceTecInitializationError.ResourcesCouldNotBeLoadedOnLastInit: + case FaceTecSDK.FaceTecInitializationError + .ResourcesCouldNotBeLoadedOnLastInit: return 'Aziface SDK could not load resources.'; - case FaceTecSDK.FaceTecInitializationError.GetUserMediaRemoteHTTPNotSupported: + case FaceTecSDK.FaceTecInitializationError + .GetUserMediaRemoteHTTPNotSupported: return 'Browser Camera APIs are only supported on localhost or https.'; case FaceTecSDK.FaceTecInitializationError.UnknownInternalError: return 'An unknown and unexpected error occurred.'; diff --git a/packages/aziface/src/utils/styles.ts b/packages/aziface/src/utils/styles.ts new file mode 100644 index 0000000..e923e4a --- /dev/null +++ b/packages/aziface/src/utils/styles.ts @@ -0,0 +1,21 @@ +import { CancelLocation } from '../types/aziface'; +import type { FaceTecCancelButtonLocation } from '../types/FaceTecCustomization'; + +const CANCEL_BUTTON_LOCATION = { + Disabled: 0 as FaceTecCancelButtonLocation, + TopLeft: 1 as FaceTecCancelButtonLocation, + TopRight: 2 as FaceTecCancelButtonLocation, +} as const; + +export function resolveCancelLocation( + location?: CancelLocation, +): FaceTecCancelButtonLocation { + const defaultLocation = CANCEL_BUTTON_LOCATION.TopLeft; + const locations: Record = { + 'top-left': defaultLocation, + 'top-right': CANCEL_BUTTON_LOCATION.TopRight, + none: CANCEL_BUTTON_LOCATION.Disabled, + }; + + return location ? locations[location] : defaultLocation; +} From 2d4f6cfb7c1e2f7b42eda6d94d1d288be420b2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sans=C3=A3o=20Araldi?= Date: Fri, 19 Jun 2026 10:49:24 -0300 Subject: [PATCH 3/5] feat: add new props to the theme --- packages/aziface/src/index.ts | 1 + packages/aziface/src/styles/theme.ts | 129 +++++++++++++++++--------- packages/aziface/src/types/aziface.ts | 58 ++++++++++-- 3 files changed, 137 insertions(+), 51 deletions(-) diff --git a/packages/aziface/src/index.ts b/packages/aziface/src/index.ts index 92cd80b..00bc12f 100644 --- a/packages/aziface/src/index.ts +++ b/packages/aziface/src/index.ts @@ -12,6 +12,7 @@ export { } from './module/aziface'; export type { + CancelLocation, DisposeCallback, Initialize, InitializeCallback, diff --git a/packages/aziface/src/styles/theme.ts b/packages/aziface/src/styles/theme.ts index e1b2a65..3c6fe5f 100644 --- a/packages/aziface/src/styles/theme.ts +++ b/packages/aziface/src/styles/theme.ts @@ -1,10 +1,10 @@ import { FaceTecSDK as FaceTecSDKType } from '../types/FaceTecSDK'; import { Style } from '../types/aziface'; +import { resolveCancelLocation } from '../utils'; declare const FaceTecSDK: typeof FaceTecSDKType; function retrieveConfigurationWizardCustomization(theme?: Style) { - const sdkImageDirectory = `/core/images/`; // For Color Customization const outerBackgroundColor = theme?.backgroundColor || '#FFFFFF'; const frameColor = theme?.frameColor || '#FFFFFF'; @@ -12,45 +12,59 @@ function retrieveConfigurationWizardCustomization(theme?: Style) { const ovalColor = theme?.ovalColor || '#026FF4'; const dualSpinnerColor = theme?.dualSpinnerColor || '#026FF4'; const textColor = theme?.textColor || '#026FF4'; - const buttonAndFeedbackBarColor = theme?.buttonAndFeedbackBarColor || '#026FF4'; - const buttonAndFeedbackBarTextColor = theme?.buttonAndFeedbackBarTextColor || '#FFFFFF'; + const buttonAndFeedbackBarColor = + theme?.buttonAndFeedbackBarColor || '#026FF4'; + const buttonAndFeedbackBarTextColor = + theme?.buttonAndFeedbackBarTextColor || '#FFFFFF'; const buttonColorHighlight = theme?.buttonColorHighlight || '#0264DC'; const buttonColorDisabled = theme?.buttonColorDisabled || '#B3D4FC'; // For Frame Corner Radius Customization const frameCornerRadius = theme?.frameCornerRadius || '20px'; + const commonDirectory = `/core/images/`; // For Cancel Button Customization - const cancelButtonImage = sdkImageDirectory + (theme?.cancelImage || 'FaceTec_cancel.png'); - const cancelButtonLocation = FaceTecSDK.FaceTecCancelButtonLocation.TopLeft; - + const cancelButtonImage = `${commonDirectory}${theme?.cancelImage || 'FaceTec_cancel.png'}`; // For Image Customization - const yourAppLogoImage = sdkImageDirectory + (theme?.brandingImage || 'FaceTec_your_app_logo.png'); - const securityWatermarkImage = FaceTecSDK.FaceTecSecurityWatermarkImage.FaceTec; + const yourAppLogoImage = `${commonDirectory}${theme?.brandingImage || 'FaceTec_your_app_logo.png'}`; + const securityWatermarkImage = + FaceTecSDK.FaceTecSecurityWatermarkImage.FaceTec; // Set a Default Customization const defaultCustomization = new FaceTecSDK.FaceTecCustomization(); // Set Frame Customization - defaultCustomization.frameCustomization.borderCornerRadius = frameCornerRadius; + defaultCustomization.frameCustomization.borderCornerRadius = + frameCornerRadius; defaultCustomization.frameCustomization.backgroundColor = frameColor; defaultCustomization.frameCustomization.borderColor = borderColor; // Set Overlay Customization defaultCustomization.overlayCustomization.brandingImage = yourAppLogoImage; - defaultCustomization.overlayCustomization.backgroundColor = outerBackgroundColor; + defaultCustomization.overlayCustomization.showBrandingImage = + typeof theme?.showBranding === 'boolean' ? theme.showBranding : true; + defaultCustomization.overlayCustomization.backgroundColor = + outerBackgroundColor; // Set Guidance Customization defaultCustomization.guidanceCustomization.backgroundColors = frameColor; defaultCustomization.guidanceCustomization.foregroundColor = textColor; - defaultCustomization.guidanceCustomization.buttonBackgroundNormalColor = buttonAndFeedbackBarColor; - defaultCustomization.guidanceCustomization.buttonBackgroundDisabledColor = buttonColorDisabled; - defaultCustomization.guidanceCustomization.buttonBackgroundHighlightColor = buttonColorHighlight; - defaultCustomization.guidanceCustomization.buttonTextNormalColor = buttonAndFeedbackBarTextColor; - defaultCustomization.guidanceCustomization.buttonTextDisabledColor = buttonAndFeedbackBarTextColor; - defaultCustomization.guidanceCustomization.buttonTextHighlightColor = buttonAndFeedbackBarTextColor; - defaultCustomization.guidanceCustomization.retryScreenImageBorderColor = borderColor; - defaultCustomization.guidanceCustomization.retryScreenOvalStrokeColor = borderColor; + defaultCustomization.guidanceCustomization.buttonBackgroundNormalColor = + buttonAndFeedbackBarColor; + defaultCustomization.guidanceCustomization.buttonBackgroundDisabledColor = + buttonColorDisabled; + defaultCustomization.guidanceCustomization.buttonBackgroundHighlightColor = + buttonColorHighlight; + defaultCustomization.guidanceCustomization.buttonTextNormalColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.guidanceCustomization.buttonTextDisabledColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.guidanceCustomization.buttonTextHighlightColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.guidanceCustomization.retryScreenImageBorderColor = + borderColor; + defaultCustomization.guidanceCustomization.retryScreenOvalStrokeColor = + borderColor; // Set Oval Customization defaultCustomization.ovalCustomization.strokeColor = ovalColor; @@ -58,44 +72,71 @@ function retrieveConfigurationWizardCustomization(theme?: Style) { defaultCustomization.ovalCustomization.progressColor2 = dualSpinnerColor; // Set Feedback Customization - defaultCustomization.feedbackCustomization.backgroundColor = buttonAndFeedbackBarColor; - defaultCustomization.feedbackCustomization.textColor = buttonAndFeedbackBarTextColor; + defaultCustomization.feedbackCustomization.backgroundColor = + buttonAndFeedbackBarColor; + defaultCustomization.feedbackCustomization.textColor = + buttonAndFeedbackBarTextColor; // Set Cancel Customization - defaultCustomization.cancelButtonCustomization.customImage = cancelButtonImage; - defaultCustomization.cancelButtonCustomization.location = cancelButtonLocation; + defaultCustomization.cancelButtonCustomization.customImage = + cancelButtonImage; + defaultCustomization.cancelButtonCustomization.location = + resolveCancelLocation(theme?.cancelLocation); // Set Security Watermark Customization - defaultCustomization.securityWatermarkCustomization.setSecurityWatermarkImage(securityWatermarkImage); + defaultCustomization.securityWatermarkCustomization.setSecurityWatermarkImage( + securityWatermarkImage, + ); // Set Result Screen Customization defaultCustomization.resultScreenCustomization.backgroundColors = frameColor; defaultCustomization.resultScreenCustomization.foregroundColor = textColor; - defaultCustomization.resultScreenCustomization.activityIndicatorColor = buttonAndFeedbackBarColor; - defaultCustomization.resultScreenCustomization.resultAnimationBackgroundColor = buttonAndFeedbackBarColor; - defaultCustomization.resultScreenCustomization.resultAnimationForegroundColor = buttonAndFeedbackBarTextColor; - defaultCustomization.resultScreenCustomization.uploadProgressFillColor = buttonAndFeedbackBarColor; + defaultCustomization.resultScreenCustomization.activityIndicatorColor = + buttonAndFeedbackBarColor; + defaultCustomization.resultScreenCustomization.resultAnimationBackgroundColor = + buttonAndFeedbackBarColor; + defaultCustomization.resultScreenCustomization.resultAnimationForegroundColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.resultScreenCustomization.uploadProgressFillColor = + buttonAndFeedbackBarColor; // Set ID Scan Customization - defaultCustomization.idScanCustomization.selectionScreenBackgroundColors = frameColor; - defaultCustomization.idScanCustomization.selectionScreenForegroundColor = textColor; - defaultCustomization.idScanCustomization.reviewScreenBackgroundColors = frameColor; - defaultCustomization.idScanCustomization.reviewScreenForegroundColor = buttonAndFeedbackBarTextColor; - defaultCustomization.idScanCustomization.reviewScreenTextBackgroundColor = buttonAndFeedbackBarColor; - defaultCustomization.idScanCustomization.captureScreenForegroundColor = buttonAndFeedbackBarTextColor; - defaultCustomization.idScanCustomization.captureScreenTextBackgroundColor = buttonAndFeedbackBarColor; - defaultCustomization.idScanCustomization.buttonBackgroundNormalColor = buttonAndFeedbackBarColor; - defaultCustomization.idScanCustomization.buttonBackgroundDisabledColor = buttonColorDisabled; - defaultCustomization.idScanCustomization.buttonBackgroundHighlightColor = buttonColorHighlight; - defaultCustomization.idScanCustomization.buttonTextNormalColor = buttonAndFeedbackBarTextColor; - defaultCustomization.idScanCustomization.buttonTextDisabledColor = buttonAndFeedbackBarTextColor; - defaultCustomization.idScanCustomization.buttonTextHighlightColor = buttonAndFeedbackBarTextColor; - defaultCustomization.idScanCustomization.captureScreenBackgroundColor = frameColor; - defaultCustomization.idScanCustomization.captureFrameStrokeColor = borderColor; + defaultCustomization.idScanCustomization.selectionScreenBackgroundColors = + frameColor; + defaultCustomization.idScanCustomization.selectionScreenForegroundColor = + textColor; + defaultCustomization.idScanCustomization.reviewScreenBackgroundColors = + frameColor; + defaultCustomization.idScanCustomization.reviewScreenForegroundColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.idScanCustomization.reviewScreenTextBackgroundColor = + buttonAndFeedbackBarColor; + defaultCustomization.idScanCustomization.captureScreenForegroundColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.idScanCustomization.captureScreenTextBackgroundColor = + buttonAndFeedbackBarColor; + defaultCustomization.idScanCustomization.buttonBackgroundNormalColor = + buttonAndFeedbackBarColor; + defaultCustomization.idScanCustomization.buttonBackgroundDisabledColor = + buttonColorDisabled; + defaultCustomization.idScanCustomization.buttonBackgroundHighlightColor = + buttonColorHighlight; + defaultCustomization.idScanCustomization.buttonTextNormalColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.idScanCustomization.buttonTextDisabledColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.idScanCustomization.buttonTextHighlightColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.idScanCustomization.captureScreenBackgroundColor = + frameColor; + defaultCustomization.idScanCustomization.captureFrameStrokeColor = + borderColor; // Set Initial Loading Customization - defaultCustomization.initialLoadingAnimationCustomization.backgroundColor = buttonAndFeedbackBarTextColor; - defaultCustomization.initialLoadingAnimationCustomization.foregroundColor = buttonAndFeedbackBarColor; + defaultCustomization.initialLoadingAnimationCustomization.backgroundColor = + buttonAndFeedbackBarTextColor; + defaultCustomization.initialLoadingAnimationCustomization.foregroundColor = + buttonAndFeedbackBarColor; return defaultCustomization; } diff --git a/packages/aziface/src/types/aziface.ts b/packages/aziface/src/types/aziface.ts index ebf18b6..51fb9f4 100644 --- a/packages/aziface/src/types/aziface.ts +++ b/packages/aziface/src/types/aziface.ts @@ -1,4 +1,7 @@ -import { FaceTecInitializationError, FaceTecSessionStatus } from '../types/FaceTecPublicApi'; +import { + FaceTecInitializationError, + FaceTecSessionStatus, +} from '../types/FaceTecPublicApi'; /** * @enum MethodError @@ -38,6 +41,16 @@ export type SessionCode = FaceTecSessionStatus | MethodError; */ export type InitializeCodeError = FaceTecInitializationError; +/** + * @type CancelLocation + * + * @description A type that represents the possible locations for the cancel button + * in the Aziface UI. This type includes options for the `top-left` and `top-right` + * corners of the UI, as well as an option to not display the cancel button at + * all. + */ +export type CancelLocation = 'top-left' | 'top-right' | 'none'; + /** * @interface InitializeParams * @@ -255,6 +268,14 @@ export interface Style { */ cancelImage?: string; + /** + * @description The location of the cancel button in the Aziface UI. Uses the + * default location provided by the SDK if not specified. + * + * @default 'top-left' + */ + cancelLocation?: CancelLocation; + /** * @description The location of the cancel button in the Aziface UI. Uses the * default branding image provided by the SDK if not specified. @@ -262,6 +283,15 @@ export interface Style { * @default undefined */ brandingImage?: string; + + /** + * @description A boolean value indicating whether to show the branding image in + * the Aziface UI. Uses the default branding image provided by the SDK if not + * specified. + * + * @default true + */ + showBranding?: boolean; } /** @@ -299,16 +329,30 @@ export interface DisposeCallback { * Aziface SDK. This type includes a list of language codes that can be used to * set the locale of the SDK. */ -export type Locale = 'af' | 'ar' | 'de' | 'el' | 'en' | 'es' | 'fr' | 'ja' | 'kk' | 'no' | 'pt-BR' | 'ru' | 'vi' | 'zh'; +export type Locale = + | 'af' + | 'ar' + | 'de' + | 'el' + | 'en' + | 'es' + | 'fr' + | 'ja' + | 'kk' + | 'no' + | 'pt-BR' + | 'ru' + | 'vi' + | 'zh'; export interface Controller { initialize: (init: Initialize, callback: InitializeCallback) => void; dispose: (callback: DisposeCallback) => void; - enroll: () => void; - authenticate: () => void; - liveness: () => void; - photoScan: () => void; - photoMatch: () => void; + enroll: () => Promise; + authenticate: () => Promise; + liveness: () => Promise; + photoScan: () => Promise; + photoMatch: () => Promise; withTheme: (overrides?: Style) => void; setLocale: (locale: Locale) => void; } From e92202f51e0e3419dd10cb1b79c9c41faa8a4ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sans=C3=A3o=20Araldi?= Date: Mon, 29 Jun 2026 10:34:01 -0300 Subject: [PATCH 4/5] docs: update documentation --- README.md | 204 ++++++++++++++++++++++++--------- packages/aziface/README.md | 227 +++++++++++++++++++++++++------------ 2 files changed, 308 insertions(+), 123 deletions(-) diff --git a/README.md b/README.md index 1c36b5a..5f8ecd9 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ Web SDK adapter for React. ## Summary - [Installation](#installation) +- [Setup](#setup) + - [Next.js](#nextjs) + - [Vite](#vite) - [Usage](#usage) - [API](#api) - [`initialize`](#initialize) @@ -23,6 +26,7 @@ Web SDK adapter for React. - [`resetTheme`](#resettheme) - [`setLocale`](#setlocale) - [`Properties`](#properties-3) +- [Styles](#styles) - [Types](#types) - [`Initialize`](#initialize-1) - [`InitializeParams`](#initializeparams) @@ -34,6 +38,7 @@ Web SDK adapter for React. - [`DisposeCallback`](#disposecallback) - [`SessionCode`](#sessioncode) - [`Style`](#style) + - [`CancelLocation`](#cancellocation) - [`Locale`](#locale) - [Classes](#classes) - [`SessionError`](#sessionerror) @@ -51,6 +56,59 @@ npm i @azify/aziface-web
+## Setup + +Add the configuration below according to the environment you are using: + +### Next.js + +In your `app/page.tsx`, add the following script: + +```tsx +'use client'; + +import Script from 'next/script'; +// ... + +export default function Page() { + // ... + + return ( + <> + + + + +``` + +Your Vite environment is now configured! + +
+ ## Usage ```tsx @@ -63,12 +121,14 @@ import { liveness, photoMatch, photoScan, + setLocale, withTheme, + SessionError, type Initialize, - type InitializeCallback, type InitializeHeaders, type InitializeParams, } from '@azify/aziface-web'; +import '@azify/aziface-web/dist/aziface.css'; export function MyPage() { // ... @@ -92,6 +152,8 @@ export function MyPage() { setIsInitialized(initialized.isSuccess); if (error) { console.error(`${error.cause} - (${error.code})`); + } else { + setLocale('en'); } }); }; @@ -106,23 +168,23 @@ export function MyPage() { }); }; - const onFaceScan = (type: string): void => { + const onFaceScan = async (type: string): Promise => { try { switch (type) { case 'enroll': - enroll(); + await enroll(); break; case 'authenticate': - authenticate(); + await authenticate(); break; case 'liveness': - liveness(); + await liveness(); break; case 'photoMatch': - photoMatch(); + await photoMatch(); break; case 'photoScan': - photoScan(); + await photoScan(); break; default: console.error(`Invalid face scan type: ${type}`); @@ -204,26 +266,26 @@ export function MyPage() { ## API -| Methods | Return type | -| -------------- | ----------- | -| `initialize` | `void` | -| `dispose` | `void` | -| `enroll` | `void` | -| `authenticate` | `void` | -| `liveness` | `void` | -| `photoScan` | `void` | -| `photoMatch` | `void` | -| `withTheme` | `void` | -| `resetTheme` | `void` | -| `setLocale` | `void` | +| Methods | Return type | +| -------------- | ------------------ | +| `initialize` | `void` | +| `dispose` | `void` | +| `enroll` | `Promise` | +| `authenticate` | `Promise` | +| `liveness` | `Promise` | +| `photoScan` | `Promise` | +| `photoMatch` | `Promise` | +| `withTheme` | `void` | +| `resetTheme` | `void` | +| `setLocale` | `void` | ### `initialize` -The `initialize` of the Aziface SDK is the process of configuring and preparing the SDK for use before any face capture, liveness, authentication, or identity verification sessions can begin. +The `initialize` method configures and prepares the Aziface SDK before any face capture, liveness, authentication, or identity verification session can begin. During initialization, the application provides the SDK with the required configuration data, such as the device key identifier, base URL, and `x-token-bearer`. The SDK validates these parameters, performs internal setup, and prepares the necessary resources for secure camera access, biometric processing, and user interface rendering. -A successful initialization confirms that the SDK is correctly licensed, properly configured for the target environment, and ready to start user sessions. If initialization fails due to invalid keys, network issues, or unsupported device conditions, the SDK returns boolean information (true or false) so the application can handle the failure gracefully and prevent session startup. +A successful initialization confirms that the SDK is correctly licensed, properly configured for the target environment, and ready to start user sessions. If initialization fails due to invalid keys, network issues, or unsupported device conditions, the SDK returns an `InitializeResponse` object with `isSuccess` and error details so the application can handle the failure gracefully and prevent session startup. Initialization is a mandatory step and must be completed once during the application lifecycle (or as required by the platform) before invoking any Aziface SDK workflows. @@ -272,7 +334,7 @@ If dispose is performed while a session is still in progress, the SDK may return ```ts dispose(disposed => { if (disposed) { - console.log('SDK disposed with successful!!!'); + console.log('SDK disposed successfully!'); } else { console.error('Failed to dispose SDK.'); } @@ -295,7 +357,7 @@ The result of a successful enrollment is a trusted biometric template associated ### `authenticate` -The authentication method in the Aziface SDK is used to verify a user’s identity by comparing a newly captured face scan against a previously enrolled biometric template. This process confirms that the person attempting to access the system is the same individual who completed the enrollment. +The `authenticate` method verifies a user's identity by comparing a newly captured face scan against a previously enrolled biometric template. This process confirms that the person attempting to access the system is the same individual who completed enrollment. During authentication, the SDK performs an active liveness check while guiding the user through simple on-screen instructions. A fresh face scan is captured, encrypted, and securely transmitted to the backend, where it is matched against the stored enrollment data. @@ -327,7 +389,7 @@ A successful document-only verification is suitable for lower-risk scenarios or ### `withTheme` -This method customize your SDK theme during session. The Aziface SDK must be successfully initialized **before calling** this API. +This method customizes your SDK theme during a session. The Aziface SDK must be successfully initialized **before calling** this API. ```ts initialize( @@ -358,7 +420,7 @@ initialize( The `brandingImage` and `cancelImage` properties represents your branding and icon of the button cancel. Default are [Azify](https://azify.com/) images, and `.png` format. If the image is not found, it will not be displayed during the session. -You must go to your project's `public/core/images` directory. Inside the `public/core/images` folder, you must put your images. +Go to your project's `public/core/images` directory and add your custom images there. ##### Example @@ -382,9 +444,11 @@ initialize( ); ``` +**Note**: Images via HTTPS link **aren't** supported by SDK. + ### `resetTheme` -The `resetTheme` is a fallback method to return default theme. +The `resetTheme` method restores the default theme. ### `setLocale` @@ -405,7 +469,7 @@ initialize( if (initialized.error && !initialized.isSuccess) { // ... } else { - setLocale('pt-br'); + setLocale('pt-BR'); } }, ); @@ -419,6 +483,28 @@ initialize(
+## Styles + +Aziface Web recommends importing our predefined styles for the best user experience. + +Simply import them onto the screen where you are using Aziface methods. + +```tsx +// ... +import { + authenticate, + dispose, + enroll, + initialize, + liveness, + photoMatch, + photoScan, +} from '@azify/aziface-web'; +import '@azify/aziface-web/dist/aziface.css'; // <-- Add this import +``` + +
+ ## Types ### `Initialize` @@ -432,7 +518,7 @@ The `Initialize` object is required to initialize the SDK. #### `InitializeParams` -It initializes, and it starts SDK. +It contains the parameters used to initialize and start the SDK. | Property | Type | Required | | --------------------- | --------- | -------- | @@ -444,14 +530,14 @@ It initializes, and it starts SDK. It establishes communication between the SDK and the external service. -| Property | Type | Required | -| ---------------- | -------- | -------- | -| `x-token-bearer` | `string` | ✅ | -| `[key: string]` | `string` | ❌ | +| Property | Type | Required | +| ---------------- | ----------------------------- | -------- | +| `x-token-bearer` | `string` | ✅ | +| `[key: string]` | `string \| null \| undefined` | ❌ | ### `InitializeCallback` -Get initialization response using the `InitializeCallback`. +Use `InitializeCallback` to receive the initialization response. | Callback | Type | Required | | ------------- | ------------------------------------------- | -------- | @@ -496,19 +582,19 @@ The session code is a type identifier of the session when a method fails or it h | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | `SessionCompleted` | The Session was completed. | `0` | | `RequestAborted` | When session has catastrophic error and the application could not be validated. | `1` | -| `UserCancelledFaceScan` | The user cancelled before performing enough scans to cucceed. | `2` | +| `UserCancelledFaceScan` | The user cancelled before performing enough scans to succeed. | `2` | | `UserCancelledIDScan` | The user cancelled before completing all of the steps in the ID Scan Process. | `3` | | `LockedOut` | The session was cancelled because the user was in a locked out state. | `4` | | `CameraError` | The session was cancelled because Aziface SDK was unable to start the camera on this device, or an unexpected error occurred with the camera during runtime. | `5` | | `CameraPermissionsDenied` | The session was cancelled because camera permissions were not enabled. | `6` | | `UnknownInternalError` | An unknown and unexpected error occurred. | `7` | -| `IFrameNotAllowedWithoutPermission` | The session was cancelled, the Aziface SDK was opened in an Iframe without permission. | `8` | +| `IFrameNotAllowedWithoutPermission` | The session was cancelled because the Aziface SDK was opened in an iframe without permission. | `8` | | `NotInitialized` | This error code indicates that the Aziface SDK has not been initialized. | `9` | | `NoUserEnrolled` | No user enrolled. Please enroll a user before attempting to authenticate. | `10` | ### `DisposeCallback` -Get dispose response using the `DisposeCallback`. +Use `DisposeCallback` to receive the dispose response. | Callback | Type | Required | | ---------- | --------- | -------- | @@ -518,21 +604,33 @@ Get dispose response using the `DisposeCallback`. Customize your Aziface SDK using `Style` object. -| Property | Type | Required | Default | -| ------------------------------- | -------- | -------- | ----------- | -| `backgroundColor` | `string` | ❌ | `#FFFFFF` | -| `frameColor` | `string` | ❌ | `#FFFFFF` | -| `borderColor` | `string` | ❌ | `#026FF4` | -| `ovalColor` | `string` | ❌ | `#026FF4` | -| `dualSpinnerColor` | `string` | ❌ | `#026FF4` | -| `textColor` | `string` | ❌ | `#026FF4` | -| `buttonAndFeedbackBarColor` | `string` | ❌ | `#026FF4` | -| `buttonAndFeedbackBarTextColor` | `string` | ❌ | `#FFFFFF` | -| `buttonColorHighlight` | `string` | ❌ | `#0264DC` | -| `buttonColorDisabled` | `string` | ❌ | `#B3D4FC` | -| `frameCornerRadius` | `string` | ❌ | `20px` | -| `cancelImage` | `string` | ❌ | `undefined` | -| `brandingImage` | `string` | ❌ | `undefined` | +| Property | Type | Required | Default | +| ------------------------------- | ----------------------------------- | -------- | ----------- | +| `backgroundColor` | `string` | ❌ | `#FFFFFF` | +| `frameColor` | `string` | ❌ | `#FFFFFF` | +| `borderColor` | `string` | ❌ | `#026FF4` | +| `ovalColor` | `string` | ❌ | `#026FF4` | +| `dualSpinnerColor` | `string` | ❌ | `#026FF4` | +| `textColor` | `string` | ❌ | `#026FF4` | +| `buttonAndFeedbackBarColor` | `string` | ❌ | `#026FF4` | +| `buttonAndFeedbackBarTextColor` | `string` | ❌ | `#FFFFFF` | +| `buttonColorHighlight` | `string` | ❌ | `#0264DC` | +| `buttonColorDisabled` | `string` | ❌ | `#B3D4FC` | +| `frameCornerRadius` | `string` | ❌ | `20px` | +| `cancelImage` | `string` | ❌ | `undefined` | +| `cancelLocation` | [`CancelLocation`](#cancellocation) | ❌ | `top-left` | +| `brandingImage` | `string` | ❌ | `undefined` | +| `showBranding` | `boolean` | ❌ | `true` | + +#### `CancelLocation` + +The `CancelLocation` type defines where the cancel button will be shown. + +| type | Description | +| ----------- | ------------------------------------ | +| `top-left` | Displays cancel button in top-left. | +| `top-right` | Displays cancel button in top-right. | +| `none` | Hides the cancel button. | ### Locale @@ -561,14 +659,14 @@ The `Locale` type uses the [ISO 639](https://en.wikipedia.org/wiki/List_of_ISO_6 ### `SessionError` -A `SessionError` class is returned when an error is thrown by the Aziface SDK. +A `SessionError` is thrown when an error occurs in the Aziface SDK. | Property | Type | Required | | --------- | ----------------------------- | -------- | | `code` | [`SessionCode`](#sessioncode) | ✅ | | `name` | `string` | ✅ | | `message` | `string` | ✅ | -| `cause` | `string` | ✅ | +| `cause` | `string` | ❌ | | `stack` | `string` | ❌ | #### `constructor` diff --git a/packages/aziface/README.md b/packages/aziface/README.md index 2c669c2..5f8ecd9 100644 --- a/packages/aziface/README.md +++ b/packages/aziface/README.md @@ -1,10 +1,13 @@ # @azify/aziface-web 🖥️ -Web SDK adapter. +Web SDK adapter for React. ## Summary - [Installation](#installation) +- [Setup](#setup) + - [Next.js](#nextjs) + - [Vite](#vite) - [Usage](#usage) - [API](#api) - [`initialize`](#initialize) @@ -23,6 +26,7 @@ Web SDK adapter. - [`resetTheme`](#resettheme) - [`setLocale`](#setlocale) - [`Properties`](#properties-3) +- [Styles](#styles) - [Types](#types) - [`Initialize`](#initialize-1) - [`InitializeParams`](#initializeparams) @@ -34,6 +38,7 @@ Web SDK adapter. - [`DisposeCallback`](#disposecallback) - [`SessionCode`](#sessioncode) - [`Style`](#style) + - [`CancelLocation`](#cancellocation) - [`Locale`](#locale) - [Classes](#classes) - [`SessionError`](#sessionerror) @@ -41,25 +46,67 @@ Web SDK adapter.
-## Adding the SDK assets to your project +## Installation + +Add the SDK to your project: + +```bash +npm i @azify/aziface-web +``` + +
+ +## Setup + +Add the configuration below according to the environment you are using: -1. Go to your project’s `public` directory and copy the `core` folder from the SDK package example into it. This folder includes all the essential assets required for the SDK to function correctly, such as images and other resources. +### Next.js -2. Include the following script in your layout page when using a Next.js app, or in the main entry point of your application if you are using a different framework: +In your `app/page.tsx`, add the following script: ```tsx - +'use client'; + +import Script from 'next/script'; +// ... + +export default function Page() { + // ... + + return ( + <> + + + + ``` +Your Vite environment is now configured! +
## Usage @@ -74,12 +121,14 @@ import { liveness, photoMatch, photoScan, + setLocale, withTheme, + SessionError, type Initialize, - type InitializeCallback, type InitializeHeaders, type InitializeParams, } from '@azify/aziface-web'; +import '@azify/aziface-web/dist/aziface.css'; export function MyPage() { // ... @@ -97,18 +146,20 @@ export function MyPage() { 'x-only-raw-analysis': '1', }; - initialize({ params, headers }, (initialized) => { + initialize({ params, headers }, initialized => { const error = initialized.error; setIsInitialized(initialized.isSuccess); if (error) { console.error(`${error.cause} - (${error.code})`); + } else { + setLocale('en'); } }); }; const onDispose = (): void => { - dispose((disposed) => { + dispose(disposed => { setIsInitialized(!disposed); if (!disposed) { @@ -117,23 +168,23 @@ export function MyPage() { }); }; - const onFaceScan = (type: string): void => { + const onFaceScan = async (type: string): Promise => { try { switch (type) { case 'enroll': - enroll(); + await enroll(); break; case 'authenticate': - authenticate(); + await authenticate(); break; case 'liveness': - liveness(); + await liveness(); break; case 'photoMatch': - photoMatch(); + await photoMatch(); break; case 'photoScan': - photoScan(); + await photoScan(); break; default: console.error(`Invalid face scan type: ${type}`); @@ -215,26 +266,26 @@ export function MyPage() { ## API -| Methods | Return type | -| -------------- | ----------- | -| `initialize` | `void` | -| `dispose` | `void` | -| `enroll` | `void` | -| `authenticate` | `void` | -| `liveness` | `void` | -| `photoScan` | `void` | -| `photoMatch` | `void` | -| `withTheme` | `void` | -| `resetTheme` | `void` | -| `setLocale` | `void` | +| Methods | Return type | +| -------------- | ------------------ | +| `initialize` | `void` | +| `dispose` | `void` | +| `enroll` | `Promise` | +| `authenticate` | `Promise` | +| `liveness` | `Promise` | +| `photoScan` | `Promise` | +| `photoMatch` | `Promise` | +| `withTheme` | `void` | +| `resetTheme` | `void` | +| `setLocale` | `void` | ### `initialize` -The `initialize` of the Aziface SDK is the process of configuring and preparing the SDK for use before any face capture, liveness, authentication, or identity verification sessions can begin. +The `initialize` method configures and prepares the Aziface SDK before any face capture, liveness, authentication, or identity verification session can begin. During initialization, the application provides the SDK with the required configuration data, such as the device key identifier, base URL, and `x-token-bearer`. The SDK validates these parameters, performs internal setup, and prepares the necessary resources for secure camera access, biometric processing, and user interface rendering. -A successful initialization confirms that the SDK is correctly licensed, properly configured for the target environment, and ready to start user sessions. If initialization fails due to invalid keys, network issues, or unsupported device conditions, the SDK returns boolean information (true or false) so the application can handle the failure gracefully and prevent session startup. +A successful initialization confirms that the SDK is correctly licensed, properly configured for the target environment, and ready to start user sessions. If initialization fails due to invalid keys, network issues, or unsupported device conditions, the SDK returns an `InitializeResponse` object with `isSuccess` and error details so the application can handle the failure gracefully and prevent session startup. Initialization is a mandatory step and must be completed once during the application lifecycle (or as required by the platform) before invoking any Aziface SDK workflows. @@ -251,7 +302,7 @@ initialize( 'x-only-raw-analysis': '1', }, }, - (initialized) => { + initialized => { const error = initialized.error; if (error) { @@ -281,9 +332,9 @@ Dispose is typically used when the application is terminating, when the SDK will If dispose is performed while a session is still in progress, the SDK may return an error or forcefully terminate the session, depending on the platform implementation. ```ts -dispose((disposed) => { +dispose(disposed => { if (disposed) { - console.log('SDK disposed with successful!!!'); + console.log('SDK disposed successfully!'); } else { console.error('Failed to dispose SDK.'); } @@ -306,7 +357,7 @@ The result of a successful enrollment is a trusted biometric template associated ### `authenticate` -The authentication method in the Aziface SDK is used to verify a user’s identity by comparing a newly captured face scan against a previously enrolled biometric template. This process confirms that the person attempting to access the system is the same individual who completed the enrollment. +The `authenticate` method verifies a user's identity by comparing a newly captured face scan against a previously enrolled biometric template. This process confirms that the person attempting to access the system is the same individual who completed enrollment. During authentication, the SDK performs an active liveness check while guiding the user through simple on-screen instructions. A fresh face scan is captured, encrypted, and securely transmitted to the backend, where it is matched against the stored enrollment data. @@ -338,14 +389,14 @@ A successful document-only verification is suitable for lower-risk scenarios or ### `withTheme` -This method customize your SDK theme during session. The Aziface SDK must be successfully initialized **before calling** this API. +This method customizes your SDK theme during a session. The Aziface SDK must be successfully initialized **before calling** this API. ```ts initialize( { // ... }, - (initialized) => { + initialized => { const error = initialized.error; if (error && !initialized.isSuccess) { @@ -369,7 +420,7 @@ initialize( The `brandingImage` and `cancelImage` properties represents your branding and icon of the button cancel. Default are [Azify](https://azify.com/) images, and `.png` format. If the image is not found, it will not be displayed during the session. -You must go to your project's `public/core/images` directory. Inside the `public/core/images` folder, you must put your images. +Go to your project's `public/core/images` directory and add your custom images there. ##### Example @@ -380,7 +431,7 @@ initialize( { // ... }, - (initialized) => { + initialized => { if (initialized.error && !initialized.isSuccess) { // ... } else { @@ -393,9 +444,11 @@ initialize( ); ``` +**Note**: Images via HTTPS link **aren't** supported by SDK. + ### `resetTheme` -The `resetTheme` is a fallback method to return default theme. +The `resetTheme` method restores the default theme. ### `setLocale` @@ -412,11 +465,11 @@ initialize( { // ... }, - (initialized) => { + initialized => { if (initialized.error && !initialized.isSuccess) { // ... } else { - setLocale('pt-br'); + setLocale('pt-BR'); } }, ); @@ -430,6 +483,28 @@ initialize(
+## Styles + +Aziface Web recommends importing our predefined styles for the best user experience. + +Simply import them onto the screen where you are using Aziface methods. + +```tsx +// ... +import { + authenticate, + dispose, + enroll, + initialize, + liveness, + photoMatch, + photoScan, +} from '@azify/aziface-web'; +import '@azify/aziface-web/dist/aziface.css'; // <-- Add this import +``` + +
+ ## Types ### `Initialize` @@ -443,7 +518,7 @@ The `Initialize` object is required to initialize the SDK. #### `InitializeParams` -It initializes, and it starts SDK. +It contains the parameters used to initialize and start the SDK. | Property | Type | Required | | --------------------- | --------- | -------- | @@ -455,14 +530,14 @@ It initializes, and it starts SDK. It establishes communication between the SDK and the external service. -| Property | Type | Required | -| ---------------- | -------- | -------- | -| `x-token-bearer` | `string` | ✅ | -| `[key: string]` | `string` | ❌ | +| Property | Type | Required | +| ---------------- | ----------------------------- | -------- | +| `x-token-bearer` | `string` | ✅ | +| `[key: string]` | `string \| null \| undefined` | ❌ | ### `InitializeCallback` -Get initialization response using the `InitializeCallback`. +Use `InitializeCallback` to receive the initialization response. | Callback | Type | Required | | ------------- | ------------------------------------------- | -------- | @@ -507,19 +582,19 @@ The session code is a type identifier of the session when a method fails or it h | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | `SessionCompleted` | The Session was completed. | `0` | | `RequestAborted` | When session has catastrophic error and the application could not be validated. | `1` | -| `UserCancelledFaceScan` | The user cancelled before performing enough scans to cucceed. | `2` | +| `UserCancelledFaceScan` | The user cancelled before performing enough scans to succeed. | `2` | | `UserCancelledIDScan` | The user cancelled before completing all of the steps in the ID Scan Process. | `3` | | `LockedOut` | The session was cancelled because the user was in a locked out state. | `4` | | `CameraError` | The session was cancelled because Aziface SDK was unable to start the camera on this device, or an unexpected error occurred with the camera during runtime. | `5` | | `CameraPermissionsDenied` | The session was cancelled because camera permissions were not enabled. | `6` | | `UnknownInternalError` | An unknown and unexpected error occurred. | `7` | -| `IFrameNotAllowedWithoutPermission` | The session was cancelled, the Aziface SDK was opened in an Iframe without permission. | `8` | +| `IFrameNotAllowedWithoutPermission` | The session was cancelled because the Aziface SDK was opened in an iframe without permission. | `8` | | `NotInitialized` | This error code indicates that the Aziface SDK has not been initialized. | `9` | | `NoUserEnrolled` | No user enrolled. Please enroll a user before attempting to authenticate. | `10` | ### `DisposeCallback` -Get dispose response using the `DisposeCallback`. +Use `DisposeCallback` to receive the dispose response. | Callback | Type | Required | | ---------- | --------- | -------- | @@ -529,21 +604,33 @@ Get dispose response using the `DisposeCallback`. Customize your Aziface SDK using `Style` object. -| Property | Type | Required | Default | -| ------------------------------- | -------- | -------- | ----------- | -| `backgroundColor` | `string` | ❌ | `#FFFFFF` | -| `frameColor` | `string` | ❌ | `#FFFFFF` | -| `borderColor` | `string` | ❌ | `#026FF4` | -| `ovalColor` | `string` | ❌ | `#026FF4` | -| `dualSpinnerColor` | `string` | ❌ | `#026FF4` | -| `textColor` | `string` | ❌ | `#026FF4` | -| `buttonAndFeedbackBarColor` | `string` | ❌ | `#026FF4` | -| `buttonAndFeedbackBarTextColor` | `string` | ❌ | `#FFFFFF` | -| `buttonColorHighlight` | `string` | ❌ | `#0264DC` | -| `buttonColorDisabled` | `string` | ❌ | `#B3D4FC` | -| `frameCornerRadius` | `string` | ❌ | `20px` | -| `cancelImage` | `string` | ❌ | `undefined` | -| `brandingImage` | `string` | ❌ | `undefined` | +| Property | Type | Required | Default | +| ------------------------------- | ----------------------------------- | -------- | ----------- | +| `backgroundColor` | `string` | ❌ | `#FFFFFF` | +| `frameColor` | `string` | ❌ | `#FFFFFF` | +| `borderColor` | `string` | ❌ | `#026FF4` | +| `ovalColor` | `string` | ❌ | `#026FF4` | +| `dualSpinnerColor` | `string` | ❌ | `#026FF4` | +| `textColor` | `string` | ❌ | `#026FF4` | +| `buttonAndFeedbackBarColor` | `string` | ❌ | `#026FF4` | +| `buttonAndFeedbackBarTextColor` | `string` | ❌ | `#FFFFFF` | +| `buttonColorHighlight` | `string` | ❌ | `#0264DC` | +| `buttonColorDisabled` | `string` | ❌ | `#B3D4FC` | +| `frameCornerRadius` | `string` | ❌ | `20px` | +| `cancelImage` | `string` | ❌ | `undefined` | +| `cancelLocation` | [`CancelLocation`](#cancellocation) | ❌ | `top-left` | +| `brandingImage` | `string` | ❌ | `undefined` | +| `showBranding` | `boolean` | ❌ | `true` | + +#### `CancelLocation` + +The `CancelLocation` type defines where the cancel button will be shown. + +| type | Description | +| ----------- | ------------------------------------ | +| `top-left` | Displays cancel button in top-left. | +| `top-right` | Displays cancel button in top-right. | +| `none` | Hides the cancel button. | ### Locale @@ -572,14 +659,14 @@ The `Locale` type uses the [ISO 639](https://en.wikipedia.org/wiki/List_of_ISO_6 ### `SessionError` -A `SessionError` class is returned when an error is thrown by the Aziface SDK. +A `SessionError` is thrown when an error occurs in the Aziface SDK. | Property | Type | Required | | --------- | ----------------------------- | -------- | | `code` | [`SessionCode`](#sessioncode) | ✅ | | `name` | `string` | ✅ | | `message` | `string` | ✅ | -| `cause` | `string` | ✅ | +| `cause` | `string` | ❌ | | `stack` | `string` | ❌ | #### `constructor` From 2e81f017e05420f49ee5c07cb449d8bab78133a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sans=C3=A3o=20Araldi?= Date: Mon, 29 Jun 2026 10:34:24 -0300 Subject: [PATCH 5/5] docs(example): update example apps --- apps/nextapp/app/home.tsx | 22 +++++++------- apps/nextapp/package.json | 3 +- apps/viteapp/src/App.tsx | 2 ++ apps/viteapp/src/hooks/useuser.hook.ts | 2 +- apps/viteapp/src/index.css | 2 +- apps/viteapp/src/main.tsx | 9 +++--- apps/viteapp/src/screens/home.tsx | 33 +++++++++++---------- apps/viteapp/src/screens/login.tsx | 7 +++-- apps/viteapp/src/services/api.ts | 10 +++---- apps/viteapp/src/services/client.service.ts | 11 +++++-- 10 files changed, 56 insertions(+), 45 deletions(-) diff --git a/apps/nextapp/app/home.tsx b/apps/nextapp/app/home.tsx index bb17bb5..9291cbd 100644 --- a/apps/nextapp/app/home.tsx +++ b/apps/nextapp/app/home.tsx @@ -41,7 +41,7 @@ export function Home() { 'x-only-raw-analysis': '1', }; - initialize({ params, headers }, (initialized) => { + initialize({ params, headers }, initialized => { const error = initialized.error; setIsInitialized(initialized.isSuccess); @@ -54,7 +54,7 @@ export function Home() { }; const onDispose = (): void => { - dispose((disposed) => { + dispose(disposed => { setIsInitialized(!disposed); if (!disposed) { @@ -63,31 +63,31 @@ export function Home() { }); }; - const onLocale = async (): Promise => { - const locales = LOCALES.filter((loc) => loc !== i18n); + const onLocale = (): void => { + const locales = LOCALES.filter(loc => loc !== i18n); const newLocale = locales[Math.floor(Math.random() * locales.length)]; setI18n(newLocale); - await setLocale(newLocale); + setLocale(newLocale); }; - const onFaceScan = (type: FaceType): void => { + const onFaceScan = async (type: FaceType): Promise => { try { switch (type) { case 'enroll': - enroll(); + await enroll(); break; case 'authenticate': - authenticate(); + await authenticate(); break; case 'liveness': - liveness(); + await liveness(); break; case 'photoMatch': - photoMatch(); + await photoMatch(); break; case 'photoScan': - photoScan(); + await photoScan(); break; default: toast.error(`Invalid face scan type: ${type}`); diff --git a/apps/nextapp/package.json b/apps/nextapp/package.json index 0dd533b..b8b8142 100644 --- a/apps/nextapp/package.json +++ b/apps/nextapp/package.json @@ -26,7 +26,6 @@ "eslint": "^9", "eslint-config-next": "16.1.7", "tailwindcss": "^4", - "typescript": "5", - "@azify/aziface-web": "1.0.6" + "typescript": "5" } } diff --git a/apps/viteapp/src/App.tsx b/apps/viteapp/src/App.tsx index 597ee1d..c79436c 100644 --- a/apps/viteapp/src/App.tsx +++ b/apps/viteapp/src/App.tsx @@ -4,6 +4,7 @@ import { useUser } from './hooks'; import { Unless, When } from 'react-if'; import { Home } from './screens/home'; import { Login } from './screens/login'; + function App() { const { tokenBiometric, token } = useUser(); const isAuth = !!token && !!tokenBiometric; @@ -18,4 +19,5 @@ function App() { ); } + export default App; diff --git a/apps/viteapp/src/hooks/useuser.hook.ts b/apps/viteapp/src/hooks/useuser.hook.ts index b9fe022..0349c01 100644 --- a/apps/viteapp/src/hooks/useuser.hook.ts +++ b/apps/viteapp/src/hooks/useuser.hook.ts @@ -11,7 +11,7 @@ interface UseUserProps { export const useUserStore = create()( persist( - (set) => ({ + set => ({ token: '', tokenBiometric: '', setToken: (token: string) => { diff --git a/apps/viteapp/src/index.css b/apps/viteapp/src/index.css index a461c50..d4b5078 100644 --- a/apps/viteapp/src/index.css +++ b/apps/viteapp/src/index.css @@ -1 +1 @@ -@import "tailwindcss"; \ No newline at end of file +@import 'tailwindcss'; diff --git a/apps/viteapp/src/main.tsx b/apps/viteapp/src/main.tsx index bef5202..e17d50b 100644 --- a/apps/viteapp/src/main.tsx +++ b/apps/viteapp/src/main.tsx @@ -1,10 +1,9 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; createRoot(document.getElementById('root')!).render( , -) +); diff --git a/apps/viteapp/src/screens/home.tsx b/apps/viteapp/src/screens/home.tsx index f0e58ff..33c6b9b 100644 --- a/apps/viteapp/src/screens/home.tsx +++ b/apps/viteapp/src/screens/home.tsx @@ -1,4 +1,5 @@ import { useState } from 'react'; +import toast, { Toaster } from 'react-hot-toast'; import { useBiometricConfigs } from '../services'; import { useUser } from '../hooks'; import { @@ -38,12 +39,12 @@ export function Home() { 'x-only-raw-analysis': '1', }; - initialize({ params, headers }, (initialized) => { + initialize({ params, headers }, initialized => { const error = initialized.error; setIsInitialized(initialized.isSuccess); if (error) { - alert(`(${error.code}) - ${error.cause}`); + toast.error(`(${error.code}) - ${error.cause}`); } else { setLocale(i18n); } @@ -51,53 +52,55 @@ export function Home() { }; const onDispose = (): void => { - dispose((disposed) => { + dispose(disposed => { setIsInitialized(!disposed); if (!disposed) { - alert('Failed to dispose SDK.'); + toast.error('Failed to dispose SDK.'); } }); }; - const onLocale = async (): Promise => { - const locales = LOCALES.filter((loc) => loc !== i18n); + const onLocale = (): void => { + const locales = LOCALES.filter(loc => loc !== i18n); const newLocale = locales[Math.floor(Math.random() * locales.length)]; setI18n(newLocale); - await setLocale(newLocale); + setLocale(newLocale); }; - const onFaceScan = (type: FaceType): void => { + const onFaceScan = async (type: FaceType): Promise => { try { switch (type) { case 'enroll': - enroll(); + await enroll(); break; case 'authenticate': - authenticate(); + await authenticate(); break; case 'liveness': - liveness(); + await liveness(); break; case 'photoMatch': - photoMatch(); + await photoMatch(); break; case 'photoScan': - photoScan(); + await photoScan(); break; default: - alert(`Invalid face scan type: ${type}`); + toast.error(`Invalid face scan type: ${type}`); break; } } catch (error) { const sessionError = error as SessionError; - alert(sessionError.message); + toast.error(sessionError.message); } }; return (
+ +

Home

Selecione uma ação

diff --git a/apps/viteapp/src/screens/login.tsx b/apps/viteapp/src/screens/login.tsx index 96e6183..cd4d1ba 100644 --- a/apps/viteapp/src/screens/login.tsx +++ b/apps/viteapp/src/screens/login.tsx @@ -5,7 +5,8 @@ export function Login() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const { mutateAsync: login, isPending: isPendingLogin } = useLogin(); - const { mutateAsync: createSession, isPending: isPendingSession } = useBiometricSession(); + const { mutateAsync: createSession, isPending: isPendingSession } = + useBiometricSession(); const handleLogin = async () => { try { @@ -29,7 +30,7 @@ export function Login() { setUsername(e.target.value)} + onChange={e => setUsername(e.target.value)} placeholder='seu.usuario' className='w-full border border-gray-200 rounded-lg px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:ring-2 focus:ring-gray-300' /> @@ -40,7 +41,7 @@ export function Login() { setPassword(e.target.value)} + onChange={e => setPassword(e.target.value)} placeholder='••••••••' className='w-full border border-gray-200 rounded-lg px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:ring-2 focus:ring-gray-300' /> diff --git a/apps/viteapp/src/services/api.ts b/apps/viteapp/src/services/api.ts index a00d7f1..52a60e9 100644 --- a/apps/viteapp/src/services/api.ts +++ b/apps/viteapp/src/services/api.ts @@ -13,12 +13,12 @@ export const clientApi = axios.create({ }); clientApi.interceptors.request.use( - async (config) => { + async config => { const token = useUserStore.getState()?.token || ''; if (token) { config.headers.Authorization = `Bearer ${token}`; } - config.validateStatus = (status) => { + config.validateStatus = status => { if (status === 401) { alert('Session expired. Please log in again.'); useUserStore.getState().logout(); @@ -28,12 +28,12 @@ clientApi.interceptors.request.use( }; return config; }, - (error) => Promise.reject(error), + error => Promise.reject(error), ); clientApi.interceptors.response.use( - (res) => res, - (error) => Promise.reject(error), + res => res, + error => Promise.reject(error), ); export const queryClient = new QueryClient({ defaultOptions: { diff --git a/apps/viteapp/src/services/client.service.ts b/apps/viteapp/src/services/client.service.ts index 4124908..4a1e5b1 100644 --- a/apps/viteapp/src/services/client.service.ts +++ b/apps/viteapp/src/services/client.service.ts @@ -1,4 +1,9 @@ -import type { ConfigsResponseData, CreateUserRequest, LoginRequest, LoginResponse } from '../types/services.types'; +import type { + ConfigsResponseData, + CreateUserRequest, + LoginRequest, + LoginResponse, +} from '../types/services.types'; import { clientApi } from './api'; import { useMutation, useQuery } from '@tanstack/react-query'; import { useUserStore } from '../hooks'; @@ -48,7 +53,9 @@ export function useBiometricConfigs() { return useQuery({ queryKey: ['configs'], queryFn: async () => { - const response = await clientApi.get('/biometrics/configs'); + const response = await clientApi.get( + '/biometrics/configs', + ); return response.data; },