diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 551701c17c27..6a099b3a1838 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -11694,7 +11694,7 @@ packages: dev: false file:projects/agrifood-farming.tgz: - resolution: {integrity: sha512-Cs4B7tvjJLwjqDPEmgdASnNycBv7EJIuRlaHy2Id8SHWc+0Ho6hR/dC0o3lg3zWDEGHH6p3QW36hjewnaEUOfA==, tarball: file:projects/agrifood-farming.tgz} + resolution: {integrity: sha512-s8R4IIpQodHE0SQODEsc19cpaCtryR+cpzTKBPPxjgvHNyZl8IG1yykOLe0D/+3fICaApfqQtKVGnc5xqSQEpA==, tarball: file:projects/agrifood-farming.tgz} name: '@rush-temp/agrifood-farming' version: 0.0.0 dependencies: @@ -11742,7 +11742,7 @@ packages: dev: false file:projects/ai-anomaly-detector.tgz: - resolution: {integrity: sha512-mQK3vNGXOc176SnCJRtU/sF6drJtW64xmTWIiuWD8jjrYrgpn4dZnNQy2MT0ZPCGSyHk5DO3+lOVkbunjt0Mog==, tarball: file:projects/ai-anomaly-detector.tgz} + resolution: {integrity: sha512-rxbhqSj8anfiAZRHiD5NYjMGV078Rf2VHXiWNQopWwGFDBa87HWr10NnxRSdRwHXcidz42KSZNOL6amh1PsgvA==, tarball: file:projects/ai-anomaly-detector.tgz} name: '@rush-temp/ai-anomaly-detector' version: 0.0.0 dependencies: @@ -11790,7 +11790,7 @@ packages: dev: false file:projects/ai-content-safety.tgz: - resolution: {integrity: sha512-XeLIGmGEvhQIAis3L87dxk2mNUwuOURUo7sQabcVlOGYBeqE8ph1B667SdIGMuA5n4MrD3Ns1+hxrNuPcgB5ig==, tarball: file:projects/ai-content-safety.tgz} + resolution: {integrity: sha512-Ry/3BylPQzZpgRe6PqA3KoFRI9w/YpLx6nK+2OmEfC5ISVAFn7Wsg6j5Kl90TSxIjkuh5RrGignEW1M46U+30A==, tarball: file:projects/ai-content-safety.tgz} name: '@rush-temp/ai-content-safety' version: 0.0.0 dependencies: @@ -11836,7 +11836,7 @@ packages: dev: false file:projects/ai-document-intelligence.tgz: - resolution: {integrity: sha512-zURjI8KO009BcdIDTFJo5RtJ5DbL6mfI7ZODOyLGsBvEvJLc+V84Eu6HszTN6lVFifOv+9ImSFYsSXxQOhV2/A==, tarball: file:projects/ai-document-intelligence.tgz} + resolution: {integrity: sha512-0dgpmrnYXlN1pf3tXB8DQHClGKYwfopJYHkIijlrtJ24G6tICOM09BoaN7OfuyPts5S+FFr7MAgW6wN6QTxpbw==, tarball: file:projects/ai-document-intelligence.tgz} name: '@rush-temp/ai-document-intelligence' version: 0.0.0 dependencies: @@ -11877,7 +11877,7 @@ packages: dev: false file:projects/ai-document-translator.tgz: - resolution: {integrity: sha512-mmv2XkpfDGbfGRLrkuDt4yFpZmbXR0sqVo2Ek4+xk6jSqsByIY25WXVvJOm7NgEbITknjPFezgFxDc+auL9YzA==, tarball: file:projects/ai-document-translator.tgz} + resolution: {integrity: sha512-dUsdQD5j5TrusUCkmqLYDcUtPkNenDi6/49vHAcw/m5kjTooX8BwoN56JdNTLrcKhtcaW21D9Ksd/c7SW2UEqw==, tarball: file:projects/ai-document-translator.tgz} name: '@rush-temp/ai-document-translator' version: 0.0.0 dependencies: @@ -11923,7 +11923,7 @@ packages: dev: false file:projects/ai-form-recognizer.tgz: - resolution: {integrity: sha512-gBxXQ5ipm2y4CUU+lcOdGdVHayX0zjEKzWKcLH6D9O+Fzk6DSYBjJpo/S6iJTxE7+BhE/3P5uocseP8hfXpAFg==, tarball: file:projects/ai-form-recognizer.tgz} + resolution: {integrity: sha512-NDMSHJhJU/UVO2n24YYQ2eN+pzKvKwj4VngOXtN3qdPt0nsVLpksO0Z6671OPBlMOJDd7WlAJTg9J2jt0vgPGQ==, tarball: file:projects/ai-form-recognizer.tgz} name: '@rush-temp/ai-form-recognizer' version: 0.0.0 dependencies: @@ -11972,7 +11972,7 @@ packages: dev: false file:projects/ai-inference.tgz: - resolution: {integrity: sha512-Q6X9wbW7QeTbk4gw8qkRpVcIdIzZRS1jnI7Cx5WyrQMSFYlbQjNB7xrPeSoGlyGBOAkMmK9KMdV5ECIy0ebKfA==, tarball: file:projects/ai-inference.tgz} + resolution: {integrity: sha512-l2kOheCd94FGir+YPD591JYY1SIP8Pja8LWXm6wqQZy9Z6Dz1kuzYE0JJNk767gUBoO+PsaeTWLR3s227gcc1Q==, tarball: file:projects/ai-inference.tgz} name: '@rush-temp/ai-inference' version: 0.0.0 dependencies: @@ -12018,7 +12018,7 @@ packages: dev: false file:projects/ai-language-conversations.tgz: - resolution: {integrity: sha512-yerYCmyZV1azLLV8LUsaU5F92efOd2sjBaSQmAgBr+abMDdYOUDic+EFfF5xfW+5N+2Cs6wyAOH3tTMOZ0wXrw==, tarball: file:projects/ai-language-conversations.tgz} + resolution: {integrity: sha512-KUNB3tWomxHXjR2Jf7H4Ty7yANj/AXvLXrn8fAj7ryFL2ScU6grcP3iMviQ9YiAfpppJLOpAwGiV2+jc6Pya+w==, tarball: file:projects/ai-language-conversations.tgz} name: '@rush-temp/ai-language-conversations' version: 0.0.0 dependencies: @@ -12068,7 +12068,7 @@ packages: dev: false file:projects/ai-language-text.tgz: - resolution: {integrity: sha512-+28V/u3iH+goVWI66BNbymqVcY+E3RFpiYIDeTU2Yz9PU6RShfvTLT4vZrF0Pp88kJA3Tn6pgX8oHPz/O2o7Ag==, tarball: file:projects/ai-language-text.tgz} + resolution: {integrity: sha512-80v0lWm6zR/8GodSpyDKWf65gfd9zRbMOwC3aBpGjUb5bbCPtUuH9EY2uNW1wkcoZlUssPOs876xIG5LNz0gZg==, tarball: file:projects/ai-language-text.tgz} name: '@rush-temp/ai-language-text' version: 0.0.0 dependencies: @@ -12146,7 +12146,7 @@ packages: dev: false file:projects/ai-metrics-advisor.tgz: - resolution: {integrity: sha512-coyFFPdd9Q2nK0DwJnPVWx2f1l1TLfNMYbnY2XgbWjqpZh/teNUb4ZqcRubYqbQD8RMyxoGXR9e4tEIqbZTTBg==, tarball: file:projects/ai-metrics-advisor.tgz} + resolution: {integrity: sha512-Axx7UVtJKy+zQckp/x3+8EYOrnp0cwPGpaurLmyg1tR2S0ZR3cw9cCpibJKJWxxwniM3qajxz4YGfZ3bU6OxfA==, tarball: file:projects/ai-metrics-advisor.tgz} name: '@rush-temp/ai-metrics-advisor' version: 0.0.0 dependencies: @@ -12192,7 +12192,7 @@ packages: dev: false file:projects/ai-text-analytics.tgz: - resolution: {integrity: sha512-UK+H5rVUmq4AkLOJ5z8umJ3DpnmEfqia5KDwO2gcg7VsqNizYkBcDfyfSFQ4tDB0SH7OHqfgoGlaiLsOQPslWw==, tarball: file:projects/ai-text-analytics.tgz} + resolution: {integrity: sha512-KOA9Pj7xbL9uTgnkFOeedjjrZwNNIdFQpIBbHI04JXqnsvtWqz7Wz1KLolcs5sI8QY0JVQY+gSj2utCAxQ/AYA==, tarball: file:projects/ai-text-analytics.tgz} name: '@rush-temp/ai-text-analytics' version: 0.0.0 dependencies: @@ -12240,7 +12240,7 @@ packages: dev: false file:projects/ai-translation-document.tgz: - resolution: {integrity: sha512-GwYwLipQMJO2h0BspCG1Xa9ODSq/e4t5S5eIT/Pxly3RxLu6t4I5Zg1ImBhNHosEaoPCczu18B+5pcrRH97eeg==, tarball: file:projects/ai-translation-document.tgz} + resolution: {integrity: sha512-otROmo6ijA5vj1m5tYr9VWMP8frXGMyRD4cpYvFrBbqLkCjGhJVuxJNbMl6YvXzRhWr9xcNNjyYbhcd60pqBXQ==, tarball: file:projects/ai-translation-document.tgz} name: '@rush-temp/ai-translation-document' version: 0.0.0 dependencies: @@ -12286,7 +12286,7 @@ packages: dev: false file:projects/ai-translation-text.tgz: - resolution: {integrity: sha512-NcebnaA5NxdYBZ6E9GlBXZijylX98riPk2bucP/lIWXsiVWyQmgGa9W5WqR00vDzQM4x1cuvemB8DowGagW5pw==, tarball: file:projects/ai-translation-text.tgz} + resolution: {integrity: sha512-xN4WcqLOVhondD7CKnX6w++SvBgdztnzBRyd/zvPIhx6uK0/pYPIAvd0lZdbO7iJ0c9EiE2e1TIGZc98L/oPTw==, tarball: file:projects/ai-translation-text.tgz} name: '@rush-temp/ai-translation-text' version: 0.0.0 dependencies: @@ -12332,7 +12332,7 @@ packages: dev: false file:projects/ai-vision-face.tgz: - resolution: {integrity: sha512-5g5LumaEBcJkRv08bvusoXDQBbmBTxxibd4rKSkLm0QLA+Xal4mgMTmvsy3HddXhPuHAr1a52PURIdB8J2s2+g==, tarball: file:projects/ai-vision-face.tgz} + resolution: {integrity: sha512-Ii1A+dRjWxvHoW5YN5Zn0WTtwaqR+gxqlXSt+kpnvGdBBK5L8Dx6xrct1o2zNDEhTia/W+6B+F++WglCb+roYw==, tarball: file:projects/ai-vision-face.tgz} name: '@rush-temp/ai-vision-face' version: 0.0.0 dependencies: @@ -12341,22 +12341,23 @@ packages: '@azure/identity': 4.4.1 '@microsoft/api-extractor': 7.47.9(@types/node@18.19.54) '@types/node': 18.19.54 - '@vitest/browser': 2.1.2(playwright@1.47.2)(typescript@5.6.2)(vitest@2.1.2) + '@vitest/browser': 2.1.2(playwright@1.47.2)(typescript@5.5.4)(vitest@2.1.2) '@vitest/coverage-istanbul': 2.1.2(vitest@2.1.2) dotenv: 16.4.5 - eslint: 9.12.0 + eslint: 8.57.1 mkdirp: 3.0.1 playwright: 1.47.2 + prettier: 3.3.3 rimraf: 5.0.10 + tshy: 1.18.0 tslib: 2.7.0 - typescript: 5.6.2 + typescript: 5.5.4 vitest: 2.1.2(@types/node@18.19.54)(@vitest/browser@2.1.2) transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/ui' - bufferutil - happy-dom - - jiti - jsdom - less - lightningcss @@ -12374,7 +12375,7 @@ packages: dev: false file:projects/ai-vision-image-analysis.tgz: - resolution: {integrity: sha512-sZG3tcmXR7BHFJqNNO7mClVQKiweAJDbcbR4nFlRVMH/hHmRUjpXpNSNnZwARUqgYXVIWTqquLwVOw9lmb+5vQ==, tarball: file:projects/ai-vision-image-analysis.tgz} + resolution: {integrity: sha512-9StZ8+Sco5p2xzQYLFHqWLTN8AS8Pai6Gk4/6OEf7rGgS/DmNKSy6Hui8ll1uo4465Dor3AptuLohzBxYmaGcg==, tarball: file:projects/ai-vision-image-analysis.tgz} name: '@rush-temp/ai-vision-image-analysis' version: 0.0.0 dependencies: @@ -12464,7 +12465,7 @@ packages: dev: false file:projects/api-management-custom-widgets-tools.tgz: - resolution: {integrity: sha512-VS3iSY4cfLrl9YHM8diplgSKEw7w4BgMOwcRjkx+5KJ5s9qlnb3JaXV0sC+0kPJxKsLRXue9+xcWa0LmQcjDWg==, tarball: file:projects/api-management-custom-widgets-tools.tgz} + resolution: {integrity: sha512-8FZ5rNXHxo+LemYkBz8v/cUjtWQcH1alcfWuG2G5F335XUrtkLS4HRAzImETGk7HqTVAefd/PZh7+7SW5c2HEA==, tarball: file:projects/api-management-custom-widgets-tools.tgz} name: '@rush-temp/api-management-custom-widgets-tools' version: 0.0.0 dependencies: @@ -12504,7 +12505,7 @@ packages: dev: false file:projects/app-configuration.tgz: - resolution: {integrity: sha512-hlC8uwvsEG8oh23t5w8ddpDXB41wEk/60kkldKYXlLRqOui9Ys6goM0mn9oj/qZ+HdTYYLNwFF3TYkRKM384qg==, tarball: file:projects/app-configuration.tgz} + resolution: {integrity: sha512-gP8LmTDcRMVlrqAqNcSkU7VUCah65ZvbQc9vU9IMWko1If+tI5mj902b2uvjSPrF7IXAQo383gEGyDzj1ErdmQ==, tarball: file:projects/app-configuration.tgz} name: '@rush-temp/app-configuration' version: 0.0.0 dependencies: @@ -12545,7 +12546,7 @@ packages: dev: false file:projects/arm-advisor.tgz: - resolution: {integrity: sha512-j50IS1ldc8YFbLuR0O/sJUZRdGkK4K21T2T/p7QAMH6hXNBV81n8Z/6TkVVGKiujCP5ByN74dXoNRLDZPJk3hA==, tarball: file:projects/arm-advisor.tgz} + resolution: {integrity: sha512-vjYn8Yd5EXXOgKLNpGyAvkC5LGFv6xsgcpiT0QZe30ZW0klgr5gc62jAD3Yw6Ge+ILveFS79926EY/u12zuwJQ==, tarball: file:projects/arm-advisor.tgz} name: '@rush-temp/arm-advisor' version: 0.0.0 dependencies: @@ -12573,7 +12574,7 @@ packages: dev: false file:projects/arm-agrifood.tgz: - resolution: {integrity: sha512-vZM3DyGbtnOoJa4slS3DI62pHQpgWSibVKRi5lO9b8yDalDhrUdcyY7VY8Q06DKSizKfIhcJofYi0Jo2JX1YIQ==, tarball: file:projects/arm-agrifood.tgz} + resolution: {integrity: sha512-ZqbxbBoGp7BhpUgIPPmOGYgycRH/4B8JU+7piW099E5SyXRCQs0vlN+oklvfS2JFTtCOyKPlyeXuQQPW9BljCg==, tarball: file:projects/arm-agrifood.tgz} name: '@rush-temp/arm-agrifood' version: 0.0.0 dependencies: @@ -12602,7 +12603,7 @@ packages: dev: false file:projects/arm-analysisservices.tgz: - resolution: {integrity: sha512-GLHyFimX/x0Edc68NbyNXwwLS3C2u3CLKGsfAxOcQ2/Ehl8hn2zAc+yfzlhEVNV18zs855I2RNmLdantKfqhig==, tarball: file:projects/arm-analysisservices.tgz} + resolution: {integrity: sha512-SOaKSNZzq+FluIDEmAexhZFCivV9Oipkch/KWG9Vji0m8f17OnWvFKGmbLsaYOIFo03lzWhQ+v5NTKA85cMTXg==, tarball: file:projects/arm-analysisservices.tgz} name: '@rush-temp/arm-analysisservices' version: 0.0.0 dependencies: @@ -12631,7 +12632,7 @@ packages: dev: false file:projects/arm-apicenter.tgz: - resolution: {integrity: sha512-DDKemUzvGmhil+yTK3XdEHQPJzHoNocEvaBvhyqim5IKqYITSxGrw15RM6tK3RxYsxsyhm+8PYC5E4cfxRFByA==, tarball: file:projects/arm-apicenter.tgz} + resolution: {integrity: sha512-fpSAQZ3kg/ZEtCN27sQWfgrxWGGciE5IEwX27Am+41u8nfT1UwxgORGwyZtu5dxKfPQi61qoSsThm6xLuDxOiQ==, tarball: file:projects/arm-apicenter.tgz} name: '@rush-temp/arm-apicenter' version: 0.0.0 dependencies: @@ -12661,7 +12662,7 @@ packages: dev: false file:projects/arm-apimanagement.tgz: - resolution: {integrity: sha512-w71B8wlzqMjsqAaYwa5S7TX/WfqXgsslxBHeelihjZXTQfmH2JTLp/Jb+URULR9XV9l2gE7p5mCBphmFNa3dFg==, tarball: file:projects/arm-apimanagement.tgz} + resolution: {integrity: sha512-yG0sipzczlsjHcwJadYKD70WCRXxyEtgxsjyFWAdDe/91bI+QPTJ3z8XaVdlPAR0ETAj15iR/q8qJmxjX6tbtQ==, tarball: file:projects/arm-apimanagement.tgz} name: '@rush-temp/arm-apimanagement' version: 0.0.0 dependencies: @@ -12691,7 +12692,7 @@ packages: dev: false file:projects/arm-appcomplianceautomation.tgz: - resolution: {integrity: sha512-zPGuCARoqMk9lxx22kePwtVwfAIxb3xV27l9v+b2qbmd/GZto8c56LYLW0Jlc5YZxFc8OfFS40fnUXswt+aNMQ==, tarball: file:projects/arm-appcomplianceautomation.tgz} + resolution: {integrity: sha512-+AZX6KCPhu99ZBjEgIuUKWQlLsKIGq0hTy66QWQlktwB/DoY4kflboGpZGb3ykSP3ymxUMbrsOAQ0VYVigUh/w==, tarball: file:projects/arm-appcomplianceautomation.tgz} name: '@rush-temp/arm-appcomplianceautomation' version: 0.0.0 dependencies: @@ -12722,7 +12723,7 @@ packages: dev: false file:projects/arm-appconfiguration.tgz: - resolution: {integrity: sha512-vH4vUAApC+YkD3Dfb6ic88lhLKSXnSSK3pkV+JI8G7ldkfrCqG+nM949fpSeSXxZ33nKs5ekC+3lmGWHQksRIQ==, tarball: file:projects/arm-appconfiguration.tgz} + resolution: {integrity: sha512-7uLch2VfD1okr1ySITj5+REC8VAcGtlG3AsEnnA5lt82fE/GLc769RfY7Q3Xl5jL56Qkf9z4yLtMzYGRPMV+FQ==, tarball: file:projects/arm-appconfiguration.tgz} name: '@rush-temp/arm-appconfiguration' version: 0.0.0 dependencies: @@ -12752,7 +12753,7 @@ packages: dev: false file:projects/arm-appcontainers.tgz: - resolution: {integrity: sha512-sKAAGIUJAXoM/D34CwHp63CIbvhI8dWFWEUyu/MqYaIaOMCEzAq+LC6wa+Y8jyPdygnFBuf1fY7by88ewbQQIg==, tarball: file:projects/arm-appcontainers.tgz} + resolution: {integrity: sha512-kjruBKXtbcRnhv5rZ5yMv5drqqlVMaNPSoprSVqXiQnlDSScQ7/Ioj9rsfDTgOzBnT26JM8ZjZY6tVwqLrXZeQ==, tarball: file:projects/arm-appcontainers.tgz} name: '@rush-temp/arm-appcontainers' version: 0.0.0 dependencies: @@ -12783,7 +12784,7 @@ packages: dev: false file:projects/arm-appinsights.tgz: - resolution: {integrity: sha512-aN/H2SkdJltZmBVCyJf1B6aVq42p62AisM2n1kscNgIorbSBIqcMkTz+0VRDAMdi7wMD2OYoo8Rxxxuna5d0Lg==, tarball: file:projects/arm-appinsights.tgz} + resolution: {integrity: sha512-35hDLtbgI79tld5msoAgv6fZHp7F/DSYx32JgPk9uLiar7mKbYAxDkEhta2M05kRkE/ywLHwvIJC5QoxDgiFsw==, tarball: file:projects/arm-appinsights.tgz} name: '@rush-temp/arm-appinsights' version: 0.0.0 dependencies: @@ -12810,7 +12811,7 @@ packages: dev: false file:projects/arm-appplatform.tgz: - resolution: {integrity: sha512-sTdgGMCB4fHfqmiMFEKv3ifUbZVk6uGdQysv9K/5VLJQrOOC8MNfwq5oYOmzXWXkSgF1/LmJjRRfFu3IGDhDiQ==, tarball: file:projects/arm-appplatform.tgz} + resolution: {integrity: sha512-OAyeCbyggoOoPLuqNCbHV53ychb3XIguTDAkevIeNeUZyKAh9CORbxBxTvcRHNUo1g3F8C9EqEhdJxPWLpz+JQ==, tarball: file:projects/arm-appplatform.tgz} name: '@rush-temp/arm-appplatform' version: 0.0.0 dependencies: @@ -12840,7 +12841,7 @@ packages: dev: false file:projects/arm-appservice-1.tgz: - resolution: {integrity: sha512-mTPkB0S2WMTWFivB6kmxsh3KpkaGZTEn99uOXf1Di7nY/CwIHJpBG8ki32zxFKMrvdHtJjJWkLqhxgqkTEvvew==, tarball: file:projects/arm-appservice-1.tgz} + resolution: {integrity: sha512-licZltUN6Xq2gNbpCAeNv7zYprGL4ADnKmFF3gtvdJ2Vyxnu1WXnBWj6farnldPU7CecateAfhP4/PkjXtnxnA==, tarball: file:projects/arm-appservice-1.tgz} name: '@rush-temp/arm-appservice-1' version: 0.0.0 dependencies: @@ -12871,7 +12872,7 @@ packages: dev: false file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-le+WclDqZDepxAaWxN3fIUHL7HNa8zb72MdJUr7LIzg/HkKSxaYqbj8Vq8SE7eCBNH214YR1p5XfDUNm1MRZqw==, tarball: file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-m//Z0td9BmBpDwnSu2FO2vYHSnrv6Ypikdgu68WS2w1FXNVB15NWkvcPabbEj4kYD6iBZqMoAWQ3WztncBVvtg==, tarball: file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-appservice-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -12901,7 +12902,7 @@ packages: dev: false file:projects/arm-appservice.tgz: - resolution: {integrity: sha512-0AxWpg2PGyfwn7Fcj+qffF3GRHNqT/ckL81rwjtYI7JnftJ0BbzMcsH3idEsu5RXaC2JAl6d2ImAkng2ZJ/3rw==, tarball: file:projects/arm-appservice.tgz} + resolution: {integrity: sha512-ZMjGPf1AZXDjrrnS49/qrwx/Cqp6Us4uDGXLcvDj2KhQyhl7Kb+VIS/rCaNNEAoEPSetHpzaEYdebi+qEqgIxg==, tarball: file:projects/arm-appservice.tgz} name: '@rush-temp/arm-appservice' version: 0.0.0 dependencies: @@ -12948,7 +12949,7 @@ packages: dev: false file:projects/arm-astro.tgz: - resolution: {integrity: sha512-t3gp2HykYuK2fxua+0V6w5QCE68AXPdV1U7SjjFodWsucS8L7Prn55qQoJsr+mMUFkXn49m/7O4NRunhjnDDUw==, tarball: file:projects/arm-astro.tgz} + resolution: {integrity: sha512-+6/O3LoFp3RAkxXps9x0i5chiltmFFhBs1Vq14ecWfZ7Wa7jaRztOA/I+qFeL2zYo+Vf7hTnqLseNvGyHwLkrw==, tarball: file:projects/arm-astro.tgz} name: '@rush-temp/arm-astro' version: 0.0.0 dependencies: @@ -12978,7 +12979,7 @@ packages: dev: false file:projects/arm-attestation.tgz: - resolution: {integrity: sha512-JP3oXHVm11vuB1HxqvDfpIBVuDPLOUrRWBLWbo8HGURI9ss+v83VdQO5qVScyPY+JZ/6MwcFSFIA8BTSVlLV+g==, tarball: file:projects/arm-attestation.tgz} + resolution: {integrity: sha512-FjYfuUDCohNPN5R0yKQv8xHtokfk63LJlGr8KM8Hqgpl2NI75OFZTsB07nf35KJ+PuxL+sLPkGj+VKyVtmw19g==, tarball: file:projects/arm-attestation.tgz} name: '@rush-temp/arm-attestation' version: 0.0.0 dependencies: @@ -13005,7 +13006,7 @@ packages: dev: false file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-fKmixst908lrfU7yUoETdsMJhPNXegcGa1VL63Pm2LcWrwMlRn0YJb7kbLZhSXgAqKRWHdTaN/PGid1SR5xZFQ==, tarball: file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-YfwPBb6y/E+EUDMu1T87Bhl4fgZnnVI/lQzDQN1/k9XZnQ21UIZrL/U/oqAs0kXIjrZODMPqaALlpJRWIPVRzA==, tarball: file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-authorization-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13033,7 +13034,7 @@ packages: dev: false file:projects/arm-authorization.tgz: - resolution: {integrity: sha512-fVHt83RsUiOUMiyDVLxiocujqCYf9b1HFDQATmwjQxEYpCwbhgJPkaw8Qm8A55gogDeOvSCby+XTRAG2NOk7CQ==, tarball: file:projects/arm-authorization.tgz} + resolution: {integrity: sha512-2PGaI8pMxHi3g9AFvqqs/rDtAm82jTnM085CRXBFbUUlipdVhWuPUtxa6ZebpSzs8Rn+KNh2MbMpvBeVeMQ+rg==, tarball: file:projects/arm-authorization.tgz} name: '@rush-temp/arm-authorization' version: 0.0.0 dependencies: @@ -13063,7 +13064,7 @@ packages: dev: false file:projects/arm-automanage.tgz: - resolution: {integrity: sha512-R7D6aWLvN+1AsZWt/JoARQffzrNM7n7eH85CFiDYC4OCV+lcLOMgYJXoQim5NvD5zAJB6KXTai7V4Ug12mN7YA==, tarball: file:projects/arm-automanage.tgz} + resolution: {integrity: sha512-yqrG/JXu3svIJemSo2z9XwYR7QyqzQiANkGIdAZVzoXpvRBJS0QdUot/rUv/cBBdN8PqoQUvUpZN5xn5GtBnPg==, tarball: file:projects/arm-automanage.tgz} name: '@rush-temp/arm-automanage' version: 0.0.0 dependencies: @@ -13091,7 +13092,7 @@ packages: dev: false file:projects/arm-automation.tgz: - resolution: {integrity: sha512-xm3HJfEFQKLUDmRLWV9jTHmxq5b9diVCJZ8SguZLq/LOnu9xWixFuL38MYUCwV7ikdUlFkh8TLIIXvx2a1+Z+g==, tarball: file:projects/arm-automation.tgz} + resolution: {integrity: sha512-K6jGyBr3usOzC03+mxBtCKmhQJesqtjVQTH02BgXZ/uWwOKAhJ0LBfMRIyH3FThk99UGvPvS6OMU5c9bVdvGHA==, tarball: file:projects/arm-automation.tgz} name: '@rush-temp/arm-automation' version: 0.0.0 dependencies: @@ -13121,7 +13122,7 @@ packages: dev: false file:projects/arm-avs.tgz: - resolution: {integrity: sha512-s3CYnYB4Xs8s56oIRpu6ft6LKwWxJd2rAbRQajiiWPzokn+XxDg7KFnEaFyqTa0gxDgfuB7f9O3Mwq9XR1NOuQ==, tarball: file:projects/arm-avs.tgz} + resolution: {integrity: sha512-Mi8kIxevxIs8NNado2AdlKvQbEA/N8k1i9i+pzghhe02onsJ2Hd9NXjYgq1OuS9QUifPnpq21QUfYHykNr7D/A==, tarball: file:projects/arm-avs.tgz} name: '@rush-temp/arm-avs' version: 0.0.0 dependencies: @@ -13152,7 +13153,7 @@ packages: dev: false file:projects/arm-azureadexternalidentities.tgz: - resolution: {integrity: sha512-/0w9x+HtRJsg/BVNECBZ7YtpEpImweZe11MW9gtV/6taqKa40M4ERcCxcaMfryWTemcZGOPYc/IPQnSLVj5VKQ==, tarball: file:projects/arm-azureadexternalidentities.tgz} + resolution: {integrity: sha512-q67bEgdxXJZLg20i5LHI42jAY5/XZ7/u8vV15t7kP4bEpIELZlBO7c/JmA4YHf69rpsc5ihyhn5FjCTFW8AOGQ==, tarball: file:projects/arm-azureadexternalidentities.tgz} name: '@rush-temp/arm-azureadexternalidentities' version: 0.0.0 dependencies: @@ -13181,7 +13182,7 @@ packages: dev: false file:projects/arm-azurestack.tgz: - resolution: {integrity: sha512-CAeob5fq9zY1Tpg7oba2HuvdEEgv9KgAo4C4bevufGIXX0+hBNj+jAMjD+v1x0kIWoBkCjCxpBTxU0akoTyVfA==, tarball: file:projects/arm-azurestack.tgz} + resolution: {integrity: sha512-T7YTO/MgQh0dw6AzP3IVb4XmRwyQzxHEnlIN1lzpwq1yhaCzoEhcNf15Gq3mFEPytMJIFW0fdPan6bpk36qDVQ==, tarball: file:projects/arm-azurestack.tgz} name: '@rush-temp/arm-azurestack' version: 0.0.0 dependencies: @@ -13208,7 +13209,7 @@ packages: dev: false file:projects/arm-azurestackhci.tgz: - resolution: {integrity: sha512-2c7VX8yC3d721NWjZnaLiVjkrlwvOMWE0tYYw9iEj76qyn17v4HDDVSuuBTVIv1Q5J0Ejb1kaaSsaYQq0iXjJg==, tarball: file:projects/arm-azurestackhci.tgz} + resolution: {integrity: sha512-YrPT+stG81lMdx0nfCDWQHYsSL6aPAg6RKvOzky65HUZo/EwfmIHw+MHMnY1wqDHMz+KPMrEn2tebk4xoD3j3A==, tarball: file:projects/arm-azurestackhci.tgz} name: '@rush-temp/arm-azurestackhci' version: 0.0.0 dependencies: @@ -13239,7 +13240,7 @@ packages: dev: false file:projects/arm-baremetalinfrastructure.tgz: - resolution: {integrity: sha512-J+3x4xxYfZz5mxsoa/CTHqkAZ5J9DhJ0jMqqXulf9SF3SzWS0l6gffe78tFJemrEcA+gR1HpjqpI5wy2Im24wQ==, tarball: file:projects/arm-baremetalinfrastructure.tgz} + resolution: {integrity: sha512-QTPqM3t+JELs+y4azr2niG89Taw+PfVdxyYOhlGDs/XnaA24KZSVewS29oltxRM+NCsnkAbYgkKooVXmE3NXpg==, tarball: file:projects/arm-baremetalinfrastructure.tgz} name: '@rush-temp/arm-baremetalinfrastructure' version: 0.0.0 dependencies: @@ -13269,7 +13270,7 @@ packages: dev: false file:projects/arm-batch.tgz: - resolution: {integrity: sha512-GzGCopQ9KbMjORsZM5l6Q9G6BiGLe7XvXbigD/eGvU7rE6/3U7CY9bORHfB6MyeBJLab9BbRxzNcNlP8w2tL8A==, tarball: file:projects/arm-batch.tgz} + resolution: {integrity: sha512-Ji9xVeQj7M0XujhC9agenCi8FLVSFWl93gNBh1xaduKFmrsoH9f8HYcXRIRLUF/orO+Xoo58iudptx+xef9q3w==, tarball: file:projects/arm-batch.tgz} name: '@rush-temp/arm-batch' version: 0.0.0 dependencies: @@ -13299,7 +13300,7 @@ packages: dev: false file:projects/arm-billing.tgz: - resolution: {integrity: sha512-hBrwE8YTVASJTUfX1hJSV7lq1o1jZ70DD4DVmq2t5zdugjxFftxsytzyQzdCBYfvAHa5Vxm7a+8gWDOJPsWC9w==, tarball: file:projects/arm-billing.tgz} + resolution: {integrity: sha512-BmrjANaKNUHqlGgA3jm8Y/p5JadJ6NKOjic45sSg/ekPhXqmhVvb3bsT6T7FRYtYabLLwaPDNrnhVsUqMhRXkw==, tarball: file:projects/arm-billing.tgz} name: '@rush-temp/arm-billing' version: 0.0.0 dependencies: @@ -13329,7 +13330,7 @@ packages: dev: false file:projects/arm-billingbenefits.tgz: - resolution: {integrity: sha512-itMhmNZHQbc/GNPoW6Y1iFkIu89HCEsyb3pIAgm9vb+pvZLg/bAZ8khtw2ZgCsqmwX7y1YX8sBSdyCLVGdbsbw==, tarball: file:projects/arm-billingbenefits.tgz} + resolution: {integrity: sha512-qqpGwzGVe8UyLBjb+Q2H0w++N2M+LINBLqmA0ackMrHC4Qb8SVjtA2/BGQs9vFLyY/h2rWiHVn+Ge1aRQR4+Fw==, tarball: file:projects/arm-billingbenefits.tgz} name: '@rush-temp/arm-billingbenefits' version: 0.0.0 dependencies: @@ -13358,7 +13359,7 @@ packages: dev: false file:projects/arm-botservice.tgz: - resolution: {integrity: sha512-IGdmnDZRAwhbvBMezbH1dGxEc7QHbmSKpaugEj7T3W0T6FDRF3AbR07fQAo3OnPEhwod8ii/3SoAXny5qSB0iA==, tarball: file:projects/arm-botservice.tgz} + resolution: {integrity: sha512-gMMlAZUSlbA6oW8JWTsgZCRahPkynG0iuyMGnMMsIGCR7chcsYZbay7AhvGIyGuAJxVd0YDJktT65/Pr8+tUzA==, tarball: file:projects/arm-botservice.tgz} name: '@rush-temp/arm-botservice' version: 0.0.0 dependencies: @@ -13388,7 +13389,7 @@ packages: dev: false file:projects/arm-cdn.tgz: - resolution: {integrity: sha512-CU+l5VuL+i0O+4HK2Q7Y2b7lCrRgMt45lOmj0YaCe6MVoCfjpQWczHWhP1oEWctDD94TQTEJzgXe5H4G17ZP0Q==, tarball: file:projects/arm-cdn.tgz} + resolution: {integrity: sha512-SKc7MjCuLrmeSSGPkZAviCMQ8jCRHDf7rIYC5CBcbER57ASteCeDrKYas5kb2L0TLmbNUwXfSaXWthKau6LtzQ==, tarball: file:projects/arm-cdn.tgz} name: '@rush-temp/arm-cdn' version: 0.0.0 dependencies: @@ -13418,7 +13419,7 @@ packages: dev: false file:projects/arm-changeanalysis.tgz: - resolution: {integrity: sha512-fkFX4kPWeb0cHbHCQ1PCsHMsN6H0p7K/8jAhpxNCcAFQMzkGDm4/DUvQ3OgWAriEHtrwIMULSNMvCVdcFH+gRg==, tarball: file:projects/arm-changeanalysis.tgz} + resolution: {integrity: sha512-UpEcej4ZUbTzbrJbE605xfDMr7/vpWc8g+N7AbL76z0YdKPYBW5NbIwJmvOhFyxy9W4I17BPdQcEMf6T+2Z5ow==, tarball: file:projects/arm-changeanalysis.tgz} name: '@rush-temp/arm-changeanalysis' version: 0.0.0 dependencies: @@ -13445,7 +13446,7 @@ packages: dev: false file:projects/arm-changes.tgz: - resolution: {integrity: sha512-YgAy00G/LtoxeeF2ZNMoQ/rn3vaPIcFapaR0xuFWqnUjWcUalsow6Qg438jNJW4bEDjpiIoKfZjQ+N7+Z6C2fw==, tarball: file:projects/arm-changes.tgz} + resolution: {integrity: sha512-33MnuXslqx7VSNY4X5iAEFNLBOhq0ZiZoDkgh9upgLeZaq8I8Ea4AKa5BwJb9/QaakwzfidxItf1/zp72y9dZA==, tarball: file:projects/arm-changes.tgz} name: '@rush-temp/arm-changes' version: 0.0.0 dependencies: @@ -13472,7 +13473,7 @@ packages: dev: false file:projects/arm-chaos.tgz: - resolution: {integrity: sha512-QThF364IZSP+M4ugEC1TtKgsf+eekhrNvtv7FAgV3AcV4BqHRIkyjgvd1M43EIc7K6QcCNZVKC3X868dbs+05A==, tarball: file:projects/arm-chaos.tgz} + resolution: {integrity: sha512-duaMsSr0lGppEg/Ju//lJZAkNyykRa8bkqNf4t+o/2Szsodz0owinK1qBD1bgm+u/Jt3pahz6sdeIJB6NVJ6Yw==, tarball: file:projects/arm-chaos.tgz} name: '@rush-temp/arm-chaos' version: 0.0.0 dependencies: @@ -13503,7 +13504,7 @@ packages: dev: false file:projects/arm-cognitiveservices.tgz: - resolution: {integrity: sha512-GmUfTUwnCvA2pMOatgpWu39YEiNawlAF2XeCQ0RkmYcuLeOaHpFDd+zoDayqDaXR0yLhPHe+CRNKQUdXrKzinA==, tarball: file:projects/arm-cognitiveservices.tgz} + resolution: {integrity: sha512-m0cGihg4gHrMSuW/rUI6Ojiakx3u3E1aSUbeE1Q0zlC7XVu82TzlYFzMUzwZwAlkgJM4TI2abZj45OQXZlkHEw==, tarball: file:projects/arm-cognitiveservices.tgz} name: '@rush-temp/arm-cognitiveservices' version: 0.0.0 dependencies: @@ -13533,7 +13534,7 @@ packages: dev: false file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-rUjLWbTeEv7ZbU9vLGHuEPpOx6KC1gstxAzby4xC9jwldp5BftF1gv79Am5Ve6A8Qr1bHTrBRl+lquXhgUKHRQ==, tarball: file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-vAsyFvItEaUXW6z6TO+O8DvXUCGA4U84samVLzdsxJZlSYwwD4hKu+y0WHbzVixsa3YktlgR3HhkyCl76ow8eQ==, tarball: file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-commerce-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13561,7 +13562,7 @@ packages: dev: false file:projects/arm-commerce.tgz: - resolution: {integrity: sha512-g4qTZHRvIuxEI6GMS4Dh9Z8IoXSQHKPFxLx3Y7UA4x8+BMD/PSYsiyU+HADZ8rlgsOj4WfDocx9xhnuR0NZazg==, tarball: file:projects/arm-commerce.tgz} + resolution: {integrity: sha512-HyS6mswmWqdZ60P2RuHN6fiKLijQXXC6yWL8hKCAySRdkdWbnm++Q0NHzDbwiBd7cNHEgWWKUccKua1rXJuO/g==, tarball: file:projects/arm-commerce.tgz} name: '@rush-temp/arm-commerce' version: 0.0.0 dependencies: @@ -13588,7 +13589,7 @@ packages: dev: false file:projects/arm-commitmentplans.tgz: - resolution: {integrity: sha512-jgfxpWcmTZFofFB8aNJrQoLvL8pP7ohgvs1YRjAxtsKAP9KGgiogvLGE9Y33JwpG3YOZws7fLhcYQQGDWshU0Q==, tarball: file:projects/arm-commitmentplans.tgz} + resolution: {integrity: sha512-lqB1qydqD9NAPOFhwywksGv79G6WAMCRPW3ApWhtjGNCC1EqIMLyngr5w49F5vyeHcg5n3JJuONcdCKCA6Xu2A==, tarball: file:projects/arm-commitmentplans.tgz} name: '@rush-temp/arm-commitmentplans' version: 0.0.0 dependencies: @@ -13615,7 +13616,7 @@ packages: dev: false file:projects/arm-communication.tgz: - resolution: {integrity: sha512-TGWfwDU++ZbuZkxlDVi6eK0FhRg6z9GWl/UsgZwNtx5SLIiHUaYrVQthh0Tx0zbRVtNZQVFP8UlfvTx3Mm1lDg==, tarball: file:projects/arm-communication.tgz} + resolution: {integrity: sha512-bVrKA8gfoikiwXCgsq9it2F/j4eIq1J+60/V8hix9CoJqIebkdIZmJ0b50bQi0bbOJ3/kcThbxxiOoqhI3VMtw==, tarball: file:projects/arm-communication.tgz} name: '@rush-temp/arm-communication' version: 0.0.0 dependencies: @@ -13645,7 +13646,7 @@ packages: dev: false file:projects/arm-compute-1.tgz: - resolution: {integrity: sha512-ltoqytPE1QVwr7Sob5PjXXoDsknShksZFG9vsodvBaEPOHz+3m3/LPQe1AZrhBRnbb6XWOeaDkSZnDkbfTZ86A==, tarball: file:projects/arm-compute-1.tgz} + resolution: {integrity: sha512-ODLRyAFUrC7ZPKjPMg854wvS/rryYoa+X++OJM8UtXpZOnw/PumlLJLt0upMGBFN0oD2lFoRAvm18H0K0i2uuA==, tarball: file:projects/arm-compute-1.tgz} name: '@rush-temp/arm-compute-1' version: 0.0.0 dependencies: @@ -13677,7 +13678,7 @@ packages: dev: false file:projects/arm-compute-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-GffiJ3m6SkVjee8GzJXjpgrKiqt7EDdqq7SmAb4bnUsPUNHygQQ4/M4H+YGE47/7SYI61JRC4GGTa0So3GN2mQ==, tarball: file:projects/arm-compute-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-y/P8nziaPBWoZGAP89EPdpKBhDeajxK+iaMejTmEXZMO9zOa+LY/9/DrV4PK6m9pIwCHLya7OLGMIUGJNspteQ==, tarball: file:projects/arm-compute-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-compute-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13707,7 +13708,7 @@ packages: dev: false file:projects/arm-compute.tgz: - resolution: {integrity: sha512-O1ljGJZzzkrw/HcrAfi+3gxy5QHmSIjNolBRs5bD6PGadspNHkT+m7z/MovJC7+AnF5/qhsKMVoNUs0gQt6lOw==, tarball: file:projects/arm-compute.tgz} + resolution: {integrity: sha512-2NNZ7L3W9+XWLBsybqKkBhZcZMNDG/DAOUmym0KrbZoXxaX/c8AiT/3IwRCxbnm+PcD4omDW5j/FMbTkmNONTA==, tarball: file:projects/arm-compute.tgz} name: '@rush-temp/arm-compute' version: 0.0.0 dependencies: @@ -13755,7 +13756,7 @@ packages: dev: false file:projects/arm-computefleet.tgz: - resolution: {integrity: sha512-du/MWids31r8DpXCF7byu32onO5MtKHiAOSKeSgkNFRiLr4bxapXJwBhntDiobMezB2WJA78zf0833EGTjJcvw==, tarball: file:projects/arm-computefleet.tgz} + resolution: {integrity: sha512-fTi0yddULfZ4PhmfGeyg2/2mnUX9upFkxvWjc1UVAAFUGvbSZj5yQftNNAPU3ostDMOUnR5OKSQlpiBUN+jvIw==, tarball: file:projects/arm-computefleet.tgz} name: '@rush-temp/arm-computefleet' version: 0.0.0 dependencies: @@ -13796,7 +13797,7 @@ packages: dev: false file:projects/arm-computeschedule.tgz: - resolution: {integrity: sha512-8MHwaRx5A143tiaqXUAg9VoxuCW3ntTOOGyZP1MYLJ0RwBCrAhEQP3qwbr1ebwdM1ggnXtOp1QESXpNPiSTAFg==, tarball: file:projects/arm-computeschedule.tgz} + resolution: {integrity: sha512-aJw/ul0kPg4UR8vwkegLRRQcLxCOCuLDbIk4S2fgVZyjYCDwHqnNAaxmuCzlbT5JjAS30x6wxlUqgX5xKKAvnQ==, tarball: file:projects/arm-computeschedule.tgz} name: '@rush-temp/arm-computeschedule' version: 0.0.0 dependencies: @@ -13837,7 +13838,7 @@ packages: dev: false file:projects/arm-confidentialledger.tgz: - resolution: {integrity: sha512-r9C2B39MoV92dpUTX6LewfFjQVl6xt1XbfA8tTUMgeBx7XckJ9PdrQaUX4/a/Wu3fQQVAs8KJxxLpP6/jcd8tA==, tarball: file:projects/arm-confidentialledger.tgz} + resolution: {integrity: sha512-/mAZXNdZ/E+Bma6wfATQk4nowYATtAjzVWrNjmEv88X7TWcosjoF9S3OtsmahlMho45GQeBQesEeLMv8aIsYpg==, tarball: file:projects/arm-confidentialledger.tgz} name: '@rush-temp/arm-confidentialledger' version: 0.0.0 dependencies: @@ -13868,7 +13869,7 @@ packages: dev: false file:projects/arm-confluent.tgz: - resolution: {integrity: sha512-2CyfCPtvCztuWZqQpsyJRvXsUX1QYWymEkenlrqxR9RLtCp3PnDc7i/rthg8eh66RATNpCWIELiJfHeGm8wUfA==, tarball: file:projects/arm-confluent.tgz} + resolution: {integrity: sha512-EAEXIU9FBFdX131c6x3XT4IOx9bojcSGxSSjHZpSf0mMuxxLTK5Lzq0AwqNuPj96D79aG1VnOiQOp32N6IcdNA==, tarball: file:projects/arm-confluent.tgz} name: '@rush-temp/arm-confluent' version: 0.0.0 dependencies: @@ -13898,7 +13899,7 @@ packages: dev: false file:projects/arm-connectedvmware.tgz: - resolution: {integrity: sha512-eposj3oB77pzGOiesx91Pb2s/PMXi/i9/7cxVZ/KUBEnT+trQu5Z7X8gVXDJrSwDsS5iufMIXhKBYYQGEI6QvA==, tarball: file:projects/arm-connectedvmware.tgz} + resolution: {integrity: sha512-ADUFaFS/8OanfT9HmmoVJAanvIyMNdvY83/qR9hgOcaBpE+Pye0RaP0yR7fDXNEMspzBfXCAQD7NuqWptdYE8g==, tarball: file:projects/arm-connectedvmware.tgz} name: '@rush-temp/arm-connectedvmware' version: 0.0.0 dependencies: @@ -13928,7 +13929,7 @@ packages: dev: false file:projects/arm-consumption.tgz: - resolution: {integrity: sha512-h8QYilRLuOtHTC62vMgIS87j8jsSnN7hEztpMR+rt/zTPQE0Aju31BJZsrMjyeb2JVBNrJK0+7qo4ifxy01s0A==, tarball: file:projects/arm-consumption.tgz} + resolution: {integrity: sha512-ljSbZqDvjeA1ZeBxedF5W4MrrmcnG4r1C9my2UW+SvJyA0Qa9XOBpS3ng8BKqNbjeC0wjuRXqNDqSkLoPTPgAA==, tarball: file:projects/arm-consumption.tgz} name: '@rush-temp/arm-consumption' version: 0.0.0 dependencies: @@ -13956,7 +13957,7 @@ packages: dev: false file:projects/arm-containerinstance.tgz: - resolution: {integrity: sha512-SaSrVVISz1ZjPeO8jG5TiqvC+1hhhHv4PtTMZfzgDCxcfKp5zRXmcNRQ7CcRIjk4JPbWPLMwXELm78E9ykeRPw==, tarball: file:projects/arm-containerinstance.tgz} + resolution: {integrity: sha512-L0/F5cyMoejXt+Bk50tWAccZVi9P28A97pFk/oEmndSaglS19F8wpbraCz18/8pPCKYQOOUdDyTyMSmPZ13rNQ==, tarball: file:projects/arm-containerinstance.tgz} name: '@rush-temp/arm-containerinstance' version: 0.0.0 dependencies: @@ -13986,7 +13987,7 @@ packages: dev: false file:projects/arm-containerregistry.tgz: - resolution: {integrity: sha512-wX5l8Eto7xHEyyzj/+i58KOGcMjLIt8lK3CUvrpbqWAyXckfLD+EJpMDlMkQKP7B8KJZn0rBSOvo2DOPVuh5dw==, tarball: file:projects/arm-containerregistry.tgz} + resolution: {integrity: sha512-KrXOKsJYZpzKdKzGiYv7qFxQ3vghP1VHojVZxFQCml8xG6rpPqFLU9Csv19go+mDtKlsYjla7KXq9dffrioF3A==, tarball: file:projects/arm-containerregistry.tgz} name: '@rush-temp/arm-containerregistry' version: 0.0.0 dependencies: @@ -14016,7 +14017,7 @@ packages: dev: false file:projects/arm-containerservice-1.tgz: - resolution: {integrity: sha512-bYk9jhoOSa4Qv3EhhKixMq/9Q3iyEpC7syNtXZRCvyZQsrwgS7GMsKLygYTSXLdGRzMAZ3QMMNJG3wMX4wIt/w==, tarball: file:projects/arm-containerservice-1.tgz} + resolution: {integrity: sha512-psB8fi8xPgd4DQhH0+W7ux4LdjTXnjFwhOZOD/uf8b6HAJbFmoblTBuzEFw4p9jm7HHUK06KlgkVtHjDFTkKuQ==, tarball: file:projects/arm-containerservice-1.tgz} name: '@rush-temp/arm-containerservice-1' version: 0.0.0 dependencies: @@ -14046,7 +14047,7 @@ packages: dev: false file:projects/arm-containerservice.tgz: - resolution: {integrity: sha512-+pWOSQtyUTgc+0gU+LQWfB3e7nHG8fOJZHsLs2+Hn2ypGNYGLXdNLaWhWpBdg+iucgdqMDw8Ja5e6SYHCJuwGw==, tarball: file:projects/arm-containerservice.tgz} + resolution: {integrity: sha512-lj+Z+DNeeSo6UQusAcA9/sd9wa+QTHxJRZg9lItZp5LNLUEgeXnBg0xkxEpAIw07ojn6vWjM/fqWQIV4L9lOVw==, tarball: file:projects/arm-containerservice.tgz} name: '@rush-temp/arm-containerservice' version: 0.0.0 dependencies: @@ -14093,7 +14094,7 @@ packages: dev: false file:projects/arm-containerservicefleet.tgz: - resolution: {integrity: sha512-PQcr24oEdrDmHejzWucB0wHC97fJYA0bMoBDyilrYMNbHCS0pK7QDKMdK4mGsai7bqz2o+qSS+8DbqOXLTX1PQ==, tarball: file:projects/arm-containerservicefleet.tgz} + resolution: {integrity: sha512-uQDDni3B2mNlmUuzOFpNBkY/v4Nr4mufQjb2tYJlnt6/s7vg7iqxI2QI4aBjvPEjYOJh1Z7z8/4iFlRibR3Ljw==, tarball: file:projects/arm-containerservicefleet.tgz} name: '@rush-temp/arm-containerservicefleet' version: 0.0.0 dependencies: @@ -14124,7 +14125,7 @@ packages: dev: false file:projects/arm-cosmosdb.tgz: - resolution: {integrity: sha512-JrDCM1+VHSJ5iafdZnbxtpex9/rZxZop4mpPU4+3YqKptJjwPYW96DF1lWRpx3HYZoQvKzP0jbY5cjQvPko2ww==, tarball: file:projects/arm-cosmosdb.tgz} + resolution: {integrity: sha512-HX2XPGeQprhMiZuTB9dd3tOPFGyov+CwWHuuYzo+HxRGHAmlsGPj9YPGz5+EB04xoLIWQgx34HLOA2cZM0G82A==, tarball: file:projects/arm-cosmosdb.tgz} name: '@rush-temp/arm-cosmosdb' version: 0.0.0 dependencies: @@ -14155,7 +14156,7 @@ packages: dev: false file:projects/arm-cosmosdbforpostgresql.tgz: - resolution: {integrity: sha512-HCORHKmsdswJ/9Rv77nWQWlJQFHjerRkQOnoCqD8pUw+Ismf8Zj0ucEgyFwI0vDvKAzlEeY6n9QvwWcWJw+URQ==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} + resolution: {integrity: sha512-fbSR7O0byc3EEfrk0lF6QDoz3wXXU0iH50zy6yuv7jhRMlkonKR0+5vE4wJe6nJVKKNBS8ghSJmHL8tJ5n4kSg==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} name: '@rush-temp/arm-cosmosdbforpostgresql' version: 0.0.0 dependencies: @@ -14185,7 +14186,7 @@ packages: dev: false file:projects/arm-costmanagement.tgz: - resolution: {integrity: sha512-evd1cjGM5HTpXhj8kSwA7QmD5tb0GxTYz+T59fq9SP5Z0PGdYZT8olaVKB/JCQdWQsilNV87n3/D2x0TUlmmZw==, tarball: file:projects/arm-costmanagement.tgz} + resolution: {integrity: sha512-8VKWfNLoXGfTRK2RIUihzqTmJOg6HiPgaRtidu6bd2TpatWtX8rkkkXsADRIVH6OVwp2hBzHxC8Go87t2m5a2g==, tarball: file:projects/arm-costmanagement.tgz} name: '@rush-temp/arm-costmanagement' version: 0.0.0 dependencies: @@ -14215,7 +14216,7 @@ packages: dev: false file:projects/arm-customerinsights.tgz: - resolution: {integrity: sha512-8EmhMChGAmXNcp/+zjkXdCiV9+hvhutxPiwjve5CbDEN3ucqRKUbSZBvsd/shMFeX7prRglhZ0UamdOeIhzS0Q==, tarball: file:projects/arm-customerinsights.tgz} + resolution: {integrity: sha512-tef1W4nI6pm94v2cisoKy8rsQ7oeZA4ZhZXukzziDUgNEBEGHG6M9lNiI3RmE5jN4knSadKmF6R3gdmlhuSEzA==, tarball: file:projects/arm-customerinsights.tgz} name: '@rush-temp/arm-customerinsights' version: 0.0.0 dependencies: @@ -14244,7 +14245,7 @@ packages: dev: false file:projects/arm-dashboard.tgz: - resolution: {integrity: sha512-K1R/oyol5L6Lt2wIyUkEFH3olTzpnCCE3PhrSQCK7VQy+dYGIsEiclTK9o2iomcVztgsOK3Lx4+oF9/CvzCScQ==, tarball: file:projects/arm-dashboard.tgz} + resolution: {integrity: sha512-+uhyH4X3a04aVItfcXJCZ69DrTWRsmLhQGOODdUedFaLjfjbc/NyLFfI48FEPHBKSInS+eKQFmH+2b7EUTtfFg==, tarball: file:projects/arm-dashboard.tgz} name: '@rush-temp/arm-dashboard' version: 0.0.0 dependencies: @@ -14274,7 +14275,7 @@ packages: dev: false file:projects/arm-databox.tgz: - resolution: {integrity: sha512-ABCwqA8GmSQMERRbafuhUaexodTf4aMgRSuCf8IEUz7ghLImZNWF/TjdwXi/8m7AEuNx6goyjbLg/wdBmAm7wQ==, tarball: file:projects/arm-databox.tgz} + resolution: {integrity: sha512-eQ8buFlDDk2N0uTF4H5r0K1lrI5dakaYCguY3/5Lk06pDmFN8KbIS27IA3u42OvF/Bawpc1Hch2O6BfVcsvOlw==, tarball: file:projects/arm-databox.tgz} name: '@rush-temp/arm-databox' version: 0.0.0 dependencies: @@ -14304,7 +14305,7 @@ packages: dev: false file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-P6LLolKn9TxUcNL+DXszOupHW16PFEi2jP+WaT2wEXIHPhhnQtRjdG4Wk1NlnV+iQCbvYqJTIMwX2KIAPbsmSQ==, tarball: file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-yGHHQj3b9veF7XF1HvpIRdEQ9HHsmOMnD9prt97YFnjK58SD5DUhbJWemU+d1D6/xqRVlTTBtJBv+wA/9Rn7sg==, tarball: file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-databoxedge-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -14334,7 +14335,7 @@ packages: dev: false file:projects/arm-databoxedge.tgz: - resolution: {integrity: sha512-WiTu65aQZkHG0CIlTv7ms1p2lVpwj8AG+Wl7NG/y68PjxcNbU+xx8mu3RUowYp3oVaiD4tmdW03PxJcPn0UrDA==, tarball: file:projects/arm-databoxedge.tgz} + resolution: {integrity: sha512-zTYR1hawvy18RYKqky9wu2LBpvWc0GUp0bZnqHeqzdg9X7UaI8QLCClzXe9qEd5WqEAtDAnYUSEC0X3jvUyqyg==, tarball: file:projects/arm-databoxedge.tgz} name: '@rush-temp/arm-databoxedge' version: 0.0.0 dependencies: @@ -14363,7 +14364,7 @@ packages: dev: false file:projects/arm-databricks.tgz: - resolution: {integrity: sha512-fxpi+OwV0m4BzZoXLRr8m5XPNMJ4lmqdYMEZFvhvL/YHisTBxD0ydczsjrzF/Nwjg/CBZjEvoX6aC993ZLUGHQ==, tarball: file:projects/arm-databricks.tgz} + resolution: {integrity: sha512-RXI1XeTPejqTgNNOw37ZWktKXmL/puYILXvGTkrujMhxWKks0nYcwk9RugFNDqiwAcSVtijMgjBz6umoI6hjVw==, tarball: file:projects/arm-databricks.tgz} name: '@rush-temp/arm-databricks' version: 0.0.0 dependencies: @@ -14393,7 +14394,7 @@ packages: dev: false file:projects/arm-datacatalog.tgz: - resolution: {integrity: sha512-KXRSpZoBFakUPSlBgKVrlRb/0R3SfBt/2IoxUHqXKEBQ+YkWgnpJUtrsi+puV9Lj792KItOHABnaNdYsFQQIcg==, tarball: file:projects/arm-datacatalog.tgz} + resolution: {integrity: sha512-80kly3hApa9Sajza0bFx64QKl+6sumC6jJmPYyl0ezlI5nDPvkwvJSsOtrIW2DnlgcaMq71MWISg6DMyAXgIIw==, tarball: file:projects/arm-datacatalog.tgz} name: '@rush-temp/arm-datacatalog' version: 0.0.0 dependencies: @@ -14422,7 +14423,7 @@ packages: dev: false file:projects/arm-datadog.tgz: - resolution: {integrity: sha512-3/4FfKMzeYF45doitgdXODW1GCpTR6Qt07UXnUQknmPx4Z5hD7fUZ/lhRhPQIkYC+T6xn3H+kgTrpNr5AzpzwA==, tarball: file:projects/arm-datadog.tgz} + resolution: {integrity: sha512-pYRNi6Q5ttM4AIwcaH5n2LYmaE9kAykIbD1QyquHbqoyD3k4oFVASIZEwlqWPIyWpgrj/FtaKG9/EFT3n8D2kA==, tarball: file:projects/arm-datadog.tgz} name: '@rush-temp/arm-datadog' version: 0.0.0 dependencies: @@ -14452,7 +14453,7 @@ packages: dev: false file:projects/arm-datafactory.tgz: - resolution: {integrity: sha512-urWiWwwdI5TR3DydiAWFk7nCq/5gZn4lsnRs2OXgELNNnXpJfbLfU+1/z7CnYDSQGsA5wR+u9iC42D47ttvgug==, tarball: file:projects/arm-datafactory.tgz} + resolution: {integrity: sha512-iOLeUEsGV/odmVzk+vJA6iyUj22hHUdQw+ADckIeuHrsi9CNfFRKu8YZHERnLmLJJbdejPqRXMr01KdNZ2SCtA==, tarball: file:projects/arm-datafactory.tgz} name: '@rush-temp/arm-datafactory' version: 0.0.0 dependencies: @@ -14482,7 +14483,7 @@ packages: dev: false file:projects/arm-datalake-analytics.tgz: - resolution: {integrity: sha512-ArzJu96X58+OcYy7d0BdnMthLlgSWtbR6P5VU3ghxAbLQ6plsWy73mLDrc7FE6cIvdBl353KgTUSTrvf55uwuw==, tarball: file:projects/arm-datalake-analytics.tgz} + resolution: {integrity: sha512-kLadl1tR3bouJk4yremLkn9xTwtzE1onV9P9Aciulakae5Mx0iPN3Rr5d5mOcKaxh0PG0NRJgWKLhmQ7B9RoxA==, tarball: file:projects/arm-datalake-analytics.tgz} name: '@rush-temp/arm-datalake-analytics' version: 0.0.0 dependencies: @@ -14511,7 +14512,7 @@ packages: dev: false file:projects/arm-datamigration.tgz: - resolution: {integrity: sha512-AUiVgHkYSmpCCBumkMlhQkQUspeHqMyDfEV+aH9UdrIbQWlZ9Ma0/+y1noZktCg/nRtwk9sCfk73PO5ec6PrkQ==, tarball: file:projects/arm-datamigration.tgz} + resolution: {integrity: sha512-/FNRGEhuOQjVd0muvkj3qK9otyBZGGtyvd3Ag9IgzDdVAHJThd8sM6s0fMq7SOKnyGdxcoda7ejighGcNarnnw==, tarball: file:projects/arm-datamigration.tgz} name: '@rush-temp/arm-datamigration' version: 0.0.0 dependencies: @@ -14540,7 +14541,7 @@ packages: dev: false file:projects/arm-dataprotection.tgz: - resolution: {integrity: sha512-sgYyZ4N+dqNTke3Sv44Wf7QrB/N2QgfKG/1cssFfoue3xPByWVEoiWOp+XRg5tZMVSHmgb2du9huoluNGpRMFQ==, tarball: file:projects/arm-dataprotection.tgz} + resolution: {integrity: sha512-QAMh6pnRsDMLm3WFmfn6quhhvNOdDIrSvCazlxcAl20UtEZy3Up/9QfCU7js/v9Zq7HENW1trNtdjWxKP4ow0Q==, tarball: file:projects/arm-dataprotection.tgz} name: '@rush-temp/arm-dataprotection' version: 0.0.0 dependencies: @@ -14571,7 +14572,7 @@ packages: dev: false file:projects/arm-defendereasm.tgz: - resolution: {integrity: sha512-ROaU9qdvQ4Mp8FErQmnzDXLlK24fowwMHpWWaBFkrvYO/lSD4dXtI7Fu6D4YzvyI/sf6BrBVwaKFh5bjTcXgAg==, tarball: file:projects/arm-defendereasm.tgz} + resolution: {integrity: sha512-jdeD+y40c+WsExckOAJQlEkcJK5XPcd0m1eVUEAT5DNizWCxK3SKi0He9Skol/DUnqLYo8rIKiKmQSSD68mGmQ==, tarball: file:projects/arm-defendereasm.tgz} name: '@rush-temp/arm-defendereasm' version: 0.0.0 dependencies: @@ -14601,7 +14602,7 @@ packages: dev: false file:projects/arm-deploymentmanager.tgz: - resolution: {integrity: sha512-L5T74sbbIbvcU5hl1fYzI6Mp6F9Vt3tz2BfRrkzJI176XmuB6+sI2i9A7gLyQhxts1kgp65mELFN0jpBTKIigQ==, tarball: file:projects/arm-deploymentmanager.tgz} + resolution: {integrity: sha512-Yi7f/RE328PSdv8iYQ53a5/sVlXzt3a6TEzvHrsZOJ3e0mFZ6/KOy/X2+vEWWQsAdMbBsClrJbtaz0pxu/dEfQ==, tarball: file:projects/arm-deploymentmanager.tgz} name: '@rush-temp/arm-deploymentmanager' version: 0.0.0 dependencies: @@ -14630,7 +14631,7 @@ packages: dev: false file:projects/arm-desktopvirtualization.tgz: - resolution: {integrity: sha512-63fbuh1Elv9bErYNzaeL3E/e/SpAX8rS5ZEo840VlOGsRau/58shIAgr6nkAe0mq7bSA/clYpE6t9t3pxcVZiA==, tarball: file:projects/arm-desktopvirtualization.tgz} + resolution: {integrity: sha512-eL5RX+9Jx99cv/fxmX1uuH4XyqNSpZ5uY+YIXTtpkuQTCMmyDrSCvLK7Uoe58fDfjAa+Q2xJE/kzPubq155F+g==, tarball: file:projects/arm-desktopvirtualization.tgz} name: '@rush-temp/arm-desktopvirtualization' version: 0.0.0 dependencies: @@ -14658,7 +14659,7 @@ packages: dev: false file:projects/arm-devcenter.tgz: - resolution: {integrity: sha512-pjkcpXIXhJsqdievn9pQi/hsFqQfnxhygVRwWeYLn6HNValjZvbVNt+9kw6u7/SOB4LC9abudIDr0Z+JyZFixg==, tarball: file:projects/arm-devcenter.tgz} + resolution: {integrity: sha512-Y8FdhWDpBujRLbe7SF2wgGsClyhGuF5vcJ1pYpTDNBmfh5Nnw0D9I3rD1eu9r+gyAq0nwShKDC9WZx/OtZqAxw==, tarball: file:projects/arm-devcenter.tgz} name: '@rush-temp/arm-devcenter' version: 0.0.0 dependencies: @@ -14689,7 +14690,7 @@ packages: dev: false file:projects/arm-devhub.tgz: - resolution: {integrity: sha512-rKgyGIvSh0W5oXjOhvnma9mFnTlBfX+V5vMnl9ZkqhDrWIUUlHB8RW9gidPtFjTPrZAWaWrHqbCX09KvPOX4ug==, tarball: file:projects/arm-devhub.tgz} + resolution: {integrity: sha512-Yjw9ANAojxReo2LjL07gBSat1NCPMKiaKIX77VFRooTQNd7baPDxsQ9T7rOO+dpdGZ0a9Yq9xKkLxXndA8xPCA==, tarball: file:projects/arm-devhub.tgz} name: '@rush-temp/arm-devhub' version: 0.0.0 dependencies: @@ -14717,7 +14718,7 @@ packages: dev: false file:projects/arm-deviceprovisioningservices.tgz: - resolution: {integrity: sha512-K84GOD5aW9q09OqBKnKCrT0C7upIdPHPno09FfZ+OqOQJ8dW4UB7Px+4LXr6l2Ft5ThvzMTSX2zzkASvfKeIyA==, tarball: file:projects/arm-deviceprovisioningservices.tgz} + resolution: {integrity: sha512-nanv2oHzu23fby8Z9KZOfZpqETKOWuBUXy2qInZQZWXfIdv3zHPVcC9wnw0Wm+HJR1RH8yCKajDP3zK9fDVPyQ==, tarball: file:projects/arm-deviceprovisioningservices.tgz} name: '@rush-temp/arm-deviceprovisioningservices' version: 0.0.0 dependencies: @@ -14747,7 +14748,7 @@ packages: dev: false file:projects/arm-deviceregistry.tgz: - resolution: {integrity: sha512-7esVDgi9xVNSLSWOmFlBU52D7gdM1G3BVAFO+D54RTvFOMSceura1poPVsyXkaMEpuLG4JvqBnD73lahcsPSeA==, tarball: file:projects/arm-deviceregistry.tgz} + resolution: {integrity: sha512-MC1GAJ5+eTLg5jYCIFKG05g9k6b4BLcle+cRhrdK8ug6gPrDgUuFYtfhavMMLDjB5S70TSjuKP7iz6EaVqCRdg==, tarball: file:projects/arm-deviceregistry.tgz} name: '@rush-temp/arm-deviceregistry' version: 0.0.0 dependencies: @@ -14778,7 +14779,7 @@ packages: dev: false file:projects/arm-deviceupdate.tgz: - resolution: {integrity: sha512-tkLkqNtAKlL//CZLIthAh0zz7ubE7aTpzH1gZpynTxLmElfao+2mhqvn+wnSQ9H4MIZCWu/Je4CjJaWkQ2hBWQ==, tarball: file:projects/arm-deviceupdate.tgz} + resolution: {integrity: sha512-Fi87j42fzx7EAKXWBiIgUDz+cL8QIG19kNbPEJnCUnroZT1CgePW+0TBTMTpdy0XHDqrzJTdkv60HJGSNV6OPg==, tarball: file:projects/arm-deviceupdate.tgz} name: '@rush-temp/arm-deviceupdate' version: 0.0.0 dependencies: @@ -14808,7 +14809,7 @@ packages: dev: false file:projects/arm-devopsinfrastructure.tgz: - resolution: {integrity: sha512-ccrIS68bDVShagHR/K7bAktyfPIYQk2toFSwPha7pxsCwKYbBie0xyqyaRJf56F9ugIBBWs2GGl5GUoyVh00lA==, tarball: file:projects/arm-devopsinfrastructure.tgz} + resolution: {integrity: sha512-uLfSmRkBvgM/BNZeE4Og3nR1nthkDOLsfNfilOaCOt82XavON+qeM/thVTSYjQUqlW1sN6M+/mTAGV3IbGHFTA==, tarball: file:projects/arm-devopsinfrastructure.tgz} name: '@rush-temp/arm-devopsinfrastructure' version: 0.0.0 dependencies: @@ -14839,7 +14840,7 @@ packages: dev: false file:projects/arm-devspaces.tgz: - resolution: {integrity: sha512-Ix60GT+8pCNlR78O/DCH6lp44rlu8GxCjm/DaUYkLy5noAcF4n6qufOFP5URt9SVNPqCI+jIt1IV35dYaGWiTA==, tarball: file:projects/arm-devspaces.tgz} + resolution: {integrity: sha512-V6pn0ljyLRLiGv2tP6ttNPqZWD4Ln2/flqCz5dsxKv6tXKlFjZaDFbaqkcd5HXlyo2a1m8RKEJKyEQws8P8l9w==, tarball: file:projects/arm-devspaces.tgz} name: '@rush-temp/arm-devspaces' version: 0.0.0 dependencies: @@ -14868,7 +14869,7 @@ packages: dev: false file:projects/arm-devtestlabs.tgz: - resolution: {integrity: sha512-pct3yESkYzm6mOCTHRkIM1DX+WyS06a7AAaHVW+9yxOKRnSaHu22BKNSAFMABAOv5T5PtKVOXSjplfnZtf6a6Q==, tarball: file:projects/arm-devtestlabs.tgz} + resolution: {integrity: sha512-v0OynTI0c0Lytqyx5x4bCW/laQTF/yWZrsu7lH3eSo4Ri05hLXu6xGZd7ktUcsbeDfufDpRK7uLu2xXKR+AIcA==, tarball: file:projects/arm-devtestlabs.tgz} name: '@rush-temp/arm-devtestlabs' version: 0.0.0 dependencies: @@ -14897,7 +14898,7 @@ packages: dev: false file:projects/arm-digitaltwins.tgz: - resolution: {integrity: sha512-y7lmO2dEETJ7gfdSGuLjkNNerJJjP2ehsiXeOu5lEeHjelSBZpq5eovSGiC2SSAsJYhgjBnPa8FezxFgal1ghw==, tarball: file:projects/arm-digitaltwins.tgz} + resolution: {integrity: sha512-ksbql7mYLO+qVGFtYns9eW5MhaxsEkyGYZ+6xCTEMdqpX1dIwH7PiGKvnYVKReS0aP6POx9EcXmqxeved+EclQ==, tarball: file:projects/arm-digitaltwins.tgz} name: '@rush-temp/arm-digitaltwins' version: 0.0.0 dependencies: @@ -14927,7 +14928,7 @@ packages: dev: false file:projects/arm-dns-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-ePWpgoHU8/FVEf+ELp8TFJHGazelT802wthozBu7TOHmKhWvIrVn7PWsbJqHJ+0Tq/7uw6Fn3eYXzFwa+Qu/2Q==, tarball: file:projects/arm-dns-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-WUlWtWISz4noyl/K9DEDzVklAcGQdv/Vrktil9V/mlkPFA+9zNMQITDp1KJ5ecg/bzMheV3M+zGvcLwTVbns9w==, tarball: file:projects/arm-dns-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-dns-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -14957,7 +14958,7 @@ packages: dev: false file:projects/arm-dns.tgz: - resolution: {integrity: sha512-GtoItqsDySJp4zPNT7MejyLTapT25UHlfecIoEj+qmBbFMCbpiFDstik7OOT1MAJJldMrMbYPkTlBVerayTFpQ==, tarball: file:projects/arm-dns.tgz} + resolution: {integrity: sha512-cNoeVEY8Tqk/FrQTkxrgM0CLQ6Dw0lZf/SuOc00yzpvmbP5r+Ln+VyW0LmjEAHJuU+Wa7WXSXM9bccphSdB2Tw==, tarball: file:projects/arm-dns.tgz} name: '@rush-temp/arm-dns' version: 0.0.0 dependencies: @@ -14986,7 +14987,7 @@ packages: dev: false file:projects/arm-dnsresolver.tgz: - resolution: {integrity: sha512-PrcOSx7aR21DS4BPf0qonWOQvA9hopXFvoLeHfccipcuv3d4xkpzmW7MXaXIUIMNvSFyXyt/kzn4YFOYuKI/MA==, tarball: file:projects/arm-dnsresolver.tgz} + resolution: {integrity: sha512-gep5ujkJodPYfKnKyThoq+x9Km167oO7dAVXOUY9HJGwMgYQCughc4+/OnVblnrgWaOKdWCM3jXZCH6BpSdcQw==, tarball: file:projects/arm-dnsresolver.tgz} name: '@rush-temp/arm-dnsresolver' version: 0.0.0 dependencies: @@ -15016,7 +15017,7 @@ packages: dev: false file:projects/arm-domainservices.tgz: - resolution: {integrity: sha512-uHynBgqPkFhSYw2BCNGIRvFv5elnw/VaZk6AmZzpwrIB7OmeKB2/NNaIKVkU90rqziK5Tavn9u20HHtfTvSS7Q==, tarball: file:projects/arm-domainservices.tgz} + resolution: {integrity: sha512-BeSrIwwzJ8e+JQsXWbi4r+B7/UCU0aE/hoM3J2ZSM7thEjqjyTUVUF2up0BBCeb6Eujp78i8gwjx9kDKg+m6Rg==, tarball: file:projects/arm-domainservices.tgz} name: '@rush-temp/arm-domainservices' version: 0.0.0 dependencies: @@ -15045,7 +15046,7 @@ packages: dev: false file:projects/arm-dynatrace.tgz: - resolution: {integrity: sha512-MnAUN6KLUFLyFH9VQXm7hp9U8/HfVCQfG60PycCeuNeOksOXdGExPM6kmgPQ0N6g/ObDGcnEY+PR+QZfEHMbVw==, tarball: file:projects/arm-dynatrace.tgz} + resolution: {integrity: sha512-oANyRy8KFipAz2ZDwNR+e7vfeNDXhJ5UUJdDZPgXEMHMUB0VIaqk8iqAxKORKOgv3mB6Au2KQkclGHixmu0opg==, tarball: file:projects/arm-dynatrace.tgz} name: '@rush-temp/arm-dynatrace' version: 0.0.0 dependencies: @@ -15075,7 +15076,7 @@ packages: dev: false file:projects/arm-edgezones.tgz: - resolution: {integrity: sha512-v2qyQorhkPdU1pEh7I9mFAf+3GfQ8NKI583ib++GyTC3p/mJyWTYQAJRf9fWcWf+TTjRFsW1LmJrSs0Hu4n+Tg==, tarball: file:projects/arm-edgezones.tgz} + resolution: {integrity: sha512-+2e56zkHJG9Ou50fgKhbsrFsC9dDv89ATAItBeDTG5KAlnUcJC2heml5HZK0pjLlIal3qqoCFvQ5GbJvK6TDnw==, tarball: file:projects/arm-edgezones.tgz} name: '@rush-temp/arm-edgezones' version: 0.0.0 dependencies: @@ -15116,7 +15117,7 @@ packages: dev: false file:projects/arm-education.tgz: - resolution: {integrity: sha512-3amM+xuI6cykJGZyTKhXHmTNfRw/J4EYp08XAwub4kpqH5n0+z38LWjhoI//hHuQFVsLZ4Pozims56icgUlrHw==, tarball: file:projects/arm-education.tgz} + resolution: {integrity: sha512-VHgBprarm44/UbR4LULw2dxW5L4sf2b0sIXOf2VIVqFlgbxDT7HTkCWPZeTso2cGutQH020PQxnfQ2MogWVeSg==, tarball: file:projects/arm-education.tgz} name: '@rush-temp/arm-education' version: 0.0.0 dependencies: @@ -15144,7 +15145,7 @@ packages: dev: false file:projects/arm-elastic.tgz: - resolution: {integrity: sha512-S8rHkUXxXyeyUbRi3pU1JT8ECuFqfT5gXxK07kEchVdKKfCU5Dlxe3uuayxqSetuB931OACWksL5r0oSPzNK/w==, tarball: file:projects/arm-elastic.tgz} + resolution: {integrity: sha512-0+hpUWNMaoP/gT8V3pZTcTbRk4TctbkqRAgtksqaSdy7eRGlA0+AiJ6ykWHP0hg9OCZsXv66Z/PRB7H/EOVDMw==, tarball: file:projects/arm-elastic.tgz} name: '@rush-temp/arm-elastic' version: 0.0.0 dependencies: @@ -15174,7 +15175,7 @@ packages: dev: false file:projects/arm-elasticsan.tgz: - resolution: {integrity: sha512-BlEMVnmD+3jzmWPpvV0xMkGlqs4tz4NmdRAjl+EtycSetf19XpKwDEQbJHo5Z4yy4EE4ERDZzk6ksJXkvaisXg==, tarball: file:projects/arm-elasticsan.tgz} + resolution: {integrity: sha512-cPSiZfZ/20HItvSlkp64mX4CdWBLNfAwIkbYksQnmGr5oBPalJDHD/vAsFAVwEyEsSz80dBnC6fjQXXwE4u1MQ==, tarball: file:projects/arm-elasticsan.tgz} name: '@rush-temp/arm-elasticsan' version: 0.0.0 dependencies: @@ -15205,7 +15206,7 @@ packages: dev: false file:projects/arm-eventgrid.tgz: - resolution: {integrity: sha512-+RjW6GKKvhqUMuvC5uzbFTqvKlR9q43QRpNsKi35nXe6pqqaIivojqbxNxttM5jCaJhNxf2Y5slQKZEo/RFiSw==, tarball: file:projects/arm-eventgrid.tgz} + resolution: {integrity: sha512-V+vC8fskpaujJUOWdFIXTk0xzERVtMuxJolLTGi0U3C1MiSrGQPE5PujweesyfSlm+G+uNFfRAUV1Qv0hm+r8A==, tarball: file:projects/arm-eventgrid.tgz} name: '@rush-temp/arm-eventgrid' version: 0.0.0 dependencies: @@ -15235,7 +15236,7 @@ packages: dev: false file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-sPp9QJwT1ZhRwgJioU+4kdx05v2O4F7B+VHgFpkzK0redYN9pJsfjjDmLLtS4MLXl6Q/mg03I/G5tCkYzn1eiA==, tarball: file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-G1dabpx+gQql0rs/R5Ffxt+n7Z80mMagxqcOpeb1G8Q9YSnMhX56Wfpontoq9DDChfPaoLkijqv28c+iL8W3Uw==, tarball: file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-eventhub-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -15265,7 +15266,7 @@ packages: dev: false file:projects/arm-eventhub.tgz: - resolution: {integrity: sha512-Mil802lj1EHvYl2S/YV3mAubjIwchp8XBYt5HN/nDilw/MsIC9dbKFoa9lxSV0n1BsisQoP/H1FKxM3QgaJhug==, tarball: file:projects/arm-eventhub.tgz} + resolution: {integrity: sha512-n6D6i0XBsBIQ7hPnWL74IRmS83rXOCKNynzPd2FTdSvEnC8MwBZUhnBaZnCBKdrI68INxbFVd526whyM+jh31A==, tarball: file:projects/arm-eventhub.tgz} name: '@rush-temp/arm-eventhub' version: 0.0.0 dependencies: @@ -15297,7 +15298,7 @@ packages: dev: false file:projects/arm-extendedlocation.tgz: - resolution: {integrity: sha512-J/Y9g+tD5KoYQsL4smK0BQyVY9XNn29PRNO45SAZ2w+zeVAL7scDspHiUdn6Yx1QJz4ztPyR+Eq9OmdYKaO+WQ==, tarball: file:projects/arm-extendedlocation.tgz} + resolution: {integrity: sha512-krGJ9DPyirnmPixBoGMipAwnHfCQrErM+sM0NumGMe4wAJ9zXuLRFLEpqAqtEcEApPCtykjFh6JknpKVwu/cbQ==, tarball: file:projects/arm-extendedlocation.tgz} name: '@rush-temp/arm-extendedlocation' version: 0.0.0 dependencies: @@ -15327,7 +15328,7 @@ packages: dev: false file:projects/arm-fabric.tgz: - resolution: {integrity: sha512-z/L7iOtkj5NHCtLf5mD3zHqdAEGkrkoCPi6xM7p1QmrmSdT8DIlXyKN2/7g5zklySQDnFi6oN+ss1MJ11X1e7A==, tarball: file:projects/arm-fabric.tgz} + resolution: {integrity: sha512-4u6kKh1l8jg7Op7TgZ01rDJOQ+syARzRYjz0QfLkD2vL+ZDRDd3tVP8pgIvlmdMfrn6Jz01ZEJzsIWuGUr6GMw==, tarball: file:projects/arm-fabric.tgz} name: '@rush-temp/arm-fabric' version: 0.0.0 dependencies: @@ -15368,7 +15369,7 @@ packages: dev: false file:projects/arm-features.tgz: - resolution: {integrity: sha512-f7ciYuAP6IrDWhhPV8G4TcvlxsPw3LhQPHz4Qltcc/HJt0mukBdzwMztkCr+cOx4HW5vi5atUW0A8y/TKVUjLw==, tarball: file:projects/arm-features.tgz} + resolution: {integrity: sha512-iUtvMozoMBnZyUA1uayZiX+LXYTGXoVcuyRzsuvt07KV10csko/EpbqmcNcCz9uKrWjQetOKnbGmmTflBveWyA==, tarball: file:projects/arm-features.tgz} name: '@rush-temp/arm-features' version: 0.0.0 dependencies: @@ -15395,7 +15396,7 @@ packages: dev: false file:projects/arm-fluidrelay.tgz: - resolution: {integrity: sha512-dwffW5IROzrgFOqyLI1bAe0t0xnhMD15cl6Sdj5DkF6bzCNYdD3KF9Y1+pBdTUGu3ssLBni25v5QGY5SL9bHUA==, tarball: file:projects/arm-fluidrelay.tgz} + resolution: {integrity: sha512-Etl/SeURmlUubhR0Ob/D3CfQOzJ4u7MxstNciRUGqo02md8JeWqkPeXKmNFwdKHT5nvf/6DkZNNOtCEE0Av3Zw==, tarball: file:projects/arm-fluidrelay.tgz} name: '@rush-temp/arm-fluidrelay' version: 0.0.0 dependencies: @@ -15423,7 +15424,7 @@ packages: dev: false file:projects/arm-frontdoor.tgz: - resolution: {integrity: sha512-96aW16KXJae62lU4Pktin4qiP3KdaF5lOP/os9uyUFKM84ejYVGxK7SkoBrWBGTAi/2jR8+2hTs/OBTozMEh4w==, tarball: file:projects/arm-frontdoor.tgz} + resolution: {integrity: sha512-vKMvRmtgCZKMBNsY8f7nK7e3mVMAdODJS7ZqmQtSd2UVLmoIRt11ZvEoKSJpVboj7WVP9KMHnZdvhYZQE2Lpvw==, tarball: file:projects/arm-frontdoor.tgz} name: '@rush-temp/arm-frontdoor' version: 0.0.0 dependencies: @@ -15453,7 +15454,7 @@ packages: dev: false file:projects/arm-graphservices.tgz: - resolution: {integrity: sha512-ACaHUQ658CBmi788RY5wdXy3efeO8ifhgx8RYC6bxtrKkg8Y+RbdfsyKYr5qRtFWo7DgONuk8DoCyWbDK5ccUg==, tarball: file:projects/arm-graphservices.tgz} + resolution: {integrity: sha512-3NvfLQ03T72sfniuq9QhCd1qL/V9fxnLa+v6ihi+ECb9w+vHrpmseIdf9OyMucpFJ8Aw/3xoKURHcOAU+Qj1Ig==, tarball: file:projects/arm-graphservices.tgz} name: '@rush-temp/arm-graphservices' version: 0.0.0 dependencies: @@ -15483,7 +15484,7 @@ packages: dev: false file:projects/arm-guestconfiguration.tgz: - resolution: {integrity: sha512-54Exk1i4+TTB18+81gI9L1BF9HP+tP5XJ8ODYTbzlORRPySb5rwqbJqMiZwFlh9faDSNUb01NuXe7EfYcUGoeQ==, tarball: file:projects/arm-guestconfiguration.tgz} + resolution: {integrity: sha512-cA1FyNxt0pSSEU1S66JOFfxVu6XqvRNBQ2q7QwdoH3+oic3Wpm9tW0HeDic/Pzf1DqCiw91fpg4+/ws9CFX7uA==, tarball: file:projects/arm-guestconfiguration.tgz} name: '@rush-temp/arm-guestconfiguration' version: 0.0.0 dependencies: @@ -15512,7 +15513,7 @@ packages: dev: false file:projects/arm-hanaonazure.tgz: - resolution: {integrity: sha512-O3fMcEv1vM0bdXlP1+LArFrWvkzDEySXpA+5qM2bEz2vMBpuTYJ6NgpE5Ae9HMz1L2FksgeJPW6TVgZ4BAGC+A==, tarball: file:projects/arm-hanaonazure.tgz} + resolution: {integrity: sha512-bGd+gt1jDNuGL/Rm2eRj4XEvxEtEF8PiOv+SBhQ9agGH7zFTWipoVkYVjnHUU1vUzLyc+GUwcLIka2xO2gc7Vg==, tarball: file:projects/arm-hanaonazure.tgz} name: '@rush-temp/arm-hanaonazure' version: 0.0.0 dependencies: @@ -15541,7 +15542,7 @@ packages: dev: false file:projects/arm-hardwaresecuritymodules.tgz: - resolution: {integrity: sha512-WhMDge+HlNGk45vcZaUuo+yy7wptjaryc/zkRxGmU7e6vMMXuJ6Cb/qnIIjQnxhoqafmz71bV39MrZPGs9zFhw==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} + resolution: {integrity: sha512-uv3Mq0PPI1ZgkGmfUT83p44xUO0PaUAeoUbRtExLlt8Jok+MBWxfnzUQWIfX6Rzq7PCnlmK1kWiKaTbvrPg18Q==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} name: '@rush-temp/arm-hardwaresecuritymodules' version: 0.0.0 dependencies: @@ -15571,7 +15572,7 @@ packages: dev: false file:projects/arm-hdinsight.tgz: - resolution: {integrity: sha512-XvUPI6T8GT53As8dAq1BXnKHO3IlWrLfBGVuBud2zg3bK8RfzD+jMJm4fCwsnxaoPpbvzsKFJWRNtodyxEafIw==, tarball: file:projects/arm-hdinsight.tgz} + resolution: {integrity: sha512-zMrL7ofN8+te6KaIQmgTYzYMlHPHJRuFEEgHM8ZLuAimEW576RPs8KXvXwuofem4NQgWSc7bqUwK9Iu1P+6aog==, tarball: file:projects/arm-hdinsight.tgz} name: '@rush-temp/arm-hdinsight' version: 0.0.0 dependencies: @@ -15602,7 +15603,7 @@ packages: dev: false file:projects/arm-hdinsightcontainers.tgz: - resolution: {integrity: sha512-QAtB2Sb2TJO4cogGdUAi/Q7RgSbrynsqVRTxUGtnlfRFNlG0Lu+n8MftUWhmXLWAUdYyHLEY5pXWU5f41NY12g==, tarball: file:projects/arm-hdinsightcontainers.tgz} + resolution: {integrity: sha512-h+ps8HfICBAgLR44hUimb5E1+uXXoIH3JdG/2A3i7p7v42Ugx/sItLlA9fWNGIvPzjY4PgVU5I6MgvZ91Kop3Q==, tarball: file:projects/arm-hdinsightcontainers.tgz} name: '@rush-temp/arm-hdinsightcontainers' version: 0.0.0 dependencies: @@ -15632,7 +15633,7 @@ packages: dev: false file:projects/arm-healthbot.tgz: - resolution: {integrity: sha512-DQ80GrqmQ2QEVcNl1Yl9U4pHYwieUvE0lSd9KXiq2l2d2I/dAeUT9VpZ8i1EWlD2kqUyhRb2aAzG9pMbG7v+JA==, tarball: file:projects/arm-healthbot.tgz} + resolution: {integrity: sha512-+ArxG70DUfSapmVfsUS3+qtnoVYcGnjip2GZM0saz5+f0hZ22M8mt+hK8IXxTwV1FlputOllFK28VMasXnn32g==, tarball: file:projects/arm-healthbot.tgz} name: '@rush-temp/arm-healthbot' version: 0.0.0 dependencies: @@ -15661,7 +15662,7 @@ packages: dev: false file:projects/arm-healthcareapis.tgz: - resolution: {integrity: sha512-0KuF6Ft3w+wfKFcPFxLMj4YOiztGfU5pBMTuf6Q74owkZFewXGoIWKcppKsUWI3ap4EzA1SwHFIr3LsxmZ4RVQ==, tarball: file:projects/arm-healthcareapis.tgz} + resolution: {integrity: sha512-XBGaQMB4VgyAgGLpvJR9sq16/fF0jft7xTk5YuMo/RU/Fz44iBlqKxsLhkyApe6mX5ntExLzcPyx/+ClgvsblQ==, tarball: file:projects/arm-healthcareapis.tgz} name: '@rush-temp/arm-healthcareapis' version: 0.0.0 dependencies: @@ -15691,7 +15692,7 @@ packages: dev: false file:projects/arm-healthdataaiservices.tgz: - resolution: {integrity: sha512-tyUVQWuRSVdZRjkIIEh5b4fZckDMvvH7VO1rsKdnfXJ+4tNr3u4ODFAPPokAPxM7oh5dY9zDx4v3DlU8B2ykyw==, tarball: file:projects/arm-healthdataaiservices.tgz} + resolution: {integrity: sha512-doiKxRc+38oVx0Qt+lctNPslUlNkW0blc5gXsZJz9pQbtd7TBjIqZarC+qVHMuz9YlmEqbzegwmBiCmo9w56Sg==, tarball: file:projects/arm-healthdataaiservices.tgz} name: '@rush-temp/arm-healthdataaiservices' version: 0.0.0 dependencies: @@ -15732,7 +15733,7 @@ packages: dev: false file:projects/arm-hybridcompute.tgz: - resolution: {integrity: sha512-A7+V6V2mM+iJkWIhyHHxwFwt5oGrgdlu4gcYutMpglOzI3GPtS8r9iQPQFEai8whcLa1KeT2njUD7TA4HLseVQ==, tarball: file:projects/arm-hybridcompute.tgz} + resolution: {integrity: sha512-GbBxQuYrq19FZ59UFShF5lBTkFwItJzW3WvsG8XqLOvSx7vLQYbVF66JoWA61Do1X5xnkWG1sfSFXH1Wi0oTMA==, tarball: file:projects/arm-hybridcompute.tgz} name: '@rush-temp/arm-hybridcompute' version: 0.0.0 dependencies: @@ -15763,7 +15764,7 @@ packages: dev: false file:projects/arm-hybridconnectivity.tgz: - resolution: {integrity: sha512-toWD1QwUpQt4nvOJ6qOkz7hKXktq+YMMTGlRA2pup/Plr1put0Hfmw4hZpb69la7oULK8OAvWMmrIMhkHpYkEA==, tarball: file:projects/arm-hybridconnectivity.tgz} + resolution: {integrity: sha512-a+0Rw4wx99bkMcZ2/pXvGnt88WPAYVCzx/6RIyMxUawfz7HbUU8J7NhXDhd6VYkyOeHLlv1PT+JzKpxCWvky4g==, tarball: file:projects/arm-hybridconnectivity.tgz} name: '@rush-temp/arm-hybridconnectivity' version: 0.0.0 dependencies: @@ -15791,7 +15792,7 @@ packages: dev: false file:projects/arm-hybridcontainerservice.tgz: - resolution: {integrity: sha512-Ch0B+r0E5lcafqv5mJtERBZ2h/CTci+qi7UH6ERV312+H4i5AHiCAlM9QGuEYbvy/lxf03oqPY0hv9550c+mUw==, tarball: file:projects/arm-hybridcontainerservice.tgz} + resolution: {integrity: sha512-lQu/RLkt4xTxb0/ULu0NgTk/3DDP6Cy83qupaQ7hbxARXILPjEsekIhPpyLDqyr58h5kaFOm5qfMpi/cuC7ocg==, tarball: file:projects/arm-hybridcontainerservice.tgz} name: '@rush-temp/arm-hybridcontainerservice' version: 0.0.0 dependencies: @@ -15821,7 +15822,7 @@ packages: dev: false file:projects/arm-hybridkubernetes.tgz: - resolution: {integrity: sha512-A1KwxoKJj/A9qMsxA4eCbKwi659yvvc8ZDDgM0FHpB8+89nK4qlBEyZeMb+/JjuhG0yqY5F2jbEUHeD7X+13Jw==, tarball: file:projects/arm-hybridkubernetes.tgz} + resolution: {integrity: sha512-fzcQSxgmL/OD8xu4fFtRjNA4pm0njzVzm5bnM+efb4cln/U6RCFiH34AX0u6OSUCLEyMFb1aLqUiz1xYKvFknQ==, tarball: file:projects/arm-hybridkubernetes.tgz} name: '@rush-temp/arm-hybridkubernetes' version: 0.0.0 dependencies: @@ -15850,7 +15851,7 @@ packages: dev: false file:projects/arm-hybridnetwork.tgz: - resolution: {integrity: sha512-TKOU3765APfF1sXCtWFmS9kkAFlLFu18lc7ABS8GWlnXLAjDCvGVCezXZzpqMLNsTN5acwUXlnyNj3+Tlsai/Q==, tarball: file:projects/arm-hybridnetwork.tgz} + resolution: {integrity: sha512-UqabuG49toOIivd0LnUDv2D8YMuC1cDaqfNx6wGTp2MC0E4DwSwUhtjnM8dFr2j1T2QqZuUL2IYm6lTvv/0gHw==, tarball: file:projects/arm-hybridnetwork.tgz} name: '@rush-temp/arm-hybridnetwork' version: 0.0.0 dependencies: @@ -15880,7 +15881,7 @@ packages: dev: false file:projects/arm-imagebuilder.tgz: - resolution: {integrity: sha512-+vGAgUGPlPSaN21fzMWrEZmx+AZWsdYRpByPeMhTwYhfVi4uzbdXyTpOVaMkxaqS0hhrxyRE5ZnYvwvcZT2dlA==, tarball: file:projects/arm-imagebuilder.tgz} + resolution: {integrity: sha512-bgOd8CWBMnqkGsqB9Uv7u6+D8ewJNMB7vGI8+jG9hqCTJ7kTWAZj/NsdyO9mou9sZoBx7hNjalnUfDbKeHK02A==, tarball: file:projects/arm-imagebuilder.tgz} name: '@rush-temp/arm-imagebuilder' version: 0.0.0 dependencies: @@ -15912,7 +15913,7 @@ packages: dev: false file:projects/arm-informaticadatamanagement.tgz: - resolution: {integrity: sha512-i2CziwTSBg8j5RhNjNmpP/LinKwwy3eyQT8oufZsfgw7p6jpIpxcs2P5Ra6DV5/pfBZ5/6esUY8Vqpx1kHYF2w==, tarball: file:projects/arm-informaticadatamanagement.tgz} + resolution: {integrity: sha512-8mCDe8/jbidJ8nwzpfnDp24JUTnvEDDIRwJUxzkWATcYLWkeCa/LssuPFJ5t3bgrF5bk190K+a7WSyp89LtoQQ==, tarball: file:projects/arm-informaticadatamanagement.tgz} name: '@rush-temp/arm-informaticadatamanagement' version: 0.0.0 dependencies: @@ -15943,7 +15944,7 @@ packages: dev: false file:projects/arm-iotcentral.tgz: - resolution: {integrity: sha512-S/L2FGlf085ipWUHAhJ3fvhYCWn+9KBXghnVsCz8AJd5xwinrBk8McdtTsufGvgeSstbi9jVJQeaxhpu9QGUlw==, tarball: file:projects/arm-iotcentral.tgz} + resolution: {integrity: sha512-2D521hNDRACnuDvTPLQnvWHGwJcrdZk4Fc5xijIOr+l3dKIJ4vTpKXaFVU/v4ft3bZcjJIjxLr9XnQ6f0KMnGg==, tarball: file:projects/arm-iotcentral.tgz} name: '@rush-temp/arm-iotcentral' version: 0.0.0 dependencies: @@ -15972,7 +15973,7 @@ packages: dev: false file:projects/arm-iotfirmwaredefense.tgz: - resolution: {integrity: sha512-roRyeym+QIWhzqB0KXnMiMldmUD966AITQr7wx++Gd1TH1Ox1CDg9UkGWvgqsRA4I7upSLBfJa8/931L6ZUMEw==, tarball: file:projects/arm-iotfirmwaredefense.tgz} + resolution: {integrity: sha512-KvY9/ulvRGT+nnUKLcZ4xvAJG/wayvAIeuMIBo4Z8CxClUkGIjwVTpsqiU3DkLRvnZ7U4hr2QPM9wxblC6oKTg==, tarball: file:projects/arm-iotfirmwaredefense.tgz} name: '@rush-temp/arm-iotfirmwaredefense' version: 0.0.0 dependencies: @@ -16000,7 +16001,7 @@ packages: dev: false file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-9p4Psf6Q7zHS4UWcwAAWgkXbRxQRTyu3HOqE7+7PKk4tkN0876cHgM0gSxnFoHXKnDscQhl2ZaXJyQjvRKUf7g==, tarball: file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-HlPbflppVL5rbwqZ+F7bUBcLakK06k+6JiwlZUuzq7W8hqekpCyM2Yj0isVZjIgsqnRqxUqWexTXg3Dx0rcH5w==, tarball: file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-iothub-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16030,7 +16031,7 @@ packages: dev: false file:projects/arm-iothub.tgz: - resolution: {integrity: sha512-GDWMfgWejcd92dDdM1KyoeNkpgyx4WSUxutN8swNawRNJYT5+79whhcu2qmd0RbxihyEXkl6eYd8t5oycIAiYw==, tarball: file:projects/arm-iothub.tgz} + resolution: {integrity: sha512-ZGt1udk09jEQyMeceUkptI04ybH2WE4G0Htafng6Vq2107kymYtHmgsZUuT/eZCXIRceVWEKyvmHpvA0lUdHlg==, tarball: file:projects/arm-iothub.tgz} name: '@rush-temp/arm-iothub' version: 0.0.0 dependencies: @@ -16060,7 +16061,7 @@ packages: dev: false file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-M5CO2jCGaHi06jeamT94/CDb/tg0XE803bfDDaMlnT2qymaapX5N5UVKhkvD5GAJwGRuNWFbfkmqrgh4e8am9w==, tarball: file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-FzMoxXhLTjGCraaNF0se2eYdVZ5Zr6fw0I28sCzEqFTOxJ1mGkWW5GWkIfSvNFLkvcQIyRPEwR4LgWK8fgFJng==, tarball: file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-keyvault-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16090,7 +16091,7 @@ packages: dev: false file:projects/arm-keyvault.tgz: - resolution: {integrity: sha512-GrAcYI1zUjT62D2FT7LSERerJlENsfhSU8lxob8JGELfBuR+55a2crllastCyE49Ztl996vo+mlxJEWgWniZ6A==, tarball: file:projects/arm-keyvault.tgz} + resolution: {integrity: sha512-4pdnv0Eksjyz3vyzcU1UJFHLfRIjCft2ZmldR7LGf8bUwQF7gkdE3G7rt0GqPuDrl6hHZjZbrKT89PEDQyYsEA==, tarball: file:projects/arm-keyvault.tgz} name: '@rush-temp/arm-keyvault' version: 0.0.0 dependencies: @@ -16120,7 +16121,7 @@ packages: dev: false file:projects/arm-kubernetesconfiguration.tgz: - resolution: {integrity: sha512-jZGiOFKHxeiWcResE29LFmwEB3zl41e1cJwpKXyhncUpQOPN4llbj0RqScgnTGee63QZMbZEudyIGeN/TTzg+g==, tarball: file:projects/arm-kubernetesconfiguration.tgz} + resolution: {integrity: sha512-HfU8LcbWaeQjuFlsEZv2AS2lUHPe398ZrqDdxyTTWgfwkBSLOiiUPJZsLy2ORuueY9ENCIocUwqE8BqQieQErg==, tarball: file:projects/arm-kubernetesconfiguration.tgz} name: '@rush-temp/arm-kubernetesconfiguration' version: 0.0.0 dependencies: @@ -16150,7 +16151,7 @@ packages: dev: false file:projects/arm-kusto.tgz: - resolution: {integrity: sha512-689AavaHrysNgAtoZ4Sm5uUWVGRLxBi8EcWu4/dBMnS0gJ/GAHJrSAmMABQ+qGxBzLfaX3AHvHcX+FhpG6CCmg==, tarball: file:projects/arm-kusto.tgz} + resolution: {integrity: sha512-ww+EgAkR+0hQ3d6lEMiUHxKoWGuJQTpjuU9cjxUyyOTgVD1vZFxi7BQdPeHrD5x7fbaOyqKYTcHygpOItL8v7g==, tarball: file:projects/arm-kusto.tgz} name: '@rush-temp/arm-kusto' version: 0.0.0 dependencies: @@ -16180,7 +16181,7 @@ packages: dev: false file:projects/arm-labservices.tgz: - resolution: {integrity: sha512-qwonIVw07NCdoojfY+fUQICI+OppdVZ+QzuBMv91fJKVR0Ol67AoMrNXtVkvKigwMa8mVjORLreT4ZEwrDGNFw==, tarball: file:projects/arm-labservices.tgz} + resolution: {integrity: sha512-kNvQmjKo4RehFKDEvTAKVvmNYkcgBrrgIrQ1E5DvbHtY5lWhQ5DET3EnsGdipwHUr+KbzvU3+nHE+w+5zG4yjQ==, tarball: file:projects/arm-labservices.tgz} name: '@rush-temp/arm-labservices' version: 0.0.0 dependencies: @@ -16210,7 +16211,7 @@ packages: dev: false file:projects/arm-largeinstance.tgz: - resolution: {integrity: sha512-iEjio4MLyEkQp+luSyvOyMT8a3q4GKbrtmq/ehi7zpk4uToVKEVuYyVylIRf4Eh+ciaLmxRroT5ruXw7MsFLsQ==, tarball: file:projects/arm-largeinstance.tgz} + resolution: {integrity: sha512-drD8yv8Ja+Z3dAmA4FfSBntGV8RMZ7OtIdx8F6TQFLgRtBjAEVKm9Hk/DvMlQJnv55qXXFHpYKWYgIrJZin+Yg==, tarball: file:projects/arm-largeinstance.tgz} name: '@rush-temp/arm-largeinstance' version: 0.0.0 dependencies: @@ -16240,7 +16241,7 @@ packages: dev: false file:projects/arm-links.tgz: - resolution: {integrity: sha512-rx7ZkivNlhfJW5ERvq1o12dC9jiOyGfU2g+UJsCvy/FV2ewjcgSwvHi9+iQ8DElgQNQaYvD2P0mTjbbo3Z8f8g==, tarball: file:projects/arm-links.tgz} + resolution: {integrity: sha512-M/ShkqTnPESJ7vHfHfToVqubiGCXA6oETnYcf1amuctOuJBD5aB5DzBlX6SJvVrwR0qLzCcKNlZYDBz0+GYmDA==, tarball: file:projects/arm-links.tgz} name: '@rush-temp/arm-links' version: 0.0.0 dependencies: @@ -16267,7 +16268,7 @@ packages: dev: false file:projects/arm-loadtesting.tgz: - resolution: {integrity: sha512-1Fdzhu000nxPJjVkKeDt7h1VgD1COGbOCkWpcxH3kPvyAKV8Egk+uYCcuPVye3PEymH50qMnsVnZNud0xAjVog==, tarball: file:projects/arm-loadtesting.tgz} + resolution: {integrity: sha512-szrfSA6Jv3cCx9CpIDzvbtNYahMosoUs+eyRwKTPHyUHtxB11eUqCuaOABEVwHnjKPogrndppPmKZkqLZPqvHQ==, tarball: file:projects/arm-loadtesting.tgz} name: '@rush-temp/arm-loadtesting' version: 0.0.0 dependencies: @@ -16296,7 +16297,7 @@ packages: dev: false file:projects/arm-locks-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-PtfNgc4B8DcUHVpn2xDvz21SRbkXdHwvEjX9D8daagbSHmnZq/JT5Vzg6jFaQE6oFt6uqNuA40DSNK74cGAtfA==, tarball: file:projects/arm-locks-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-1Z3p5AmPTCU65/lO0MAyXx8Tl3YiFhw/uj7pMocYHHx4/GSYtNH5dlYBv0gJL4qGQhTVQzhARrq9zyvpRKNbqw==, tarball: file:projects/arm-locks-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-locks-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16324,7 +16325,7 @@ packages: dev: false file:projects/arm-locks.tgz: - resolution: {integrity: sha512-b5vjzRQo3jKDsNupC/S8CnCszmbDkOkuYwkpdPt0D7uU9GiwdbpFOhkYMa61O/B3Ap5pQIaSzzBZS7zdiYJUaw==, tarball: file:projects/arm-locks.tgz} + resolution: {integrity: sha512-dz1Mi5cEB9bZsAFcfFfuvG5tWFxqSiG9YUMVRmziFB0zfpPVwfFRxr8KWKKE/n1zG2LWAI+7PCacwwkHDXlzzQ==, tarball: file:projects/arm-locks.tgz} name: '@rush-temp/arm-locks' version: 0.0.0 dependencies: @@ -16351,7 +16352,7 @@ packages: dev: false file:projects/arm-logic.tgz: - resolution: {integrity: sha512-Pipoi1SJt+gmNB0ZyyTKJIk4FP/dYea3LysN/bkM1mh1+dmKhelf9dWJOO/itjXgnjRaHCbnnEEPjHUlyKfU7A==, tarball: file:projects/arm-logic.tgz} + resolution: {integrity: sha512-jDteyY3Lc1svP9ii97wF1BgJrww5QmdWhGY37EKKAtwN+JxHVXQtKOn2rYuPVZ/0J/J2cZBhuLGPl4zdth6CxA==, tarball: file:projects/arm-logic.tgz} name: '@rush-temp/arm-logic' version: 0.0.0 dependencies: @@ -16381,7 +16382,7 @@ packages: dev: false file:projects/arm-machinelearning.tgz: - resolution: {integrity: sha512-4ouvVQUeU++VLv++AIepntQvXHoNspilDl3+v5hTFvHefl8PZCGRiL+NJhQTFGhkYnYQ48zwixOcXA2aWfCv3w==, tarball: file:projects/arm-machinelearning.tgz} + resolution: {integrity: sha512-wIB19ohpARdGZZUYL5WD6lZyYgSelyMW9YUfOiR+uYfN6G95+oWc7Xz3KDZuFSbJOXU3vSlqADtVbYBP3kPjOg==, tarball: file:projects/arm-machinelearning.tgz} name: '@rush-temp/arm-machinelearning' version: 0.0.0 dependencies: @@ -16412,7 +16413,7 @@ packages: dev: false file:projects/arm-machinelearningcompute.tgz: - resolution: {integrity: sha512-xFXNGqAGc1b3eizVo0MgSZGBmRCPCXVHSRC/ObP+mRfHvUT2Lu5Kelx5O3ZTUIhxdCj4xUiMGgfxVnXfkSjjzw==, tarball: file:projects/arm-machinelearningcompute.tgz} + resolution: {integrity: sha512-cvPobu+1EnIzvSHACDZwHFzpR8FR8Q5k52UgAH1h+8/vpH0g32MjaCg5nVblDD/OMDC28Fa15lKhzlEndKJMKw==, tarball: file:projects/arm-machinelearningcompute.tgz} name: '@rush-temp/arm-machinelearningcompute' version: 0.0.0 dependencies: @@ -16441,7 +16442,7 @@ packages: dev: false file:projects/arm-machinelearningexperimentation.tgz: - resolution: {integrity: sha512-P1txVffFiVlbcx/2GuMBAIreY6zs77rdkuPEX3vtHQ4ToA4MTJgVHRoCe8lRM+IvFdmxn8pq024J1QSe7F6Rjg==, tarball: file:projects/arm-machinelearningexperimentation.tgz} + resolution: {integrity: sha512-JkfrEtaqwMlSQ166826l623lc7UCNAm4k/3fUNDXtAjDk/2MxPye5cZfcqI9DIfKGaMa2PWbA61Sqlb2UvyCXg==, tarball: file:projects/arm-machinelearningexperimentation.tgz} name: '@rush-temp/arm-machinelearningexperimentation' version: 0.0.0 dependencies: @@ -16469,7 +16470,7 @@ packages: dev: false file:projects/arm-maintenance.tgz: - resolution: {integrity: sha512-k8RDoMl1Kuoc634KQfLEvmT/EWuVRqkA70dlsf+70YYPHLuP2KHmV7QMPrBYl4DrzPl6bHJdSaNcBlz64rGtLQ==, tarball: file:projects/arm-maintenance.tgz} + resolution: {integrity: sha512-rIM4/4JoWUn8S1hX1LWYlz5v+cGT46mxD7w0TZOFwU4UpZPJLUia+b4iVTrcpSYUftINi89WplW7bLm79Nnm3g==, tarball: file:projects/arm-maintenance.tgz} name: '@rush-temp/arm-maintenance' version: 0.0.0 dependencies: @@ -16498,7 +16499,7 @@ packages: dev: false file:projects/arm-managedapplications.tgz: - resolution: {integrity: sha512-F2MyIKu6zWhsy41KaNumSn02/LFa9IGX9lwdfTCEg3lJsN4azhyPjvHdH15gQ4HAp0+eOiSWldtkgDk/PLhHqg==, tarball: file:projects/arm-managedapplications.tgz} + resolution: {integrity: sha512-VyBqKlv/NSRFT9xpGm+ewqepHIbZwf/LALuoN5DQeZUixkCJt1BlyYIBX7k1n/kl1wW7qCf/qhUOipEb34AbPA==, tarball: file:projects/arm-managedapplications.tgz} name: '@rush-temp/arm-managedapplications' version: 0.0.0 dependencies: @@ -16528,7 +16529,7 @@ packages: dev: false file:projects/arm-managednetworkfabric.tgz: - resolution: {integrity: sha512-bPk5XVaEUO0zXb9yaW2Hj9Y/pG1iL/LYEO8nDpQgEHwuHCYeM/swIdmdr1Rst3Uo3zzN+/ew7zqZJ8QTPUHnFA==, tarball: file:projects/arm-managednetworkfabric.tgz} + resolution: {integrity: sha512-SzoO/ozeP+oX9qsmS03zRPTHJYfsHa9mXa9xbG30mvzBDZFnfftRUEeiizeGDw0qKyykllEVdTFLZ6tiPyPzkg==, tarball: file:projects/arm-managednetworkfabric.tgz} name: '@rush-temp/arm-managednetworkfabric' version: 0.0.0 dependencies: @@ -16558,7 +16559,7 @@ packages: dev: false file:projects/arm-managementgroups.tgz: - resolution: {integrity: sha512-Rwe6B3BbES8Hz0QVLsteOgXL/beMxNi107qlQGxbh30VHPzYLBtdccHPhwSq62QvbWcVyIPchcMACdgz1S0j/A==, tarball: file:projects/arm-managementgroups.tgz} + resolution: {integrity: sha512-oJM0IeWubpGBkUHv9B4FmE3B/EKI6I5IbB5IcuXIWJkgquYgDiKI1LyXEpqCGweU12i2vhZLbmEim9TtvjN9Rg==, tarball: file:projects/arm-managementgroups.tgz} name: '@rush-temp/arm-managementgroups' version: 0.0.0 dependencies: @@ -16587,7 +16588,7 @@ packages: dev: false file:projects/arm-managementpartner.tgz: - resolution: {integrity: sha512-kd3+k97PQpHgAfNIgJNBQ7TEIRXrwxZddxEErVl+rOCwRm+Y0AjSg/WtmaoMc87iY982AnTDg+HCSMQa4N8r6w==, tarball: file:projects/arm-managementpartner.tgz} + resolution: {integrity: sha512-OYrmWS6sAXGvoXO3+gJF37XBDlCRmaX94cV/bUlhdmVjI6Nb6mFchhk9/FMunTmL9yP6GLVGmclK30YafDI8/w==, tarball: file:projects/arm-managementpartner.tgz} name: '@rush-temp/arm-managementpartner' version: 0.0.0 dependencies: @@ -16615,7 +16616,7 @@ packages: dev: false file:projects/arm-maps.tgz: - resolution: {integrity: sha512-EBCgiitVtdwiTXYU+bQl8G8MMa87FBVnL6uxNK4Fve8hjxVJM8Rec1gT1VEIsBCoIRzEJDxxF3Cgtq+QnR7EDw==, tarball: file:projects/arm-maps.tgz} + resolution: {integrity: sha512-gGA7A8o8MoXMMVZTlk6DYqRRab/ImhHlcwVBhy8Zbdtgm82OStiA2nwSIHMEoP/j/TPXVC69dOBgBKy9OINK0g==, tarball: file:projects/arm-maps.tgz} name: '@rush-temp/arm-maps' version: 0.0.0 dependencies: @@ -16643,7 +16644,7 @@ packages: dev: false file:projects/arm-mariadb.tgz: - resolution: {integrity: sha512-oPXvkTJpAHzDYcEpsh5jc8zxUB6xLl0R/DrC5uzqq09dR4WZjEUsvb49nE/ze8xSQHfrlZCq6Q37Y5tzdapyNw==, tarball: file:projects/arm-mariadb.tgz} + resolution: {integrity: sha512-NxX/JPWcsKpqVcNevLOzMWdbX5YY64cnJLQSo552gyxrvodMDDGaXUjGuUYs8Cvg0uq9RfyI4HzSsQ3HmKp8jA==, tarball: file:projects/arm-mariadb.tgz} name: '@rush-temp/arm-mariadb' version: 0.0.0 dependencies: @@ -16672,7 +16673,7 @@ packages: dev: false file:projects/arm-marketplaceordering.tgz: - resolution: {integrity: sha512-DZVYIj3H/0DQkk5Ec0fk+1x/6aGAXv02onoajTw47sFlNgCCWKwI+4P6PmGpYhgqPM2GRCTrMATu26sdEn87Wg==, tarball: file:projects/arm-marketplaceordering.tgz} + resolution: {integrity: sha512-eAyFCBeDAL0u+NHvxr1WEiRELrncs/yZpo+96xVwrhzTiRcdXZcPsmgphyC2bXFGGbERzEOtZwBqSgnPmMd/wg==, tarball: file:projects/arm-marketplaceordering.tgz} name: '@rush-temp/arm-marketplaceordering' version: 0.0.0 dependencies: @@ -16700,7 +16701,7 @@ packages: dev: false file:projects/arm-mediaservices.tgz: - resolution: {integrity: sha512-izgi8ySNj+DWeqIV2fMh5pt/TwpjcUZ2gyS5IosZC4oKkqq/KMw90yefOJIIyAEFpCqLr8MkVQedaB7Db57R5w==, tarball: file:projects/arm-mediaservices.tgz} + resolution: {integrity: sha512-hbWekKUIaEOXaCzofT8MT65BLUmMcKu8rsRCUxoa21lclSe117zoq7vxMEFeznBKByNcgGPvG2rdNVEN85iIlw==, tarball: file:projects/arm-mediaservices.tgz} name: '@rush-temp/arm-mediaservices' version: 0.0.0 dependencies: @@ -16730,7 +16731,7 @@ packages: dev: false file:projects/arm-migrate.tgz: - resolution: {integrity: sha512-tNfNYYzMi1DCwbUKPK3B4z9hmQtSR60MQSJj5pNAowb/UPtUBNVwed87bsa9bTY+Qxifn4MGG7mbCT1IwQofZA==, tarball: file:projects/arm-migrate.tgz} + resolution: {integrity: sha512-X+PG3Ezc3WM5hZeyK40diE6lMIg2Vro+B3POXyhNdMuIq6COIArHyDjBL9lkzJzxjfrcTJFxZN7LsVfgM10L9A==, tarball: file:projects/arm-migrate.tgz} name: '@rush-temp/arm-migrate' version: 0.0.0 dependencies: @@ -16758,7 +16759,7 @@ packages: dev: false file:projects/arm-migrationdiscoverysap.tgz: - resolution: {integrity: sha512-BcJQ89TKzElrIiaXh5YtgDhk8X+lwrl0BIiKJz2QUhpR9OMg3mjj4eq/oS6JoOCcNDKOxjRSCpXx6HywG1L5vg==, tarball: file:projects/arm-migrationdiscoverysap.tgz} + resolution: {integrity: sha512-PMEHA8wqOUylWp3e5/q/9Q893e03qKcdf6KTultwod0lvLI6jDmwMNiuaSimhX7arDFLqj6U+dOi0BCOcAN2yg==, tarball: file:projects/arm-migrationdiscoverysap.tgz} name: '@rush-temp/arm-migrationdiscoverysap' version: 0.0.0 dependencies: @@ -16788,7 +16789,7 @@ packages: dev: false file:projects/arm-mixedreality.tgz: - resolution: {integrity: sha512-gbmVTEZBfQMTMyy8mxsSd4vbEtMEO3EFJcj/OUDqULJ4lWWF98X+jm26tAjZegg6TBJfa6ADf4rzbB5r3fKMkQ==, tarball: file:projects/arm-mixedreality.tgz} + resolution: {integrity: sha512-ASiwxu/fX6hMzgTxmlZte0kmuDc3ppE+XwF9sBx6WhGwZ95mvXA5x/z5bmIz5TIHCsbsj4Sma5jUfhuCFoUE5w==, tarball: file:projects/arm-mixedreality.tgz} name: '@rush-temp/arm-mixedreality' version: 0.0.0 dependencies: @@ -16815,7 +16816,7 @@ packages: dev: false file:projects/arm-mobilenetwork.tgz: - resolution: {integrity: sha512-bqG6WdkfosSkD/X4uHK6ajyxmEYfat5nqT/eM7Ts/S7agguMOYEoMIi7sV7Tl8b+aLpg8H+jIzOtGPiXC4Jj1A==, tarball: file:projects/arm-mobilenetwork.tgz} + resolution: {integrity: sha512-S4QWyu/vDNk0qYgLlZ3ckB0f5yWIiQousINAxVAwb5w1hLzQEQUi0eHRsWH4i12w+0do+ljeZs60lbQQOE1NqQ==, tarball: file:projects/arm-mobilenetwork.tgz} name: '@rush-temp/arm-mobilenetwork' version: 0.0.0 dependencies: @@ -16846,7 +16847,7 @@ packages: dev: false file:projects/arm-mongocluster.tgz: - resolution: {integrity: sha512-EU8WPXxVnF2TP9sFdHD+Fhu0oD4WBj2gtulPY6pw393PtU2cp7IyaeETiBLyH2xxw4WRCyX1pjtNxADgOWpq1g==, tarball: file:projects/arm-mongocluster.tgz} + resolution: {integrity: sha512-C+Fh0CPft28MXX2huCTJ6UMZoBvu50cB2jlvAaHN0EsOCRHSgzeT3L7RkqgxlRsMypTy4aa3msN080B5T0KIiQ==, tarball: file:projects/arm-mongocluster.tgz} name: '@rush-temp/arm-mongocluster' version: 0.0.0 dependencies: @@ -16887,7 +16888,7 @@ packages: dev: false file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-7ZbHeBibWftYjaS1Fy0HXDIV6LW+N7gTGaiK9xPDpjcddK1DpEIugafR+4RT0DEk0wS0ylw5QbQp0oj36AuLzw==, tarball: file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-HzvtT7qE7U4Vo+PcyT81nFJimStPVz/QlFX1zpPCUe4ITFcfkUG7aDq+RVBIsxTqM/Z6zk8EUtGxWXBGvUw01w==, tarball: file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-monitor-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16915,7 +16916,7 @@ packages: dev: false file:projects/arm-monitor.tgz: - resolution: {integrity: sha512-VFRPZvLJgTamF9gOc9aX+H91ea4FYBOqQEWOeOVJTHBmKpprA78gwuo8fgpjrMfGtbHUyyQxI+9m4OGdcJXJ8g==, tarball: file:projects/arm-monitor.tgz} + resolution: {integrity: sha512-7nScovV8V7ac2slSpxrc5PYOsBR3BLC4SM/KzX3P+8TycaL7oWPa8wesWwlzDweodoSX7yIdBBKH8FlyKLl+1w==, tarball: file:projects/arm-monitor.tgz} name: '@rush-temp/arm-monitor' version: 0.0.0 dependencies: @@ -16945,7 +16946,7 @@ packages: dev: false file:projects/arm-msi.tgz: - resolution: {integrity: sha512-Ul24fzYggBiK/aamwNjY085iYv+MBXLFuiJ+dnYgcA3y+/a5B+qhmFW83H5inn+OwToTpZgUfbciPALRKrwuCQ==, tarball: file:projects/arm-msi.tgz} + resolution: {integrity: sha512-IIWfKkRGHTC1IXVsDV3w5LCThHnvmW62ewg+JXh0yMHVfiLs0NzD9vGFnCqdMNp9MQVihZjSF9+A/jZvWkPjow==, tarball: file:projects/arm-msi.tgz} name: '@rush-temp/arm-msi' version: 0.0.0 dependencies: @@ -16973,7 +16974,7 @@ packages: dev: false file:projects/arm-mysql-flexible.tgz: - resolution: {integrity: sha512-Hb6Q5S2NJFruSASGGfdUDhiUqQteOb3Es8RtR0u+j3qCuP+1k2ntvMuY5O9lnU1F4IuHyXwjOwT8jKVlFH3Hzw==, tarball: file:projects/arm-mysql-flexible.tgz} + resolution: {integrity: sha512-P9Jts16lwQxytRTSza3261Xj8bs3MgiF2mtK4ibvP8C9POS05NHupzEPob6bzrOfSWlc5STL8JOMMduiDPtB4w==, tarball: file:projects/arm-mysql-flexible.tgz} name: '@rush-temp/arm-mysql-flexible' version: 0.0.0 dependencies: @@ -17004,7 +17005,7 @@ packages: dev: false file:projects/arm-mysql.tgz: - resolution: {integrity: sha512-HWgmW0VWX/2hz+miS1302KiQ0Ohv6CeieppfQ+Hw6mZS9nUT2Yh17zgMGryzLYitj3yKCOFuFTlOZ+HVBST75g==, tarball: file:projects/arm-mysql.tgz} + resolution: {integrity: sha512-DDxg9P/mJWZ19rI6y9gMoEHcu/7uWcuvm7P1VKCuUjYYhJQGBFnQRBWLZwjwTL3JA218aA3bvdAk1EIjTw6RFQ==, tarball: file:projects/arm-mysql.tgz} name: '@rush-temp/arm-mysql' version: 0.0.0 dependencies: @@ -17033,7 +17034,7 @@ packages: dev: false file:projects/arm-netapp.tgz: - resolution: {integrity: sha512-XN/TOI9+um6TqZHjNR8Ev/toefYj+8oJXGMFEPc1fPtGEWcFFqg7fQfqd3rOPzhUhK+vq/LBc2jB2Gir856lmQ==, tarball: file:projects/arm-netapp.tgz} + resolution: {integrity: sha512-j8W66PF6exlFOnA4gK5gY+EZo26W1l35XxbR3DH9yCeIRIjv4iPFGGYNDOTWaRpWk6v/lelLa5VUm35dw6jH3g==, tarball: file:projects/arm-netapp.tgz} name: '@rush-temp/arm-netapp' version: 0.0.0 dependencies: @@ -17064,7 +17065,7 @@ packages: dev: false file:projects/arm-network-1.tgz: - resolution: {integrity: sha512-B/QAfq7A2656Gqn0xVUjwr3EfGi2mYGDRDy9Z/TC3jzxQVYXKTMJJ0X1MEkyypK20XmoJlVoqgNoNP/UbNx/Iw==, tarball: file:projects/arm-network-1.tgz} + resolution: {integrity: sha512-P6v6Y6MPKekCBz8tVkLHXb8cHO4JTuwSDWMh7nKIzZVb4eys17p7AfSxY87s1M8A3pUV1qxWDT6fZMUakKIgSA==, tarball: file:projects/arm-network-1.tgz} name: '@rush-temp/arm-network-1' version: 0.0.0 dependencies: @@ -17095,7 +17096,7 @@ packages: dev: false file:projects/arm-network-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-bnCH2UpFCvtz4BMccjYctwW+YNUvNkK/GVMIhEQ3LhVWBKG1toiymnCbGtNUlFBotgnzqon+gogntWaAH2wdog==, tarball: file:projects/arm-network-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-JLZmbYruauNf5jAw8reAwOW4SUnoeOW3rNZ62Vsfmxk5sIswrDIWE735tQmN1Gjyrfhjq5+7EuwjGBQPHHmhYQ==, tarball: file:projects/arm-network-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-network-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -17125,7 +17126,7 @@ packages: dev: false file:projects/arm-network.tgz: - resolution: {integrity: sha512-3KE8yHpRjIWjQ3MCIYCe8r2i5UHgEsZ99r57eLuqUaXbWwMVK6JhX1uEQZZJ6aQU31A2nI3rRt8JhdfaguwtUQ==, tarball: file:projects/arm-network.tgz} + resolution: {integrity: sha512-Xyjtn9FDQI1SEQ64xoXelZxs1P+6+TGkFN4KG8Wi6QyUjzKKGyFyT1fCGCkZUlu/ypmjUioU9EWVVderM9TBTw==, tarball: file:projects/arm-network.tgz} name: '@rush-temp/arm-network' version: 0.0.0 dependencies: @@ -17172,7 +17173,7 @@ packages: dev: false file:projects/arm-networkanalytics.tgz: - resolution: {integrity: sha512-AMCqp/mzss3Oksp0yhUjMM5/J51sk0E1481GjeL45AGtBoJrTlzvlGLFZDHEyNESEoJtbAyqkumeC52L2wpTMw==, tarball: file:projects/arm-networkanalytics.tgz} + resolution: {integrity: sha512-UoysNevuv0w7CTk1AuE3UH7xiDMa/+CieOAJWClYhD2aAIutEnN78yck5/106N96Qi72JW1SsDz+wAJOBzQYRQ==, tarball: file:projects/arm-networkanalytics.tgz} name: '@rush-temp/arm-networkanalytics' version: 0.0.0 dependencies: @@ -17202,7 +17203,7 @@ packages: dev: false file:projects/arm-networkcloud.tgz: - resolution: {integrity: sha512-8h61VDXkOPtIMZT92EqmVtbZ89phYJWTVGzUUh8SdQZbTxT+zRQQGfK8Eca+/fzv9AtEXNAcgizxuJDgE4L+fg==, tarball: file:projects/arm-networkcloud.tgz} + resolution: {integrity: sha512-+QylFC+YcqMdK5//WrecbK1Gr3GBySi1WStnR6nxbBqAYMqbN70rbqZwYEbxfkPTFQ4N8+3wyAiuzqsYRPVkaQ==, tarball: file:projects/arm-networkcloud.tgz} name: '@rush-temp/arm-networkcloud' version: 0.0.0 dependencies: @@ -17232,7 +17233,7 @@ packages: dev: false file:projects/arm-networkfunction.tgz: - resolution: {integrity: sha512-xGDdVNtxzfzWZM0HeWW/0FkSVaaZWg45d9NYyU3OoaEfL+mFJjO1FWfkaPtUCz9d5sRpUmu9ylX/FDuPNlfxzg==, tarball: file:projects/arm-networkfunction.tgz} + resolution: {integrity: sha512-4WbYQp6T3We8oP9VALcEjkRGYzSlghVKAjRMM8gDcjaU5oHG5MoshluJKBA47ayAp/rFxaMuXIx6sIVOoDoUFA==, tarball: file:projects/arm-networkfunction.tgz} name: '@rush-temp/arm-networkfunction' version: 0.0.0 dependencies: @@ -17261,7 +17262,7 @@ packages: dev: false file:projects/arm-newrelicobservability.tgz: - resolution: {integrity: sha512-dRpg7cKC+2E656IvoUXS8i8eKvPdnMzUhZXWK5j3rxcci6FsGJY6UFNzattYWlzsSLm0TX9GXa6PY3Fsx0kqGQ==, tarball: file:projects/arm-newrelicobservability.tgz} + resolution: {integrity: sha512-TAiMv0k21/jqXxppRbMs/07ZSLxW6IRwJBQhlKEcJHNsmHo6rCHMO4hExMHorI0DL/V+FtRE7qN7KpJbCd4J0g==, tarball: file:projects/arm-newrelicobservability.tgz} name: '@rush-temp/arm-newrelicobservability' version: 0.0.0 dependencies: @@ -17291,7 +17292,7 @@ packages: dev: false file:projects/arm-nginx.tgz: - resolution: {integrity: sha512-/LFuCke0zDXDreTFsY8iqwAgRQmRDlHqyCTNayy/NEKj6qhnnyAJ6ygX9fZrT7LQsyt5CLqSlMIpLypP6CssMw==, tarball: file:projects/arm-nginx.tgz} + resolution: {integrity: sha512-fz7Oa6r1GrMB6FkjOCZiQb0jQB+dsAIpnTUFCLbY5XuFPrbk6oY7YbhvkHv0X3aTgdMpr0/6ijbBeUvshAmlww==, tarball: file:projects/arm-nginx.tgz} name: '@rush-temp/arm-nginx' version: 0.0.0 dependencies: @@ -17321,7 +17322,7 @@ packages: dev: false file:projects/arm-notificationhubs.tgz: - resolution: {integrity: sha512-iohnXTKeTHXjvms8pHA/brn67wnhYD8wS/Xn/ZXltAKgqyuijgCy69XluhgoMGezraecwxKJF0WTYa92wYlelA==, tarball: file:projects/arm-notificationhubs.tgz} + resolution: {integrity: sha512-uBK2r4DcUzLlfgjUJAMwPWl56L9/3C3vUoWT9Dzc85hHRaDbZ3zXkm1YezjfG53EKul0v2Qx6LIgh7gyrCLn7w==, tarball: file:projects/arm-notificationhubs.tgz} name: '@rush-temp/arm-notificationhubs' version: 0.0.0 dependencies: @@ -17351,7 +17352,7 @@ packages: dev: false file:projects/arm-oep.tgz: - resolution: {integrity: sha512-ZpvScUYsP9hlnaO0yleIKfha0MlZh+M20p6SoWvBDyZE9DQvBDWrm0q7yncdOFHSV9B+veYr+u/uJOfunxAviA==, tarball: file:projects/arm-oep.tgz} + resolution: {integrity: sha512-68IZIrAoTKTUqRVI8yPpUV+ewzjaojHal2DKCtmBDZHSoKt0G2V5SoWb+S1qEqkqKvgI8KrNBuh4P4TcffZLmQ==, tarball: file:projects/arm-oep.tgz} name: '@rush-temp/arm-oep' version: 0.0.0 dependencies: @@ -17380,7 +17381,7 @@ packages: dev: false file:projects/arm-operationalinsights.tgz: - resolution: {integrity: sha512-s5Oa9UF+YPYurQ+0sMmRDJ8xU3ovkTbPeHXCuY1nCA3AYHcWiBru8e0SHp69foSXKiekKFIeN7XnXJCZvmywXg==, tarball: file:projects/arm-operationalinsights.tgz} + resolution: {integrity: sha512-/XQzuFwq99V3AsA68kZ3NLjhHcvQF2+i3CZKbJdtHNyJxn+VxtieY4ojqvyYSpJXRPrFNmBE0EaZiFZ+N2HmfA==, tarball: file:projects/arm-operationalinsights.tgz} name: '@rush-temp/arm-operationalinsights' version: 0.0.0 dependencies: @@ -17410,7 +17411,7 @@ packages: dev: false file:projects/arm-operations.tgz: - resolution: {integrity: sha512-cjBWW26Ng57CJVzL1DtmPQ2t/cSth4WSa2DVfPLqwo8PYv3elfyQZzU9YOkPYThI3MIu2qJSxOJHP4/UClRFDg==, tarball: file:projects/arm-operations.tgz} + resolution: {integrity: sha512-Nyj28Pu9y21IA9herds/9S0UQYh33wTNsML2Vun7fHv8DzSpekiM2TYnWKCwpr1k4sdYvv0PHQ0MOTmcJ1+eig==, tarball: file:projects/arm-operations.tgz} name: '@rush-temp/arm-operations' version: 0.0.0 dependencies: @@ -17439,7 +17440,7 @@ packages: dev: false file:projects/arm-oracledatabase.tgz: - resolution: {integrity: sha512-ziIpJE4cTtp3oY4BKF2JgTUrWKC9MNg5xklCx4/G0tpl+QPN6awzWMGDN9QaTRQ1Nz1og8udbI0JG14AUNLnMg==, tarball: file:projects/arm-oracledatabase.tgz} + resolution: {integrity: sha512-HZUyn2gZAaz1Pambusqc+xa/XX/mSlFW/Azm675ZTzqMSqcRjltj+YCxlk1WJQ5H5ZCRqCRkdvvJMFHgUJUTqA==, tarball: file:projects/arm-oracledatabase.tgz} name: '@rush-temp/arm-oracledatabase' version: 0.0.0 dependencies: @@ -17470,7 +17471,7 @@ packages: dev: false file:projects/arm-orbital.tgz: - resolution: {integrity: sha512-HAdb3COvZSqWD+NXXexZDJ6AjPNmAZVTb9+R3upw7MGLqDcvKNMd1BR3LbbO1UA7v4f/ddATSjqnD9BLEJRQxQ==, tarball: file:projects/arm-orbital.tgz} + resolution: {integrity: sha512-rR2NWOdcCvMjBSc7BbfuDvrhH2G0QKviWKNS2qAkFvN191f+bqPcdk8ZR1Q+4P8XhBqxPmo9TG8qyhdWHYFJaA==, tarball: file:projects/arm-orbital.tgz} name: '@rush-temp/arm-orbital' version: 0.0.0 dependencies: @@ -17500,7 +17501,7 @@ packages: dev: false file:projects/arm-paloaltonetworksngfw.tgz: - resolution: {integrity: sha512-WXwwttbkTUsPOKZ8KFcONkyzCIn0hBCaUBOcMa4RkeOVlBHaumxVp0148S9KE0zT7uhASVsmvM0qS1HdKM66Uw==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} + resolution: {integrity: sha512-s3HioPqb7gwPpSCFHS7W8ryXo9jmAMuzbgATE7/2S6dYQ+IKyRj1lN/nki/j4EEJtav2k5j90tzus08q2GTd9g==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} name: '@rush-temp/arm-paloaltonetworksngfw' version: 0.0.0 dependencies: @@ -17530,7 +17531,7 @@ packages: dev: false file:projects/arm-peering.tgz: - resolution: {integrity: sha512-fSqJdXzWVuMLGhCtsrarwl6OiM6LOEiVdPLuKPrnlv2U8SJrCHVl18tf12gKxiM+Qy1x54EVg7SsqssHiCrYaQ==, tarball: file:projects/arm-peering.tgz} + resolution: {integrity: sha512-f+AFNpdQZ4Z3yQqr8ZgaCwqa692flWfgQD7pjMyEn6v3VSw2S6JG6NjBWX27QDvMFCs68HELlLHSHM6ZFRPk7A==, tarball: file:projects/arm-peering.tgz} name: '@rush-temp/arm-peering' version: 0.0.0 dependencies: @@ -17557,7 +17558,7 @@ packages: dev: false file:projects/arm-playwrighttesting.tgz: - resolution: {integrity: sha512-nUWyCeuYSpTQzmokXguADCYg2atdidXLGKhxSjht+tCCv4dPRvD8Ew9sjIoWOW2M2gSFo3JRtwJ5mDf9hqCT7A==, tarball: file:projects/arm-playwrighttesting.tgz} + resolution: {integrity: sha512-ZQjUMOohvWsMYYSWPuZKW7mN20dfdpOfzA7SRb4dmlMPvxUL5FYGNlpl8IRVt8xWKYprxhtMxVBsHtCGqEp93Q==, tarball: file:projects/arm-playwrighttesting.tgz} name: '@rush-temp/arm-playwrighttesting' version: 0.0.0 dependencies: @@ -17587,7 +17588,7 @@ packages: dev: false file:projects/arm-policy-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-c8WuNzmDkYA8+4tTfAsRs4McBwF54jiXzPkDf8UsHfb7xGPMwKrYa8U9nblDFbgR7Hte13G5CimBzcgmpCsi4w==, tarball: file:projects/arm-policy-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-OZ8MTL6GxXP/ZneIKRGcr80kINASAsgIjcg2fHxZtkUZH5TH4JPEjuHFagZ0MByacU0t66iZERDwn3gcWJuEdA==, tarball: file:projects/arm-policy-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-policy-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -17615,7 +17616,7 @@ packages: dev: false file:projects/arm-policy.tgz: - resolution: {integrity: sha512-TikMnJT90/hTLWuLKk6RJ+oCi0WrNmgDcAkaiK8tHdFxFNIwYZM8MxWKDsiTiwuavvOBzYfH3Mituct/0ms1wg==, tarball: file:projects/arm-policy.tgz} + resolution: {integrity: sha512-S+GzCiPK6HX/0lTkjaRpCy03c3kT9lGY3+ZxU/F/92OapIDzSFVFNUny06b1BfQPmg9v61vIf4xqga3i3Gk99Q==, tarball: file:projects/arm-policy.tgz} name: '@rush-temp/arm-policy' version: 0.0.0 dependencies: @@ -17643,7 +17644,7 @@ packages: dev: false file:projects/arm-policyinsights.tgz: - resolution: {integrity: sha512-oOT8OK3YGCj4z7xDVUbC0XgAc73YBSMMtmGIZjtR/kGA3FA8H8F4RN/1QiHT55aqm0hAL6wHJwFVricLaQg+4A==, tarball: file:projects/arm-policyinsights.tgz} + resolution: {integrity: sha512-dAv5NkASdcbI/jhOjA5IzfqQCGGA/uLTDCq1ely1jyJwXbtSoVaY6P5doNX/f68zbGQp3iW3mW48w+SBQOfdLg==, tarball: file:projects/arm-policyinsights.tgz} name: '@rush-temp/arm-policyinsights' version: 0.0.0 dependencies: @@ -17673,7 +17674,7 @@ packages: dev: false file:projects/arm-portal.tgz: - resolution: {integrity: sha512-SgVl8z5EciLmuKKXvedWFz+Aknx6rakUvLvKwiOudTPIuL/c6uvwc3MBKO4mT7gMO0oid891yEL499/AEbh4cg==, tarball: file:projects/arm-portal.tgz} + resolution: {integrity: sha512-GTgTCV+m/TYwrvbyTI7qSMK1jvDtmwh41idgAqWVTRzMIwWa1TGSQ/626YPREt0V0JvNfidP+BrTu3M8MMpYNg==, tarball: file:projects/arm-portal.tgz} name: '@rush-temp/arm-portal' version: 0.0.0 dependencies: @@ -17701,7 +17702,7 @@ packages: dev: false file:projects/arm-postgresql-flexible.tgz: - resolution: {integrity: sha512-ldF16x5gZHIJLjf+ax9P6OVWHu8UxFnzMETfdji8fmlPeJlQeFDu2/rA9sneMG/6zAtEhBRNlynI9xanzEPiJA==, tarball: file:projects/arm-postgresql-flexible.tgz} + resolution: {integrity: sha512-+xkEamzzAMZNMr7Nns+hTSm3xsPppbHh99xg8gCbVIHhTghl1G03b0v+E/gkzGj+g9fhuXrREXUowN3SloLz8Q==, tarball: file:projects/arm-postgresql-flexible.tgz} name: '@rush-temp/arm-postgresql-flexible' version: 0.0.0 dependencies: @@ -17731,7 +17732,7 @@ packages: dev: false file:projects/arm-postgresql.tgz: - resolution: {integrity: sha512-O2SnzZstsFG3Xmribf2Y20M2B2eEK5CiWiUBAuvZaPzOV7HAd4jF5BuU5UQIgw+M2MtHEtqn/yh3YQismDNhVQ==, tarball: file:projects/arm-postgresql.tgz} + resolution: {integrity: sha512-eGaMPRDBUrkQ7BkRgHghRvh1Pb/nLEa8+IYtLbAHF7LXfKs//EiTU/0yg0oyU+NQjDdJCt9X1KK6u3FpBfR8ZA==, tarball: file:projects/arm-postgresql.tgz} name: '@rush-temp/arm-postgresql' version: 0.0.0 dependencies: @@ -17760,7 +17761,7 @@ packages: dev: false file:projects/arm-powerbidedicated.tgz: - resolution: {integrity: sha512-D90FPKOypB4s4HDD35w6H9sdwHHmlDxJ3jqVzHg5BR2A5xl+JeWKEu4ka/QDYHWxu6tlfQgdBq4qMVu94HJ9Ug==, tarball: file:projects/arm-powerbidedicated.tgz} + resolution: {integrity: sha512-LRrWD48x/bNFmasTDKCOl4Wq9TgAV7fPqJWPRIbaeMqmljIILlOqzjQTCWupt7wcqI+20UQIKHsU4lsH2H9Uww==, tarball: file:projects/arm-powerbidedicated.tgz} name: '@rush-temp/arm-powerbidedicated' version: 0.0.0 dependencies: @@ -17790,7 +17791,7 @@ packages: dev: false file:projects/arm-powerbiembedded.tgz: - resolution: {integrity: sha512-T9wzorSGi8GjH0TVike594OhHpvhfDQzGi6f8I/tnAGkaq9k3EFriB1wGXYnRjcZxRA/JhIXSkWnrt04wMXt+Q==, tarball: file:projects/arm-powerbiembedded.tgz} + resolution: {integrity: sha512-rrvuHwyQcDNx6BAODw2EfMNlTvtuhaZM7TqPaSCRIECXuchO/WLPvxL6rnvdSgfic5WJ4PqBwQWm0DUbTymN/g==, tarball: file:projects/arm-powerbiembedded.tgz} name: '@rush-temp/arm-powerbiembedded' version: 0.0.0 dependencies: @@ -17819,7 +17820,7 @@ packages: dev: false file:projects/arm-privatedns.tgz: - resolution: {integrity: sha512-RzimUaRpfRNNsP0IEU2H/kSdXPtBTVQpz2/O41Qm4xeb4NtI6/H/vjyfBjm+9Ifuv+9nNFHMcqC0qpamze0wSA==, tarball: file:projects/arm-privatedns.tgz} + resolution: {integrity: sha512-eOpU54Xe7vDeQ9bvgw6bILjt2lKG8IxMADgclBjt5XkCSfcv7hKEGlwuuP5gLAczwTl9tk2mgjYSpEJ4BDuB7Q==, tarball: file:projects/arm-privatedns.tgz} name: '@rush-temp/arm-privatedns' version: 0.0.0 dependencies: @@ -17849,7 +17850,7 @@ packages: dev: false file:projects/arm-purview.tgz: - resolution: {integrity: sha512-x5M1dS34o72cq4BsMCm8035t0CB6GPLoz1/3R5q2ylISblgjeiZyZX5V9QYDZMidqffL/VPhscaXaXGU4lgY2g==, tarball: file:projects/arm-purview.tgz} + resolution: {integrity: sha512-PUe5Dr/BGLMCRzMRlNiBjcbkqfMpnhBE3DZfdBv/tku5bU88G6KHq8OFAyJ62tYWqb87Wg8LpXDXRfJWrI70SA==, tarball: file:projects/arm-purview.tgz} name: '@rush-temp/arm-purview' version: 0.0.0 dependencies: @@ -17878,7 +17879,7 @@ packages: dev: false file:projects/arm-quantum.tgz: - resolution: {integrity: sha512-L94Xm9u4VwYYuPqF1oo6Fg3P5FbFM1/2eFkG6B37Majvb6r8hbO/BmQtC2D1rAmQm+XPNLKE/EA8gEysCPVsVQ==, tarball: file:projects/arm-quantum.tgz} + resolution: {integrity: sha512-90Jm7U1UNPrD2nJyW6irsrgNBiAuul6Ng9bHTzkW1vZkmCFV/Jy2h2LlEatMhJB/qn7UI/I2Hgl30as/hjFsZA==, tarball: file:projects/arm-quantum.tgz} name: '@rush-temp/arm-quantum' version: 0.0.0 dependencies: @@ -17908,7 +17909,7 @@ packages: dev: false file:projects/arm-qumulo.tgz: - resolution: {integrity: sha512-93s0NqKkdoyB2+GH4GyjLZty0T1oeXMERf36tjloyDiGDvIEoxi2Ri0Ke601onOKbRRXsfqNiw6Gb8a630fLNA==, tarball: file:projects/arm-qumulo.tgz} + resolution: {integrity: sha512-wrPRZ7OSOkCHxNLPg6ETrQ/CrYpXETWjxefVX2rsLsoIfwU8NnnudhcVuoBUewoSBkbk1whuOBX++ps7d+KHpQ==, tarball: file:projects/arm-qumulo.tgz} name: '@rush-temp/arm-qumulo' version: 0.0.0 dependencies: @@ -17939,7 +17940,7 @@ packages: dev: false file:projects/arm-quota.tgz: - resolution: {integrity: sha512-g5xHMxPMVPEOEYNOoR9ZpxY7piO4tM7SrXvllyYrJ27gFJeOzJa06ySdE1Bf0tq23xI2poOFt+RBUHkl6nRK6w==, tarball: file:projects/arm-quota.tgz} + resolution: {integrity: sha512-Da+qEIKvkxF6EmBgF1bdo3xNiAswOb+e3qvmqxB9fDFjL/LfELEHyabN9V8NCgMVNIE41fw3/V2E6hOxj68JRg==, tarball: file:projects/arm-quota.tgz} name: '@rush-temp/arm-quota' version: 0.0.0 dependencies: @@ -17969,7 +17970,7 @@ packages: dev: false file:projects/arm-recoveryservices-siterecovery.tgz: - resolution: {integrity: sha512-Pk09j+7M6/NbmC1NAEwiMcgFBo79h65ZhrZYaRB0jaQMn1lBjILPnlXWiHIho+5pjp+FY79I/WHP/TVBkeY3Rg==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} + resolution: {integrity: sha512-3YmQDRQ0RU8q3CEeViyd0F7uo1QONvC7EAAUp2GNrj36ubHAxanoLwvsK+Q8sZYAUrri/xHi1sdsdoccMgZYng==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} name: '@rush-temp/arm-recoveryservices-siterecovery' version: 0.0.0 dependencies: @@ -17999,7 +18000,7 @@ packages: dev: false file:projects/arm-recoveryservices.tgz: - resolution: {integrity: sha512-JuNcfEsRUQn5xB+oobUVmJi6AYH+VuM+Zf0NsI+LRpUNUMEGtQ3E7Inui+qap75dVhlSVcx8mv8/ubsEZv9FnQ==, tarball: file:projects/arm-recoveryservices.tgz} + resolution: {integrity: sha512-aGZqv2Es3GWdq6otQcr2HEGL13nviNR6t5LclTlAm9C7mSDfHX7sVfBgUWdI8h2XUooZ9U98nEjBBPejGl4Fog==, tarball: file:projects/arm-recoveryservices.tgz} name: '@rush-temp/arm-recoveryservices' version: 0.0.0 dependencies: @@ -18030,7 +18031,7 @@ packages: dev: false file:projects/arm-recoveryservicesbackup.tgz: - resolution: {integrity: sha512-ofsVsYgA+49rgLOm0lBnjBuquR/EJrR+ZVjHsuzkQghHvIND54mVjsgz79/bTmEnezcxJoB/FsHZr9kUjruOBw==, tarball: file:projects/arm-recoveryservicesbackup.tgz} + resolution: {integrity: sha512-AZe2jKXj/q0Jcljzfw6897HNX9ycP+TOSQl3z8izvmwCtYI2EKVHVs6KT9nkW23+E3j3X2q64fKor0XCtGLHEA==, tarball: file:projects/arm-recoveryservicesbackup.tgz} name: '@rush-temp/arm-recoveryservicesbackup' version: 0.0.0 dependencies: @@ -18062,7 +18063,7 @@ packages: dev: false file:projects/arm-recoveryservicesdatareplication.tgz: - resolution: {integrity: sha512-bpjylD8w0G2NeSGWADWw44UyKxgJzpwFXhmdApVr9IqyBLmUjjQaFpv/1ygnQ0JrezXrk1Fwks3QuElufP4k6g==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} + resolution: {integrity: sha512-tS4HVmuGAkIWY4SSgaprvax+JOdjvNd5Qjp3J3NZ38dP+EovJaLMM5PdiibJPg9pNg5PcuEyDyQguzO5/cJEOA==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} name: '@rush-temp/arm-recoveryservicesdatareplication' version: 0.0.0 dependencies: @@ -18092,7 +18093,7 @@ packages: dev: false file:projects/arm-redhatopenshift.tgz: - resolution: {integrity: sha512-sAXqI3ZOkg+1mLcHINlbDdfxyC37H0GRRew0jrQXYqS2Cbb8I58c2/scsbpXBJ/oDwdL+pd5WJQKl3gDr1ZQyA==, tarball: file:projects/arm-redhatopenshift.tgz} + resolution: {integrity: sha512-nmTDnTBfI+Wiz9lbnEo/K9o/YJ4969WxFny4epZ31rpvTqem9h+aAZDT5xVvZdfubJTBgDM6Mfk+O79nlnCzIg==, tarball: file:projects/arm-redhatopenshift.tgz} name: '@rush-temp/arm-redhatopenshift' version: 0.0.0 dependencies: @@ -18123,7 +18124,7 @@ packages: dev: false file:projects/arm-rediscache.tgz: - resolution: {integrity: sha512-xMDBT7vRCqYoRX7+G08GzMqnisN+f0Vlru2bJbf3WN7pPxwPlShEBHTQ0zsY8+8UapKAIDS0wzIMvvyhX12/UQ==, tarball: file:projects/arm-rediscache.tgz} + resolution: {integrity: sha512-8IG6+1nX75u3bM5sSZQ2zTo08+NX6HMQzy8ov9tNKFyi0L/TNSCGU9KPul+rWgQ/0BqnT81b//C6N1L7/Pt81A==, tarball: file:projects/arm-rediscache.tgz} name: '@rush-temp/arm-rediscache' version: 0.0.0 dependencies: @@ -18155,7 +18156,7 @@ packages: dev: false file:projects/arm-redisenterprisecache.tgz: - resolution: {integrity: sha512-2OuZxOIoB+wE5E0rj/0Xtz1fMoA1iFAQeTbUhnptoXZ7G41XSdiaZkk5gFkGtQ8K+rEYBTM+6u8s6HvxjyKSjg==, tarball: file:projects/arm-redisenterprisecache.tgz} + resolution: {integrity: sha512-fAG0zihUEXQ92Bx34lGz0Szk5rXwA/gQwKfk+6KmAG43mh0VWjB2Ris5vQRbYynNMZ/wgTi6NVcV+edMWyqCIg==, tarball: file:projects/arm-redisenterprisecache.tgz} name: '@rush-temp/arm-redisenterprisecache' version: 0.0.0 dependencies: @@ -18186,7 +18187,7 @@ packages: dev: false file:projects/arm-relay.tgz: - resolution: {integrity: sha512-HuekB5MGR/3uz7+qX1pkZx6+oBu8nur/tLgKn2x1h2weuvxuy/LOFWr2msecVUC9Gu9xGkkQZsO9BSq0CIhjIQ==, tarball: file:projects/arm-relay.tgz} + resolution: {integrity: sha512-bFakmh6RPrLKgxppLuR8uXuvIN3xlPaDbx26yN4X1plOrY+tNN/+IBOt0o+Q7waxsV36lf57iqOhwE+/N3H0uQ==, tarball: file:projects/arm-relay.tgz} name: '@rush-temp/arm-relay' version: 0.0.0 dependencies: @@ -18216,7 +18217,7 @@ packages: dev: false file:projects/arm-reservations.tgz: - resolution: {integrity: sha512-YO4FdzBwu28JXX1LGR5NmopnizH3aH8AnFuk8PyE1r4hPsjrYDi7Bg+oTdxb92/2gofn+DYRlM/YuRBe5MY/Jg==, tarball: file:projects/arm-reservations.tgz} + resolution: {integrity: sha512-La9F/kMi+BYUmMNGlMbmgh+s//Bu5u0sTQfnquHKp8uNUqsVpaX7/GOJKPyEX4v0SjplGSVxFakVeHL5LaLQZQ==, tarball: file:projects/arm-reservations.tgz} name: '@rush-temp/arm-reservations' version: 0.0.0 dependencies: @@ -18246,7 +18247,7 @@ packages: dev: false file:projects/arm-resourceconnector.tgz: - resolution: {integrity: sha512-7r+Caa+famctT+bERIWkh6nD0hVAVPJgkbAgMkUDKMMTvU+jmKhaRNy5B5BdUuK6lflISiJKo2PLS7oq6hyKOQ==, tarball: file:projects/arm-resourceconnector.tgz} + resolution: {integrity: sha512-+1HL7qj2oHy1u4GmQajmi+IKnFQqCdNxF2pJScZHsYjB1HEbAj39rQwsx4Rjkd5xR7kPYbzFC5HjXOx3D5nsMw==, tarball: file:projects/arm-resourceconnector.tgz} name: '@rush-temp/arm-resourceconnector' version: 0.0.0 dependencies: @@ -18276,7 +18277,7 @@ packages: dev: false file:projects/arm-resourcegraph.tgz: - resolution: {integrity: sha512-PKWFSBeWTB3RW6IoTMuumq1t0qoCvNPIFXP6VgICu7m1FyYpYQOM3lZ4iA+9kBrpYdNQEMxcd291e8j8PelyFQ==, tarball: file:projects/arm-resourcegraph.tgz} + resolution: {integrity: sha512-JPjc4McLqBJjfwboTtv1QCjfEKnDZUf1+U3WkrSUlqisZRjJ6aVl8ZDlMqikWpc9i3YFJHgFMuUagnXzI9E0cg==, tarball: file:projects/arm-resourcegraph.tgz} name: '@rush-temp/arm-resourcegraph' version: 0.0.0 dependencies: @@ -18303,7 +18304,7 @@ packages: dev: false file:projects/arm-resourcehealth.tgz: - resolution: {integrity: sha512-YJse1skI7U90dSoVqsB7W43DlnFxCIu3jU9VSFaM91m6DN/+1t4JjHscCabpvYpYYMtPv1uEFbcNe/oELTT3vw==, tarball: file:projects/arm-resourcehealth.tgz} + resolution: {integrity: sha512-mUmDgyvVm77Mq9cl3ZTKpyNUUuAkGd3314zoCsozIYc93Su5q4pZiUk/Kxigqj8l4kQ3+ae67IB7ZrzQLipcDw==, tarball: file:projects/arm-resourcehealth.tgz} name: '@rush-temp/arm-resourcehealth' version: 0.0.0 dependencies: @@ -18331,7 +18332,7 @@ packages: dev: false file:projects/arm-resourcemover.tgz: - resolution: {integrity: sha512-1OaUJwMEBJg+zABRSPt+3xcPPjHBD//xqS7iicMG7YVTRRmPWJfIU4rOxOdkKfJ484AF78wtAbI1c5TbISBxQQ==, tarball: file:projects/arm-resourcemover.tgz} + resolution: {integrity: sha512-oUu8cCzEl+fWhoVCOePYOmphYMJs6g2ZlQ6/xgGKzkOv7oGaTyInm+SiIxZqnz6nSWu09rHirsxAe+O8XGJHNA==, tarball: file:projects/arm-resourcemover.tgz} name: '@rush-temp/arm-resourcemover' version: 0.0.0 dependencies: @@ -18361,7 +18362,7 @@ packages: dev: false file:projects/arm-resources-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-QmCIBi9Rh+M0UbqRUHqnv4sKl/4foIiUl6P/FRh/1VxPT/uxZv/yA7yWx60XK6UsLHK0GqIaDIuoXRcrP0sEDA==, tarball: file:projects/arm-resources-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-hN0wr1r1GbSncMjQEDhIW5VYSvVSMoT90+FF/4qOavMluszq5DnMFBxR2z6DANQ6xU2nLm9WEKa6S4JyIGpigw==, tarball: file:projects/arm-resources-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-resources-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -18391,7 +18392,7 @@ packages: dev: false file:projects/arm-resources-subscriptions.tgz: - resolution: {integrity: sha512-BWiBCZ8DrTvYtOTrKMg0t8uXaIcjQwfG33PdnOxpsUGBGDU+vU5S1xLUeXm3mHXVHg5WvARqVWBKoXUgStB0RQ==, tarball: file:projects/arm-resources-subscriptions.tgz} + resolution: {integrity: sha512-qhA1M+sMpl11reN9zmrbfbpn8HKuGIfO0Qli7ONzksQmCEZ0eNx5IJi5+PZ5+0PT7HxP/StQwJyAMGpQsdt15A==, tarball: file:projects/arm-resources-subscriptions.tgz} name: '@rush-temp/arm-resources-subscriptions' version: 0.0.0 dependencies: @@ -18419,7 +18420,7 @@ packages: dev: false file:projects/arm-resources.tgz: - resolution: {integrity: sha512-JqWS42xp1LBmw2Vt0MWGue1tx8fRp04bLdq77O3upDVLTpksZkNBQyMpQdPvM6dpAVYcIrjsP2RlibzOGaWM0A==, tarball: file:projects/arm-resources.tgz} + resolution: {integrity: sha512-VJ2ZSr//nnrQdQSgVNcEyhfOEaESfbk4tVWLTJZ5umow2S7jtBEV7cMHZHqhObD2TDc6Jzcit5L4G7upr/zYnQ==, tarball: file:projects/arm-resources.tgz} name: '@rush-temp/arm-resources' version: 0.0.0 dependencies: @@ -18449,7 +18450,7 @@ packages: dev: false file:projects/arm-resourcesdeploymentstacks.tgz: - resolution: {integrity: sha512-w1qpRkt2KGi0v1JnbxcJrU6EChWrsjapeDle4u9XiQk+eQq2V64Vr1101KFN/31EcBZVndFb/k5LUQUFAReXkA==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} + resolution: {integrity: sha512-yyRLezFY8H+vjTTSa0MVoCE7TMlv27xJiLdmkGDnelwFKpBo6/2cwZNligO0BC0w//cEkTXH33yr/AJ+rqI5lQ==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} name: '@rush-temp/arm-resourcesdeploymentstacks' version: 0.0.0 dependencies: @@ -18480,7 +18481,7 @@ packages: dev: false file:projects/arm-scvmm.tgz: - resolution: {integrity: sha512-9CALsrjrdueT716KYVr+WsmvSDJi2pAMFscBUUf5SxksN+u3+GFpjxn1t6gIfifdAcqdpwwIi+C6dAJOYHQhww==, tarball: file:projects/arm-scvmm.tgz} + resolution: {integrity: sha512-o3w2jxmcrAV6gbXFHt6MnJJiE79CWSpegfRgC5isL0LIKtVE8LNkEucabsd22gCHWiVyDvZLrrQUkZb7EHdhOQ==, tarball: file:projects/arm-scvmm.tgz} name: '@rush-temp/arm-scvmm' version: 0.0.0 dependencies: @@ -18511,7 +18512,7 @@ packages: dev: false file:projects/arm-search.tgz: - resolution: {integrity: sha512-JlKGpcSU5jEa7Giyvx+k5k1b6Dh7Zhs2k11IdiytGy3Fm2Qijk3btIRIcK22ABwiRl6Pvq6OTwTg7CHcm9U3WA==, tarball: file:projects/arm-search.tgz} + resolution: {integrity: sha512-NNn/oLf1snRFzWOTs/p2stol7ofLvy6kKfQvpsaraxyU9arohuUXl9PsiPA6ATa9hwR1SoRfTnl7hv016/11Jg==, tarball: file:projects/arm-search.tgz} name: '@rush-temp/arm-search' version: 0.0.0 dependencies: @@ -18542,7 +18543,7 @@ packages: dev: false file:projects/arm-security.tgz: - resolution: {integrity: sha512-Cx3vVnuVkixfnjxkezpLLCFgoblfiqXnK3MfSB6l4e2ulZsVfX/07iNCALqvxcGXwcmPYdTR4WxrFXQ689j39w==, tarball: file:projects/arm-security.tgz} + resolution: {integrity: sha512-qX5Bt0iuWZYa+FKt92nR0OAR1x7O6A4z9eRKbgDmxMBmsd4aaLRsPGba4L8YW3YKMCQ/txKodNBBbYzIG1X++A==, tarball: file:projects/arm-security.tgz} name: '@rush-temp/arm-security' version: 0.0.0 dependencies: @@ -18573,7 +18574,7 @@ packages: dev: false file:projects/arm-securitydevops.tgz: - resolution: {integrity: sha512-Hbv+DXT5nJ8GFCIRuIvUqxf2TgunmPyhTNYE40uKiiY3Hy/mR553bHUfT4ba72QSHJJEXmsuTruOHYPJYEd2zw==, tarball: file:projects/arm-securitydevops.tgz} + resolution: {integrity: sha512-jFKjkibhDa+2YyMqo9a0+vHHjCNbr6vFETQpFrkRl2BHoz/SjFRWgaH4H/AeULpjfv65Evfsc7fIXTTWiFFADA==, tarball: file:projects/arm-securitydevops.tgz} name: '@rush-temp/arm-securitydevops' version: 0.0.0 dependencies: @@ -18603,7 +18604,7 @@ packages: dev: false file:projects/arm-securityinsight.tgz: - resolution: {integrity: sha512-07YttJ6drF9eY3g7/egmTFy98lTuUS1HxFhoMr7e3bKMzDbgkDPi0cbiVf/1Dm1f0yFQFHGm3JM5b/VuoFDSkA==, tarball: file:projects/arm-securityinsight.tgz} + resolution: {integrity: sha512-Xthk9kjRS5Ln3QcomZv8mv+ytV67AWwvUNADkKfmvc5vqs9/EPnhuuGuss8MoxN6OJbDtgB81P52eCxOy8/kXg==, tarball: file:projects/arm-securityinsight.tgz} name: '@rush-temp/arm-securityinsight' version: 0.0.0 dependencies: @@ -18633,7 +18634,7 @@ packages: dev: false file:projects/arm-selfhelp.tgz: - resolution: {integrity: sha512-B8Xs0UMUJTwbnl5F2Apj4D3Qu5RkXCPoa9tQSFuJn2GzHB4LH3opGMIxaYbpZo4OFaVWh07abb+O4DtWfjdYzg==, tarball: file:projects/arm-selfhelp.tgz} + resolution: {integrity: sha512-Yp/5kbvvAsjKM5O1G5+IvkmdHgOpOYTvR0ENz6bQEyvLiRrpxQOY87arhZtpGod6CzBwj3Y/copZm+7ju1tclw==, tarball: file:projects/arm-selfhelp.tgz} name: '@rush-temp/arm-selfhelp' version: 0.0.0 dependencies: @@ -18664,7 +18665,7 @@ packages: dev: false file:projects/arm-serialconsole.tgz: - resolution: {integrity: sha512-1VE+SNe7NzYszDtx/foPi9v0rkuxg2qasxcS9Tyjejde/S0rOz6F+Dv1RKxgPn8bYZEK6+0TB2SN9JgmSPB3UA==, tarball: file:projects/arm-serialconsole.tgz} + resolution: {integrity: sha512-tbuwl2XgYher86fTQN84E92cYvZDMac2r6+LhOjRPooInHomS0vfV6OiMCca3gJkyIqKvCIaewYRBtsDBRxHLA==, tarball: file:projects/arm-serialconsole.tgz} name: '@rush-temp/arm-serialconsole' version: 0.0.0 dependencies: @@ -18691,7 +18692,7 @@ packages: dev: false file:projects/arm-servicebus.tgz: - resolution: {integrity: sha512-7s8SvOlfHwdEc4CR6JyrNmWm3wGNKBZRJn4pSdwLo9R+Xe3FNHuzPoFV5uONB87vlzFE2ev5wu/7LWz08LhWHw==, tarball: file:projects/arm-servicebus.tgz} + resolution: {integrity: sha512-fZLIGgcwn7u0kdCmHfjpryDtEtO5ffOIkYi8PYsdd0fUU8YmspnxCfkWagKhRS15Jrih20V/lXq5fBMABDZLsA==, tarball: file:projects/arm-servicebus.tgz} name: '@rush-temp/arm-servicebus' version: 0.0.0 dependencies: @@ -18721,7 +18722,7 @@ packages: dev: false file:projects/arm-servicefabric-1.tgz: - resolution: {integrity: sha512-zsDMTNrg16MLi1iNaoOIMZxZALsSMGOK+omzyhDBlf4QUQWZzwVgwW7zV4/uE+S2BzXAdvV91WEx1mKhLtUZvQ==, tarball: file:projects/arm-servicefabric-1.tgz} + resolution: {integrity: sha512-6UGCRqxRluNxX5M2NvMf5GOtpbgAmdnrVYtQtTc/pMREuGHiSnNV7eKBlc+wOgzXPBWMQupwd8QcVYyt7AlEww==, tarball: file:projects/arm-servicefabric-1.tgz} name: '@rush-temp/arm-servicefabric-1' version: 0.0.0 dependencies: @@ -18751,7 +18752,7 @@ packages: dev: false file:projects/arm-servicefabric.tgz: - resolution: {integrity: sha512-LyOU99tUfJdleRudJAd7zFDFD8Q3z+gYCoSw/ARvqPI/uOr5KZwBSt4kqmrieHC4CKjc48EOjgPRm/Z9atnOcA==, tarball: file:projects/arm-servicefabric.tgz} + resolution: {integrity: sha512-ngmoIRydHeG2s2KBbidNsGCs6ezegZAFBdzDa8rdED3Jxk0QfVBjgEX3R8BlM0UBkjXN2vPoVbWGQ5qtent8RQ==, tarball: file:projects/arm-servicefabric.tgz} name: '@rush-temp/arm-servicefabric' version: 0.0.0 dependencies: @@ -18798,7 +18799,7 @@ packages: dev: false file:projects/arm-servicefabricmanagedclusters.tgz: - resolution: {integrity: sha512-Kkikw+KilbQHL1sc42pegiA8WkR+uAco/BMH4k/OfFR7yk2VlliKjBLSIwTIxb938XrEZeGry8mMy4vQuMJrFg==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} + resolution: {integrity: sha512-ogHNglY23yny1DzKJ+TJ/hwk80KD8woVXF0nzMGtgr4xK1VDR/nDCnJ6fwvcu2jyvA7w/RqXQOE04kMjn35VqA==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} name: '@rush-temp/arm-servicefabricmanagedclusters' version: 0.0.0 dependencies: @@ -18829,7 +18830,7 @@ packages: dev: false file:projects/arm-servicefabricmesh.tgz: - resolution: {integrity: sha512-HX67hh3knqcchYlSWFKX7wn7lYFmFdqW44X8dTnUSExwFNuHuQ/zrDbGpWsuqFn97NcEeh3FDQXpbLGYuKQiHQ==, tarball: file:projects/arm-servicefabricmesh.tgz} + resolution: {integrity: sha512-xdLa+h/zRyPVz8Ha6gyMY2Dj6Pvv6w/A0pv7yqt/wQkCiPana7auJyJcc3F9sUUynNuhoZyKZ9VnImlcCndRDQ==, tarball: file:projects/arm-servicefabricmesh.tgz} name: '@rush-temp/arm-servicefabricmesh' version: 0.0.0 dependencies: @@ -18857,7 +18858,7 @@ packages: dev: false file:projects/arm-servicelinker.tgz: - resolution: {integrity: sha512-Rw9j5L7fekoArYrh1wMGsfhEZ31UiUPfIxUolDb54yo3PCThBme8twGSwDL/TvfJw8Ms4nH01um92ivf1XxiHQ==, tarball: file:projects/arm-servicelinker.tgz} + resolution: {integrity: sha512-cnaI2wou6rHncFY3xOn2EbxClEZwq09rcqTfSBp3qXuHhSadKZ1boREjRNWJDS0F9WKSbFArOgrtw3NWLGKoIA==, tarball: file:projects/arm-servicelinker.tgz} name: '@rush-temp/arm-servicelinker' version: 0.0.0 dependencies: @@ -18887,7 +18888,7 @@ packages: dev: false file:projects/arm-servicemap.tgz: - resolution: {integrity: sha512-6sR8Zk9I/BpB+lqR44CCHVMqn6mJHGxhWFC8wqqwpd/xd0XKbfYB/Rewaso+Ud5JliX73VXAs4vQ55y5GuehMQ==, tarball: file:projects/arm-servicemap.tgz} + resolution: {integrity: sha512-tX4zJQlbhwSe26x/zw+ypLR0+mUdS+fsc48e6w0nL/cmSs0E/TZzBlQRl7H4fVQV01mYWJxkX0D7LC2yv7ZkQw==, tarball: file:projects/arm-servicemap.tgz} name: '@rush-temp/arm-servicemap' version: 0.0.0 dependencies: @@ -18915,7 +18916,7 @@ packages: dev: false file:projects/arm-servicenetworking.tgz: - resolution: {integrity: sha512-HXdDuirNeRFqL55QZZiz8+wHDLGi2el7xSPOVJim4WhO5iZ8INACkCr9+RkN1IMRff50DfUdK6w1McDIPlQu8g==, tarball: file:projects/arm-servicenetworking.tgz} + resolution: {integrity: sha512-iUYiVR/KEAgA1sVq8TOnnR8ZTBNFZgdxt8pkDAgYtjSGoJ77QpIkKsTaAXH7Gdc/yG2nHYULm31NjySZrjk0Jg==, tarball: file:projects/arm-servicenetworking.tgz} name: '@rush-temp/arm-servicenetworking' version: 0.0.0 dependencies: @@ -18945,7 +18946,7 @@ packages: dev: false file:projects/arm-signalr.tgz: - resolution: {integrity: sha512-hKhoT7t0dBvBxAuD0VmG1ItZDNjprz3Zl4/cPIyN/GEsNFyUcPWpxLvMnQExKWjWYqkE6GozEtWfUuN3o6qVBA==, tarball: file:projects/arm-signalr.tgz} + resolution: {integrity: sha512-//D4ROtuMFfkL448Xw2X6VNSawv1JP64/9b1tROovvse4yyaKVm3EuToGihzlT6i7ZYDtoeKR2RjNzzq+EdVEQ==, tarball: file:projects/arm-signalr.tgz} name: '@rush-temp/arm-signalr' version: 0.0.0 dependencies: @@ -18975,7 +18976,7 @@ packages: dev: false file:projects/arm-sphere.tgz: - resolution: {integrity: sha512-7oOjTxSO9G2XEd7cfFHhYM+CyMj+huZ5KPdc2wprA3zoA977UPWKtfsrV7q0oNaWyobr20uuBsW8tTe8mCxp9g==, tarball: file:projects/arm-sphere.tgz} + resolution: {integrity: sha512-a3acwGYvmSNDqzWAPZOha0SLZNQyeLTnutW4erOGrck4OEnYDR7COhnUpiOGL8BIgaushPAZ9ePo8zN9M+Nz9w==, tarball: file:projects/arm-sphere.tgz} name: '@rush-temp/arm-sphere' version: 0.0.0 dependencies: @@ -19005,7 +19006,7 @@ packages: dev: false file:projects/arm-springappdiscovery.tgz: - resolution: {integrity: sha512-neDf8PG1/HSmeFOC97uswyfatTahZx+L1+y62JF0c5K5g/2RpdkyMzMM3y/XE+hOirtZNRTx3Cemu52pYqQcFw==, tarball: file:projects/arm-springappdiscovery.tgz} + resolution: {integrity: sha512-4ITn6D0Ow4w7vp76TUnkAoGmmI8hDWT0ysmmBqkow/42rTL3EEUuC4BOWFWgSC3MyjUf/qV5Ng5HpePLqAYfaA==, tarball: file:projects/arm-springappdiscovery.tgz} name: '@rush-temp/arm-springappdiscovery' version: 0.0.0 dependencies: @@ -19035,7 +19036,7 @@ packages: dev: false file:projects/arm-sql.tgz: - resolution: {integrity: sha512-4uzGOXMp2QsJGHHzTsjVP6qykvXtQDmexBR2ZWiG5oqjkJ7F1rPXeH7dEpdWYyK+vCl3xpyTB2Aw2LHyVgREEA==, tarball: file:projects/arm-sql.tgz} + resolution: {integrity: sha512-JswK/xxfffuq6GqmLZ30PNB4b8XpPVWgYDG+myAsaxqKhXx1uKcRMLsaQr3tTTT0bRV2unkmbNG3Ey7BjBsnpQ==, tarball: file:projects/arm-sql.tgz} name: '@rush-temp/arm-sql' version: 0.0.0 dependencies: @@ -19065,7 +19066,7 @@ packages: dev: false file:projects/arm-sqlvirtualmachine.tgz: - resolution: {integrity: sha512-ylVlvSENVEipjj6tzFfAhyBgcg2NyekGz0ICwYeh1+vwN2AyUR1utdpOO98OVBw/I1m2wfCunfsfuMfnIwLWWg==, tarball: file:projects/arm-sqlvirtualmachine.tgz} + resolution: {integrity: sha512-y6IMjc81X/5x0M7oNaOorHAJVycAiUks/CZ3E74U9GRsVPC7Qr+GlE4M4bMnRUl2JR/KKGzkR/5gOStOc7BNow==, tarball: file:projects/arm-sqlvirtualmachine.tgz} name: '@rush-temp/arm-sqlvirtualmachine' version: 0.0.0 dependencies: @@ -19095,7 +19096,7 @@ packages: dev: false file:projects/arm-standbypool.tgz: - resolution: {integrity: sha512-cZ+3KqNhZXQ8w2JL3VlYce2KrfDPCXGHgRqZQiOUbujloVx+MYlARSceN8vLAF1WdVx2Mpz/R1xQQmKgPnLA6A==, tarball: file:projects/arm-standbypool.tgz} + resolution: {integrity: sha512-98KO/aEO7Jt3dxN6nU+52vmQJ/fj9Y3X144am3zcamP9wQA2Yavq2srKLUS6HzKzv1ylVl6B3mqfR1SGtdV3YQ==, tarball: file:projects/arm-standbypool.tgz} name: '@rush-temp/arm-standbypool' version: 0.0.0 dependencies: @@ -19136,7 +19137,7 @@ packages: dev: false file:projects/arm-storage-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-Dk0/NKFoJ3RV/lGmc0Zrq+VaBnlCKOBo5EREfY9ckNo+fiexKWC2nQHSUv0oxe4Y1wlASmuESfjF7Xbc7lqicQ==, tarball: file:projects/arm-storage-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-BhJiAVxtvqPZQlVltSqRfNHXwvEfkM/zpBh7m9Au6h/boIEOg4zrghJ53FF+KLkijK7Vs1w/yWjNhj1CxNcdRg==, tarball: file:projects/arm-storage-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-storage-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -19165,7 +19166,7 @@ packages: dev: false file:projects/arm-storage.tgz: - resolution: {integrity: sha512-D+gdM1Cx/LTFUhd06ZEyB9xm+/pOlNTPAjdNVdChyorVn/lnXjEZh3f3sgRphixkYlck4kGxtFAdzwu1srfsLA==, tarball: file:projects/arm-storage.tgz} + resolution: {integrity: sha512-J2YksUzTqL/qDyCRy1HI3hf64NDRxxs2OA2+mSiTTA2G2bwIgiAQ9f+yjxdynLnaE6JvGO4qNdYTMNuyh7XgWg==, tarball: file:projects/arm-storage.tgz} name: '@rush-temp/arm-storage' version: 0.0.0 dependencies: @@ -19195,7 +19196,7 @@ packages: dev: false file:projects/arm-storageactions.tgz: - resolution: {integrity: sha512-8Pj/Bf/MGP8ktyIo+0pu9anWngbnHunMPbX+I92bfX9YPloFF4+8BkP7uzTCFhX2pFrKapmacRZ7ygRwJmv57g==, tarball: file:projects/arm-storageactions.tgz} + resolution: {integrity: sha512-prmV8ZjJK1sfwzNJx1FWYXmERGr6ithKFTPq1hc9zv6FVq2W4vLi3d78/SgBwYr1Ro/YCMFU2DHR5LF62YUDKg==, tarball: file:projects/arm-storageactions.tgz} name: '@rush-temp/arm-storageactions' version: 0.0.0 dependencies: @@ -19225,7 +19226,7 @@ packages: dev: false file:projects/arm-storagecache.tgz: - resolution: {integrity: sha512-ift1WaqWkoJTVzAQUPL0XmlDFuMeNaX1pgZ/fBJzu9b3QRq2mNmp5ZHZYItvyGREoHQFazdmDiiuy9u2L3dY+A==, tarball: file:projects/arm-storagecache.tgz} + resolution: {integrity: sha512-Lm1hQxdHpuLDC/UNmLXg+/Ownfpz77HS4pVUwdXeLOoZHt83c19tUvnUyl2fkxN6l43gFURxaNxBxDXOkf1Fvg==, tarball: file:projects/arm-storagecache.tgz} name: '@rush-temp/arm-storagecache' version: 0.0.0 dependencies: @@ -19256,7 +19257,7 @@ packages: dev: false file:projects/arm-storageimportexport.tgz: - resolution: {integrity: sha512-dKaklFHHYla9L6VZNIdahMaANzLo0UZzRdaszl5JsMG38wAYDcYd299I44veO5MrVF0y0Z7PiCnZvDMcDKT5nw==, tarball: file:projects/arm-storageimportexport.tgz} + resolution: {integrity: sha512-Kk+hVNzhiYAcPVoHMzfRA5ic9EyKfxOLyyOEDtcL6xhew8VcE9zMtnTQUV0pHWXl2wBeYGaikA7tDW3fevL6CA==, tarball: file:projects/arm-storageimportexport.tgz} name: '@rush-temp/arm-storageimportexport' version: 0.0.0 dependencies: @@ -19284,7 +19285,7 @@ packages: dev: false file:projects/arm-storagemover.tgz: - resolution: {integrity: sha512-fEA/lydnfM5333GkobFYgVdqYYPqs6g3+n6uH0UrvUFb9jOjyichQrE4TAf3Jkwyd3QC1OmiBsaBcPGOyFKMlg==, tarball: file:projects/arm-storagemover.tgz} + resolution: {integrity: sha512-JnK7xSJNR07rz1If0YUYDFVjUFPo21pNFxLhED9D3gYscmtJQ0SLoJ2KoBFlVldINKvW4FN/Uwk/r6uJJ4Ogwg==, tarball: file:projects/arm-storagemover.tgz} name: '@rush-temp/arm-storagemover' version: 0.0.0 dependencies: @@ -19315,7 +19316,7 @@ packages: dev: false file:projects/arm-storagesync.tgz: - resolution: {integrity: sha512-/UPAsoxu3THqO2p2vWl/wEAMG2rS7wT0PuXr9F+BGFO7r+TRmPey4/p/Km2MP7AKoxoiZZl+wxEcUbBftO/qVQ==, tarball: file:projects/arm-storagesync.tgz} + resolution: {integrity: sha512-RNJ1JUw5ZYzt/jJzLrHCEzi+oY4efJtJ/xWqnVlOXw1STl/s+MRleM+tSKw4zub9yVN3YkXlK4NC+/rrlrohiA==, tarball: file:projects/arm-storagesync.tgz} name: '@rush-temp/arm-storagesync' version: 0.0.0 dependencies: @@ -19344,7 +19345,7 @@ packages: dev: false file:projects/arm-storsimple1200series.tgz: - resolution: {integrity: sha512-L9ILvdPbReCuNr+9f12UcihnSndHXgI8sKv9IIaWiCKQMPEMP1Pk7a1npC4KMJt+evOhtGhoxhd7YKL8Yh+Fwg==, tarball: file:projects/arm-storsimple1200series.tgz} + resolution: {integrity: sha512-ciw7udwQWYlaCJI74gDNSzUk/TDizsfB2U1yaJazGBKiOARwAzklZ1dKYcI/sybBJliLu95B2NpbDPnWbGzVYg==, tarball: file:projects/arm-storsimple1200series.tgz} name: '@rush-temp/arm-storsimple1200series' version: 0.0.0 dependencies: @@ -19373,7 +19374,7 @@ packages: dev: false file:projects/arm-storsimple8000series.tgz: - resolution: {integrity: sha512-nnZ8n6xK3zOtbM+qw8WWaCiniwWN7riA/2xuXpI1MJYb3WLCqRDhF1OPGEE62sMd0PvC0ZDWurZ/M+MVL5+3jw==, tarball: file:projects/arm-storsimple8000series.tgz} + resolution: {integrity: sha512-LB4whcJidzmcAduNBKpZ+yeUiP81Hd4ontBuS9xwBC3mskmSNchBRUHBnOP1NNm6dsJh8yJ/cwo2ERVPwtU9qw==, tarball: file:projects/arm-storsimple8000series.tgz} name: '@rush-temp/arm-storsimple8000series' version: 0.0.0 dependencies: @@ -19402,7 +19403,7 @@ packages: dev: false file:projects/arm-streamanalytics.tgz: - resolution: {integrity: sha512-D7TpBeB6DPpAWPJwq3jlivrojOWee/r7TSJuv7hxUBVKF0fcyqtEPHTafSUwEZAS0zGodfBuuwTyIDzC5u4JMA==, tarball: file:projects/arm-streamanalytics.tgz} + resolution: {integrity: sha512-JD1vmdc8K94+1hhPgqErq99pNyvDDHQK9GhWqNCu5gCvV0k12jofyv7v4bxrt4ucRLwSn22jyl4BSa+35SOt9w==, tarball: file:projects/arm-streamanalytics.tgz} name: '@rush-temp/arm-streamanalytics' version: 0.0.0 dependencies: @@ -19432,7 +19433,7 @@ packages: dev: false file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-9kqe6iGwxQqLIhNyZxk7iWE0ISaPERLYdW/T/EUKdhAPHCXOEWl6jyoRv7GlrISyrO+VyzlaZA3/Mpkm7bp80A==, tarball: file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-Duc1ZdKb4APnFH0ct5dtnrHstDYeQ3UdD0jCg0oldd3hDwCkEplmDm3Eue8WFbRnx1tBUvwhn1PzMZ39mKkJAg==, tarball: file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-subscriptions-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -19460,7 +19461,7 @@ packages: dev: false file:projects/arm-subscriptions.tgz: - resolution: {integrity: sha512-nlZ0V5NInUqt+nDesrlEcOW0zco4k2AFLjKYpXat5aapkaSrXM122M6QjSS1bANc2PaujIMet4YgNk52bczlHQ==, tarball: file:projects/arm-subscriptions.tgz} + resolution: {integrity: sha512-7tTcBOLvvnnVpm8e/xueEqechdj+7gXaKqZcictAopdO6H/0bVZyvP1i2CiN2QXB8Yg0+tGoiUK72rJmZsvg3w==, tarball: file:projects/arm-subscriptions.tgz} name: '@rush-temp/arm-subscriptions' version: 0.0.0 dependencies: @@ -19489,7 +19490,7 @@ packages: dev: false file:projects/arm-support.tgz: - resolution: {integrity: sha512-xboAPd4ZedMCUoDARb1jBQG9OqiV4eJeM083O69HM96KcD1ofFIJ9bxWAf2r+QTN5zNOmcD8MKAZHTIfrYdEEA==, tarball: file:projects/arm-support.tgz} + resolution: {integrity: sha512-WCl64lCimB7pNbgeonCmJS1qSwmNxoB6KqBmmA/s3TzENiqmhzfqBERkslh/x7b1IE1Qclqts3l7lxzEGVHPhA==, tarball: file:projects/arm-support.tgz} name: '@rush-temp/arm-support' version: 0.0.0 dependencies: @@ -19519,7 +19520,7 @@ packages: dev: false file:projects/arm-synapse.tgz: - resolution: {integrity: sha512-uhGp6uBIE4OQAM8QkLCFZQEAUH5gllL9g/fcgsTXbIl2wN+hErb7FPbhgejXx4YoSuD/XXeGP+mF00qez1ObRQ==, tarball: file:projects/arm-synapse.tgz} + resolution: {integrity: sha512-YzkU2mRcXDAm0GKZVMcNnyOmEsK5Fo5WBd1ZZuvr6HxVnfLGSHhyhbxWddrkkYLaEU3WB5Lo+MyMTNMX7fiJuA==, tarball: file:projects/arm-synapse.tgz} name: '@rush-temp/arm-synapse' version: 0.0.0 dependencies: @@ -19549,7 +19550,7 @@ packages: dev: false file:projects/arm-templatespecs.tgz: - resolution: {integrity: sha512-WZcUYjB8p3XJq4YE2aTRuwfjFLUgiAubD/bprro19usu44kuVqxFw5/a137CkCosJWFRyFFcZS1VVuFlWlOlbQ==, tarball: file:projects/arm-templatespecs.tgz} + resolution: {integrity: sha512-pV8zvIeZl6Zw1r+rYImToOFqB3IonsnSchpOcLET1HULXxF9sYPkdZHof+x8586LfA0/cSq5ew+NP7Gjll0rBA==, tarball: file:projects/arm-templatespecs.tgz} name: '@rush-temp/arm-templatespecs' version: 0.0.0 dependencies: @@ -19576,7 +19577,7 @@ packages: dev: false file:projects/arm-timeseriesinsights.tgz: - resolution: {integrity: sha512-kTjFi9gRBxK6iv7PZ26RytCDhwZPBDvOgiW08rJZUG5uTjoKKXbao1mhdhIwW6OCxRAXBx7jeSaJ5pEKDgmM9Q==, tarball: file:projects/arm-timeseriesinsights.tgz} + resolution: {integrity: sha512-aNZ/o+0GLk76WBRObGYUXx3X/XEDM7lf21OB1/njJK7+nYpqAUl1KsUZFtST6jJpxcqdCEz/2aIl1zKfzPTUYg==, tarball: file:projects/arm-timeseriesinsights.tgz} name: '@rush-temp/arm-timeseriesinsights' version: 0.0.0 dependencies: @@ -19606,7 +19607,7 @@ packages: dev: false file:projects/arm-trafficmanager.tgz: - resolution: {integrity: sha512-4dB87usrmS7g4Y/wbt3BHkHC3NX2FbtRD5l8O2Iy7LTnWDpUk5GXZDyhJEuO/FzzxB4eYI/+VJMHmCkrWck/gw==, tarball: file:projects/arm-trafficmanager.tgz} + resolution: {integrity: sha512-iMPP4pHuXFMziscMsQ1kfrfINmu+Uz1dWESxOfAlBWFrYkuZpyacWXySRRy3uQYtDpFO3b8fPcWbKvn5hDlzUA==, tarball: file:projects/arm-trafficmanager.tgz} name: '@rush-temp/arm-trafficmanager' version: 0.0.0 dependencies: @@ -19634,7 +19635,7 @@ packages: dev: false file:projects/arm-trustedsigning.tgz: - resolution: {integrity: sha512-pM0yO35qILHYaE1RUXpcUNchhXTOxF//WJ9yoM6Ts5G+oXI1oodtUQKcj5F4KUpGj8JTvdsyMqzjzeCR6coWlw==, tarball: file:projects/arm-trustedsigning.tgz} + resolution: {integrity: sha512-PWnXX1lNECFzpFwIBdThheK+pAh5+FI6vvbgRxa8BW0yAULyjVeTRFCIfXFY3YF2CQFatKKBOn4NSc3x/3qnHA==, tarball: file:projects/arm-trustedsigning.tgz} name: '@rush-temp/arm-trustedsigning' version: 0.0.0 dependencies: @@ -19674,7 +19675,7 @@ packages: dev: false file:projects/arm-visualstudio.tgz: - resolution: {integrity: sha512-sZqUoPfTZMPABUs78TRxnVgyyvmkfpfdFgnTqDtKV2VMfR1+elQonhWnIB9zZvzM3PWKhHKYMbMYGL6q/6hY0A==, tarball: file:projects/arm-visualstudio.tgz} + resolution: {integrity: sha512-DbNavcbXUgqJf1lVPCu+S0ckwd7yNiEiQBlMq+J9c6NWHNmpGUea5c0clXWdBUs80gZGpGTUwud0PDnolmNP0w==, tarball: file:projects/arm-visualstudio.tgz} name: '@rush-temp/arm-visualstudio' version: 0.0.0 dependencies: @@ -19703,7 +19704,7 @@ packages: dev: false file:projects/arm-vmwarecloudsimple.tgz: - resolution: {integrity: sha512-cJ3NpR44iDYdN1p6NKqiioV82rBsnbQgREtB9uLcCedMwuJGmvmwoUC//X92+gT14R2mD0AJhcto91Z6gZ3gEg==, tarball: file:projects/arm-vmwarecloudsimple.tgz} + resolution: {integrity: sha512-Tb8LWMIa0cIApKDexTqAgxFIxetP0QeBXH28LQra7/oULW46CHZN5t1Of/XCg8NCebnR1VVq4H6YuBkamFn1aQ==, tarball: file:projects/arm-vmwarecloudsimple.tgz} name: '@rush-temp/arm-vmwarecloudsimple' version: 0.0.0 dependencies: @@ -19733,7 +19734,7 @@ packages: dev: false file:projects/arm-voiceservices.tgz: - resolution: {integrity: sha512-0p3hyirUi4tE54EaNnC0IWATrXVXxXhkSBwUQgaaUQasL2bJe8yYRldg2gLuMfM04fDB+dof6sV70bI4MOTyDg==, tarball: file:projects/arm-voiceservices.tgz} + resolution: {integrity: sha512-XYwbHyA1LMsbMzM6i2d8EdRmVkm+qlO0js/H0WV6PQ6cYCjYvhSJn32S2thsRXHsbvpfHZyR9VEDJ+K69PE7Kg==, tarball: file:projects/arm-voiceservices.tgz} name: '@rush-temp/arm-voiceservices' version: 0.0.0 dependencies: @@ -19763,7 +19764,7 @@ packages: dev: false file:projects/arm-webpubsub.tgz: - resolution: {integrity: sha512-B+gUzveoYN7PvJ8n62fRjUH/JR8mOH0Ta8LfjVdqK3cKhfD7jHU0JIww2tJlbx8dWOUAwUQ8OV1yx7FhcFBVIA==, tarball: file:projects/arm-webpubsub.tgz} + resolution: {integrity: sha512-eSjHx16RUnAwJ0qPNc/yBMfVn8boFuomPD7Wnj3vGH2rMUGpcYAFHgUWjT2uzauFhU4zTAX38bbGLTrztjcDLQ==, tarball: file:projects/arm-webpubsub.tgz} name: '@rush-temp/arm-webpubsub' version: 0.0.0 dependencies: @@ -19793,7 +19794,7 @@ packages: dev: false file:projects/arm-webservices.tgz: - resolution: {integrity: sha512-EXRMDSMgRVCzdphqLjHqc6Qh4i+GeQMaSx49YG1QK3Y3k7gVOOD8vJ3yOlF559/cbZItinNFpCDRdwCY7ZDK6g==, tarball: file:projects/arm-webservices.tgz} + resolution: {integrity: sha512-3AUvG7keFYXdmeWVGjQDBgg1dBpae5B4tz4hGkJgtHnL7WH9G2+Y6qtIlEe4q0ds2VToZOoKGTP0Q7foU+XMCA==, tarball: file:projects/arm-webservices.tgz} name: '@rush-temp/arm-webservices' version: 0.0.0 dependencies: @@ -19822,7 +19823,7 @@ packages: dev: false file:projects/arm-workloads.tgz: - resolution: {integrity: sha512-9U3p/HSzE9FvRsMI2GncQDU/qTzmcIaUdVwVNFhJGhcw0yB3o6HaNUNk+KvFtNLNDRAONVLRqBn3X0FPqTyezg==, tarball: file:projects/arm-workloads.tgz} + resolution: {integrity: sha512-RRKjeLMz7miNlGELRsyC5l8m1QaEW2d2GRvUqSuxYqyOcO32Cx7HcuSLbptoyR4vWOdRivMQpQsjPkRWgZxkXA==, tarball: file:projects/arm-workloads.tgz} name: '@rush-temp/arm-workloads' version: 0.0.0 dependencies: @@ -19852,7 +19853,7 @@ packages: dev: false file:projects/arm-workloadssapvirtualinstance.tgz: - resolution: {integrity: sha512-gi64gGNgcvfqymMJtk6TVCzhfTMNm/c31TtUvbb2NIEHfnL8ilqLp36MslfDII8HAePx/Q0tSp1e+GsDj/B/vg==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} + resolution: {integrity: sha512-4EYSd9RcS40GlkNR5IGqsCeh/Pv9Xx36j0V1k/2Bjlw5hkpWBo5uCDAR9qWXC0F9YVv4FZ1VqcupEgjyoIvBOQ==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} name: '@rush-temp/arm-workloadssapvirtualinstance' version: 0.0.0 dependencies: @@ -19882,7 +19883,7 @@ packages: dev: false file:projects/arm-workspaces.tgz: - resolution: {integrity: sha512-ml2DCKgBYjaSTnSfhlgJNaOxIwsWXXFdQkuotrNuVxOXzBY2qGnGbeZvE8925RqOmcL7dgi7ILvZ3iV7KOgvnA==, tarball: file:projects/arm-workspaces.tgz} + resolution: {integrity: sha512-WtBMuClZa6vT0ju0K65NztpljH40w+V5vKmOMUPK9vC0k2X7wxX13niHj6fZeyHftV0uAhK3rRZZjYIYVnr1rw==, tarball: file:projects/arm-workspaces.tgz} name: '@rush-temp/arm-workspaces' version: 0.0.0 dependencies: @@ -19909,7 +19910,7 @@ packages: dev: false file:projects/attestation.tgz: - resolution: {integrity: sha512-S4+RET61OboKlkCbVFuMQAwKSN2zLs3FcTZgdjO0uFskexGuKt7ZFfpeNJQeA0DgfkttUVoDmpFTI5DSCiIvPA==, tarball: file:projects/attestation.tgz} + resolution: {integrity: sha512-0kI30QHKBXk+W68K+zxIKPJWca0weJVb/pp/HR9iPyiQpzqPYrwbMSUbK2Z1AwmRx6AoWKXW49xwlLybTrkEPg==, tarball: file:projects/attestation.tgz} name: '@rush-temp/attestation' version: 0.0.0 dependencies: @@ -19961,7 +19962,7 @@ packages: dev: false file:projects/batch.tgz: - resolution: {integrity: sha512-qcejYVKun66XfHmA/hkE/MzrE/Wd7ZohaNc47LLKtziqFrTEbvhvHct55kMvhO5btpLaKyyY5h/DHxniRhBEqw==, tarball: file:projects/batch.tgz} + resolution: {integrity: sha512-ed24pRYe+m5nW118Ux5kuuHDi6kMlZ4Qm7V4d/RlZHUMZ7sRqJBQZOrbaTAeIvDardnSMcNixvohDhTKlovOPg==, tarball: file:projects/batch.tgz} name: '@rush-temp/batch' version: 0.0.0 dependencies: @@ -20002,7 +20003,7 @@ packages: dev: false file:projects/communication-alpha-ids.tgz: - resolution: {integrity: sha512-iUYWqI/PwHdHd4PpLPlBaIzTsyUOcTPCkIepenHDvHNu6Iy3QZpi0jYqo1GRbvIXMs2i8nQ4/WxAhUwADxvLGw==, tarball: file:projects/communication-alpha-ids.tgz} + resolution: {integrity: sha512-xFgJleznDehcuviTpsLqycCqPzUAqwPJ0E2Z0xdZcrNvEigbqrOj/drGbCv7YIvnFyBCO/xapXdLAYOm5ukuAQ==, tarball: file:projects/communication-alpha-ids.tgz} name: '@rush-temp/communication-alpha-ids' version: 0.0.0 dependencies: @@ -20231,7 +20232,7 @@ packages: dev: false file:projects/communication-identity.tgz: - resolution: {integrity: sha512-WKDtxUJqqvXMsdSa52wAn4azC0enIDOAdwEw5zMBZQm6BnBbauirwUVFcz6WW973ieqI31pHhue6zTAefwWTfQ==, tarball: file:projects/communication-identity.tgz} + resolution: {integrity: sha512-k6k745cwIrTlRp09oHrKDdBaGBTa7Hg2HmHAZoRzqbgS7rBgx7Pcdjacfs4NrPofMDzGsATT3LuwyMCDEvylLw==, tarball: file:projects/communication-identity.tgz} name: '@rush-temp/communication-identity' version: 0.0.0 dependencies: @@ -20327,7 +20328,7 @@ packages: dev: false file:projects/communication-job-router.tgz: - resolution: {integrity: sha512-jlO9QjK5W6b4aS+ABhwfwjecO7DG0i3iSpzAEeXKH+DR+tD8gEfi9OXiQrLbQpHSqrMf4XYtfU6dNA2AwXh9qw==, tarball: file:projects/communication-job-router.tgz} + resolution: {integrity: sha512-mrWimvzdQQ2oP/dvkEM0P3pKsYmsZAZF7VmyJ6lAStfZRAIwZLIbw7TIGfTxIdrLmi0Z7HQJpoRLC9At2UQSVw==, tarball: file:projects/communication-job-router.tgz} name: '@rush-temp/communication-job-router' version: 0.0.0 dependencies: @@ -20373,7 +20374,7 @@ packages: dev: false file:projects/communication-messages.tgz: - resolution: {integrity: sha512-MAIKLbEP+GCVWFg2oIMjZKZJDM/m9BUh5idjXIvPmDF1cWTS0ebUcTbNZOZSsMLDs6vlEj+JLtjreghnm3tauQ==, tarball: file:projects/communication-messages.tgz} + resolution: {integrity: sha512-0W4DsVHZHJYvVHCWLB2U4jta6l9Bs17F+B++0lekolDACQ6Mvjw4381+dcj03MgMIc97cOjk7G07s5YZ30mXkQ==, tarball: file:projects/communication-messages.tgz} name: '@rush-temp/communication-messages' version: 0.0.0 dependencies: @@ -20419,7 +20420,7 @@ packages: dev: false file:projects/communication-phone-numbers.tgz: - resolution: {integrity: sha512-Xb+Yw0lwlocVQeDFA/jNZvzdOU3j33WKDWOm0CrPPRLXEF2c1O0w8RJbKLrlQ7Pk9+dUeCs0gGzkKOA2/kE8kA==, tarball: file:projects/communication-phone-numbers.tgz} + resolution: {integrity: sha512-hRdt1H4gRCYl3EswQf98r+dTcXZAjsRVHSo0BYFMqhe7P855XD5WWC89RZJEY0qmkajuGmPRaJKSZRARYdUvRQ==, tarball: file:projects/communication-phone-numbers.tgz} name: '@rush-temp/communication-phone-numbers' version: 0.0.0 dependencies: @@ -20465,7 +20466,7 @@ packages: dev: false file:projects/communication-recipient-verification.tgz: - resolution: {integrity: sha512-t/dSvm83l91b6FK3+kH9Of9AiX5bzXCafc3Ozc4rrYa3RLo17slswJdH/eWYgibiNyf3/YpK59pNPWf92rffdQ==, tarball: file:projects/communication-recipient-verification.tgz} + resolution: {integrity: sha512-J+rtKd7sOJYyndWDR27PsojcmgR/hFyjqFpMCe+8K9dWL/1aSVcq8SgJrsN7wjX5d4F2RdHpQgrQX03MT4tfEg==, tarball: file:projects/communication-recipient-verification.tgz} name: '@rush-temp/communication-recipient-verification' version: 0.0.0 dependencies: @@ -20548,7 +20549,7 @@ packages: dev: false file:projects/communication-short-codes.tgz: - resolution: {integrity: sha512-GyoXHmXlQ4LSxjc8HzKSOz1kNAMGUZ5DPDh+jj/XwE7hZpoZ4JQlobh9xzBpkwfAMudYx1Pqrw0TbPxVyJRGIg==, tarball: file:projects/communication-short-codes.tgz} + resolution: {integrity: sha512-lsIHAuCOCp15qm4M/bW8noYmn5G7YNHGXXJMbRJpoF1xugHYd32txq9ncfkW736opZLogdl4g4BaP7Xz09jltg==, tarball: file:projects/communication-short-codes.tgz} name: '@rush-temp/communication-short-codes' version: 0.0.0 dependencies: @@ -20595,7 +20596,7 @@ packages: dev: false file:projects/communication-sms.tgz: - resolution: {integrity: sha512-hShG7UuPjkcZPi05sMJIIKzt7P8KxHVV8NFqfQFkJqZTqUpz/oX1qgIGF6qfeuRdlAgWHBO6Bm5dbvAB/27bLA==, tarball: file:projects/communication-sms.tgz} + resolution: {integrity: sha512-LKLE/O+Ik1n006WeJxC+plQO8u+4Afv3HIi61dH+4uPsZtPmODiCePKj/LOJ4lk+HMbvO1rMuA/FIFtfZ23xRg==, tarball: file:projects/communication-sms.tgz} name: '@rush-temp/communication-sms' version: 0.0.0 dependencies: @@ -20641,7 +20642,7 @@ packages: dev: false file:projects/communication-tiering.tgz: - resolution: {integrity: sha512-Gx+JUJpNjV1mZZiLy6bn+WknQlil9GipTAREI0F3CUfv3ptQ0HRF58MEOl2Em/k34ChET8Bd4BjQrbByAexSlg==, tarball: file:projects/communication-tiering.tgz} + resolution: {integrity: sha512-BWypMb8plmmmJEsL0pwLaKwyxs5PocxMyKUBQGAGR3hHDbBiXH6mxyx51fXa4Wr6XZRhn8nYYs9QOJTzpuYWqQ==, tarball: file:projects/communication-tiering.tgz} name: '@rush-temp/communication-tiering' version: 0.0.0 dependencies: @@ -20688,7 +20689,7 @@ packages: dev: false file:projects/communication-toll-free-verification.tgz: - resolution: {integrity: sha512-5dlVQHAIFCsmOM1Hjbnq/hx+h1HL5uBEYLs7OKQ75sEECEOYNItbISt14G/hUmgedeUo+MdUMcfbWsJSOoHFjg==, tarball: file:projects/communication-toll-free-verification.tgz} + resolution: {integrity: sha512-ZioTnRKuptXOXirUF/1bAhaRRjKUYu0UW+jUAGsEodkIYnfz24jbuTuzbn393sijtrTRdF+i7PVw1DTHPRm/bA==, tarball: file:projects/communication-toll-free-verification.tgz} name: '@rush-temp/communication-toll-free-verification' version: 0.0.0 dependencies: @@ -20732,7 +20733,7 @@ packages: dev: false file:projects/confidential-ledger.tgz: - resolution: {integrity: sha512-RS9NA+FZyxsiEJ5qT7QL2SMjx6oTJ3cT6L2stXjDw8TUwgpxE20tNQ1M1qU1kQzC3OvXeDNoIK49+siKZFJZQw==, tarball: file:projects/confidential-ledger.tgz} + resolution: {integrity: sha512-8fjMFjF5SoW8yrayja4pbxrjsxJdJMZRuUplkkv6lxJ5wjTZy1EIwJPAzxgUoTnNB1u/MoEPTzmNx7RJnwGgww==, tarball: file:projects/confidential-ledger.tgz} name: '@rush-temp/confidential-ledger' version: 0.0.0 dependencies: @@ -20763,7 +20764,7 @@ packages: dev: false file:projects/container-registry.tgz: - resolution: {integrity: sha512-wy/9SdJ0Aa3QtDo9n0BtE0pxHcjU9WCzTNOq2s3IpUjQqalYvCKockZSOJHbVBPu69Dx/c79boY2vIs67UVLAw==, tarball: file:projects/container-registry.tgz} + resolution: {integrity: sha512-jmM7LwjpJOtYestVY03GFx1ssRr5jWBw9/sxoIGmScTRQjJcTv5i8JzK0IqKm7/S7XsqLzXX3oBzaorftDdy+A==, tarball: file:projects/container-registry.tgz} name: '@rush-temp/container-registry' version: 0.0.0 dependencies: @@ -21269,7 +21270,7 @@ packages: dev: false file:projects/cosmos.tgz: - resolution: {integrity: sha512-BG2/F66EtJdYXB9BS5ncXfyl4gxmvR84N+dH6gAs8DGMweff3YRX7EmXb3DCcrfLgueG4g8AE+AShB+AELDOUA==, tarball: file:projects/cosmos.tgz} + resolution: {integrity: sha512-NEqtZrEtVRqcc1RrP9qCUnz4o0zgsC7tkoxjKPFZLBpTi69xVv26oJ7K5VrTLpU8teQ27nrsg54/EFibL1/TVQ==, tarball: file:projects/cosmos.tgz} name: '@rush-temp/cosmos' version: 0.0.0 dependencies: @@ -21344,7 +21345,7 @@ packages: dev: false file:projects/data-tables.tgz: - resolution: {integrity: sha512-GUoND/1zfLnVHc9TvBZo58JMS2xCmpHbs9YwV0UyCUkgC32Ah9CseHjUOBhEau4OJZd7GIqmx6PmNhvMqaAlJw==, tarball: file:projects/data-tables.tgz} + resolution: {integrity: sha512-X1zclHAGfTFnz6q1/ZFTUe4YrekWw6uMS2yKlLKco/56UIa1vn4eC2Q+pCg8jPbOBUdWA/f0OAdjhxboot56KQ==, tarball: file:projects/data-tables.tgz} name: '@rush-temp/data-tables' version: 0.0.0 dependencies: @@ -21389,7 +21390,7 @@ packages: dev: false file:projects/defender-easm.tgz: - resolution: {integrity: sha512-edWbdSpLv1D+o4+VTjMzLaXckmUqFJYRK6/D5psEoaSTTXSY31FYcxSPp+APpHpfReU1ncV/rLt7ICye5WEO3Q==, tarball: file:projects/defender-easm.tgz} + resolution: {integrity: sha512-BocgBDcvhUdkw/U4W+vt8WexyU396P1FcGpgdXZOQ3Y9Fe56tzVaHr4Y2P/ju4KbFc249kjnNVvl0byCKyIczg==, tarball: file:projects/defender-easm.tgz} name: '@rush-temp/defender-easm' version: 0.0.0 dependencies: @@ -21511,7 +21512,7 @@ packages: dev: false file:projects/developer-devcenter.tgz: - resolution: {integrity: sha512-mQIm2JCw/Gsg9qQrOO2tEyt46vf6Dn+UNZH4eLu2hYywu70OJfIdE2QRySOjGYSKkMaO+hvKHUHokLJS2u6soA==, tarball: file:projects/developer-devcenter.tgz} + resolution: {integrity: sha512-sZyITmh4h7E6XkOr1goePoOUzSZ3ljNiC95mbwBzaD92vb4L9xMmDhAEffwKCjZQ5yySLHeZV2OLOqO4g72r/Q==, tarball: file:projects/developer-devcenter.tgz} name: '@rush-temp/developer-devcenter' version: 0.0.0 dependencies: @@ -21552,7 +21553,7 @@ packages: dev: false file:projects/digital-twins-core.tgz: - resolution: {integrity: sha512-HgmXSGaWmjNqZ/wSUHa9QCILiaatflM3TufRLP2WNFRXrXMbmIeJObl+Iz5T59ftC/AJOGkUIR+GwFiDS+ESGw==, tarball: file:projects/digital-twins-core.tgz} + resolution: {integrity: sha512-K6z+PMb/YARqupOFlkcGUfXqjJUDXN8UZGXcN0r973IhyHnx4dlfDdDBeFFbPDYAMN8BDv1/6vedFVo7aKOc8g==, tarball: file:projects/digital-twins-core.tgz} name: '@rush-temp/digital-twins-core' version: 0.0.0 dependencies: @@ -21651,7 +21652,7 @@ packages: dev: false file:projects/event-hubs.tgz: - resolution: {integrity: sha512-6nKUp0FboUYDZKtlwJMJhj9xC1m1aWMtmZV4Dk3Ux2W3I09hBb3WNjlUjE2UliB8+UYvycenLO4SAaGLLesWGg==, tarball: file:projects/event-hubs.tgz} + resolution: {integrity: sha512-+HzH3P5PeM6fLWGWcyUDI/2d8ZPr9uOkjf5IMXXW+7viY/TpMMadf9ku/1GCqLksadjfRwGOJqfMJwVoXWYigw==, tarball: file:projects/event-hubs.tgz} name: '@rush-temp/event-hubs' version: 0.0.0 dependencies: @@ -21709,7 +21710,7 @@ packages: dev: false file:projects/eventgrid-namespaces.tgz: - resolution: {integrity: sha512-TpaQh2QLoRl7K9q2EkZ60Lj32gSFx/NLS5rS29J2XE98qB3zIn4Cq/fCehwjY95WIRDQA2lJ+atAJOUznLcuYA==, tarball: file:projects/eventgrid-namespaces.tgz} + resolution: {integrity: sha512-HCwtJrdHQd1ycp6VX+oKXCs0zuOELQtH1ynjLEIw3kixC5epadFFMYhWVibCJ1Km7SDTiejOWxkEUOq2FhWQTw==, tarball: file:projects/eventgrid-namespaces.tgz} name: '@rush-temp/eventgrid-namespaces' version: 0.0.0 dependencies: @@ -21758,7 +21759,7 @@ packages: dev: false file:projects/eventgrid-system-events.tgz: - resolution: {integrity: sha512-uUxURbiSr/6FqIrXwaQQUbDdaf1q1TMX2BHGFCRBBCfRzInC4XpanLZ4bVi5CzrzPiKyTp6j2bXxI2ZYVW93zQ==, tarball: file:projects/eventgrid-system-events.tgz} + resolution: {integrity: sha512-cDQRX9ZpRKDi02xJSpmxpF3UzmU/xCzxNPZnVRSoIupZ2EKWqKt9WEaQSydy/aNIzy2raMibWqyTO5Nf9gHuzg==, tarball: file:projects/eventgrid-system-events.tgz} name: '@rush-temp/eventgrid-system-events' version: 0.0.0 dependencies: @@ -21852,7 +21853,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-blob.tgz(chai@4.3.10): - resolution: {integrity: sha512-oZT3pkd7iP6/eDOzP1hMsPdZGr4uVa7kKAmcAPC66OtMfG8aGfMVlX99cXZREqNfQ/cycW9d6y/QLpYvKOts1g==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} + resolution: {integrity: sha512-m1V0PP5WR2Ox0RzHWDizwSFANg0zj8UuBqVt6ECtSO6DgfiCj9FuSaIpOKwhvb+prOV4GGC4IihtwBaORDQPGg==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} id: file:projects/eventhubs-checkpointstore-blob.tgz name: '@rush-temp/eventhubs-checkpointstore-blob' version: 0.0.0 @@ -21904,7 +21905,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-table.tgz(chai@4.3.10): - resolution: {integrity: sha512-qll9lPAi9k2zTGohWe4Gqkmz3ORfc9tVm0mSWLlRokBblMWy2Db/vynM3z8rUqKtAyFBC38rTGl2AdLCMP+Evw==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} + resolution: {integrity: sha512-aTiThbGjLc8XtCtTW8nlwpFiTXyhXPRPdynjmMoe8xmsJ6DOhQRuHkFH/FcfN7lh7W5wBJ9pQhtekB+RVT+EsQ==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} id: file:projects/eventhubs-checkpointstore-table.tgz name: '@rush-temp/eventhubs-checkpointstore-table' version: 0.0.0 @@ -21956,7 +21957,7 @@ packages: dev: false file:projects/functions-authentication-events.tgz: - resolution: {integrity: sha512-TnCtaJNI8rM3o46VQxH5c+zUnKf0ZpAYe8oKLJT8WZYcRWw6Ygli8D6KlTiTUMl0BDwnxpb39helhtVmAYQXFQ==, tarball: file:projects/functions-authentication-events.tgz} + resolution: {integrity: sha512-LHfQ4TU5puF3HT2KJsP6/629Ek6M91PnInZr+OnvQPKQ6yv9Q+Lx/GbKvcezZ/Ts2fo6IeyyuBEnerDQvcFWaQ==, tarball: file:projects/functions-authentication-events.tgz} name: '@rush-temp/functions-authentication-events' version: 0.0.0 dependencies: @@ -22002,7 +22003,7 @@ packages: dev: false file:projects/health-deidentification.tgz: - resolution: {integrity: sha512-3Zlz+188mWXrZxdoJl5fB0DlvQfS5l3ATHen6YEOqUABed6QWm9rUhlLPjaTg1AbasByRJgI3EMZ6VQt+4FjRQ==, tarball: file:projects/health-deidentification.tgz} + resolution: {integrity: sha512-FgUjMxR7C8Mxur4d4r3jwFVcGId46XQtMnkvz6z22uNgor23+FRbusECRKOtynej4fA68EV+psD3HgBofX1yoQ==, tarball: file:projects/health-deidentification.tgz} name: '@rush-temp/health-deidentification' version: 0.0.0 dependencies: @@ -22043,7 +22044,7 @@ packages: dev: false file:projects/health-insights-cancerprofiling.tgz: - resolution: {integrity: sha512-H08XezcxzfD0sYD5MN7Hjc+v4bkgCLHrMR83oFGLzM0NwIg13rEz2RNz0Ck6XZ93vjWkMkqDOm/Fh9/8eUWXsg==, tarball: file:projects/health-insights-cancerprofiling.tgz} + resolution: {integrity: sha512-YzMtdy+q9gAmqFbR22mib/GMo20oIYZUAddihjWPBr00RUNRL5k0alhI1/3hT8xsSnvqkNymZwqqfmxjpC4sVg==, tarball: file:projects/health-insights-cancerprofiling.tgz} name: '@rush-temp/health-insights-cancerprofiling' version: 0.0.0 dependencies: @@ -22091,7 +22092,7 @@ packages: dev: false file:projects/health-insights-clinicalmatching.tgz: - resolution: {integrity: sha512-FpINYkz1+xj/jYqYLTEhplutJt+LTmTfsptBZPW7IgIcfgPdOuwMc8/+QXq4RSy+XDrM8lxWXe/LdPzL1xSqpA==, tarball: file:projects/health-insights-clinicalmatching.tgz} + resolution: {integrity: sha512-oJiRB940+TJb5iK6Mmx8vGnK6twk6eYUdnPRrqSzTTDO+vYnA1epL9PgdPg4JtkHYq5YSQDxBJVro1t8J+sCFw==, tarball: file:projects/health-insights-clinicalmatching.tgz} name: '@rush-temp/health-insights-clinicalmatching' version: 0.0.0 dependencies: @@ -22139,7 +22140,7 @@ packages: dev: false file:projects/health-insights-radiologyinsights.tgz: - resolution: {integrity: sha512-oGIjzvhHIEzlxVQViYzJMUBcVCeq0rBKIGz7FXydAnYBH5VPPQDNIijXs2Jjm37wpj6KZt1DUHeu1ACErGKQXg==, tarball: file:projects/health-insights-radiologyinsights.tgz} + resolution: {integrity: sha512-YVldAnR672BIjQ5APmZiPdeeSTTE5JR4TxEQ9MaPjQn5f80H8zq2drSn+bDVdjTvXV92h/T+GnYShsaKaztBxA==, tarball: file:projects/health-insights-radiologyinsights.tgz} name: '@rush-temp/health-insights-radiologyinsights' version: 0.0.0 dependencies: @@ -22187,7 +22188,7 @@ packages: dev: false file:projects/identity-broker.tgz: - resolution: {integrity: sha512-jDesDQ2rJP0o85FLwuliapxSsTDhNrFvZXIZjga9/+pga+j9yrPoFEAeGCJYAIsyjRKUnDyQoJasjrdf5/cFIg==, tarball: file:projects/identity-broker.tgz} + resolution: {integrity: sha512-AQBiNaB80DZYZ60YqO0uJuMTvxymE/vTC0Xkl0NR0Im1FWTzBd5+ydSh7kye/jy0zHHltW+msY7EWtz+AlRW2A==, tarball: file:projects/identity-broker.tgz} name: '@rush-temp/identity-broker' version: 0.0.0 dependencies: @@ -22216,7 +22217,7 @@ packages: dev: false file:projects/identity-cache-persistence.tgz: - resolution: {integrity: sha512-qshsWWLQ0e/wFF+h7tR/BQL+wgTFwlbyHGio+vlwFapFnowgNhEgxU2A/IG8D+mhe+aS4BotojLHC+c0OiGRrQ==, tarball: file:projects/identity-cache-persistence.tgz} + resolution: {integrity: sha512-KHbqYaFZwaG1Vhk/Du+PZFWfPQOxAY9/bkl+oyMlWLKNV5BOZhekHfuZgXH5NledST6eq5pCakpIdPKiqmfI8w==, tarball: file:projects/identity-cache-persistence.tgz} name: '@rush-temp/identity-cache-persistence' version: 0.0.0 dependencies: @@ -22253,7 +22254,7 @@ packages: dev: false file:projects/identity-vscode.tgz: - resolution: {integrity: sha512-bO+Y8ejwVj7nN9x+mN23oNqk7/5c9gvxnc+LL8qaLWy0kHdNjz5FqM88j9Ri5ZluOjXsKxhPfUEOyKlep1HkWA==, tarball: file:projects/identity-vscode.tgz} + resolution: {integrity: sha512-Y+8vITqQkS0PWra0NVoyyiv6DSrkecNcVDPmchYqd3jLGBKCXCTpXDBgak5le8kyOf/7ZO0v3ch5C/SwRCJW9g==, tarball: file:projects/identity-vscode.tgz} name: '@rush-temp/identity-vscode' version: 0.0.0 dependencies: @@ -22346,7 +22347,7 @@ packages: dev: false file:projects/iot-device-update.tgz: - resolution: {integrity: sha512-6fyG/hM1qrm6ns2ZiV1MEo2OO9aty8GE2uLHkLVNg3rnUixQDRZxBDnhrCCboIOXlS2l04NUUB+2USiC+fs7VA==, tarball: file:projects/iot-device-update.tgz} + resolution: {integrity: sha512-ZeaxRDFBGWkckB4/kg3hSeLLxQ3YFBJNGU+jxLZnQZeAl6sc2gQP/yjdtQtQasxcb+6J3pLg+jy3K7EdzipChg==, tarball: file:projects/iot-device-update.tgz} name: '@rush-temp/iot-device-update' version: 0.0.0 dependencies: @@ -22439,7 +22440,7 @@ packages: dev: false file:projects/keyvault-admin.tgz: - resolution: {integrity: sha512-GEHtlO5HTTXaUApRibmBr0VKmTfAOAZGhIkvzBu93FEuuJ26iO2OWvRWzc+EubgcqwdBgQ+JBqc7NFsvFBHA0Q==, tarball: file:projects/keyvault-admin.tgz} + resolution: {integrity: sha512-bNyzpP8coTXk3Ec7mG//Q2ZYxAgU3VhuNCRMHH3PkqLhA7dxP+8x3ARJSFw5iQze+8Nx+8vcfmNLl4rJoLHlVA==, tarball: file:projects/keyvault-admin.tgz} name: '@rush-temp/keyvault-admin' version: 0.0.0 dependencies: @@ -22480,7 +22481,7 @@ packages: dev: false file:projects/keyvault-certificates.tgz: - resolution: {integrity: sha512-XNKFZfdh7XQto/ZVfRFTM07V062QctMmWJ9dKTPOBvQ+V+2x02T5AIIM+HzTm5MrmXQpyqxlXK5vO9IP8VH2CQ==, tarball: file:projects/keyvault-certificates.tgz} + resolution: {integrity: sha512-tQUslsD2OC0Kc9np9QpgKYnoclMT78HdhlZ3bL/B7nNzzObzcTNknQ3Iw8jpzPcUTpCccobZanSFKKOrFLPMDQ==, tarball: file:projects/keyvault-certificates.tgz} name: '@rush-temp/keyvault-certificates' version: 0.0.0 dependencies: @@ -22559,7 +22560,7 @@ packages: dev: false file:projects/keyvault-keys.tgz: - resolution: {integrity: sha512-sq5gKgFcGqZ8ivwP1fbiLvWeJ3EbklMHINp1ZgAeevvIiYuCoBN1sBwVX5yZneBbblFqHknmjTrgGUgXsCXq4A==, tarball: file:projects/keyvault-keys.tgz} + resolution: {integrity: sha512-42EuT5wcv9lPSxyJ3BqRRscPOwQFUIcje9ZX2QPtfdG/TfIop7sWgsN00bQnx+17N3uw9YushvqoskjgfAQUDQ==, tarball: file:projects/keyvault-keys.tgz} name: '@rush-temp/keyvault-keys' version: 0.0.0 dependencies: @@ -22606,7 +22607,7 @@ packages: dev: false file:projects/keyvault-secrets.tgz: - resolution: {integrity: sha512-pEjpXeg8BhzQrU0bFc2SFJy0Gvx7rk4cgWT8rFPsBiV0FvgLX9FU12g+G4kFx7LwTizJ6fXDOERa8vqLNb3gUg==, tarball: file:projects/keyvault-secrets.tgz} + resolution: {integrity: sha512-MWn/ZdZEIhSyLyoP2xXCV39TmOZAw2Z+J2KXpkrUOeOPvhCUimiVlHXIhIihM6bQsTk3Hzz60xa4fVI4iW9IVg==, tarball: file:projects/keyvault-secrets.tgz} name: '@rush-temp/keyvault-secrets' version: 0.0.0 dependencies: @@ -22642,7 +22643,7 @@ packages: dev: false file:projects/load-testing.tgz: - resolution: {integrity: sha512-s9r1btShxNY3xoiQTl3gCd+1mpNTN26rhzLwYbal4Ug0Iol0n7K6ZZU7AQIlUidKSHx0MqyK/uGmVXa5bP/b5A==, tarball: file:projects/load-testing.tgz} + resolution: {integrity: sha512-uPFHGCxVth5dqyOFKqtBeo3KdvnLlgQKP2lHSyqn2G+a7Nw3s+2fGkYiRuxO2kGibEuVZzBg4WJn972PIFzcCA==, tarball: file:projects/load-testing.tgz} name: '@rush-temp/load-testing' version: 0.0.0 dependencies: @@ -22748,7 +22749,7 @@ packages: dev: false file:projects/maps-geolocation.tgz: - resolution: {integrity: sha512-rvWHmz/syvAOFp86mwSueDxXPTQR0bYIMUXX+FtIMPhJ8lX1LPHG5/OiHpZcGaaHjmVi4QkAqeL1UbanzSC3hg==, tarball: file:projects/maps-geolocation.tgz} + resolution: {integrity: sha512-wOQ2imT7/Olm5oHjU36fcnh1UVyLhR85MtmOd+NG759aFlC9Dkdh+9zUlb7UKgAgfMa8QTp+NbNOjmwful4yUA==, tarball: file:projects/maps-geolocation.tgz} name: '@rush-temp/maps-geolocation' version: 0.0.0 dependencies: @@ -22795,7 +22796,7 @@ packages: dev: false file:projects/maps-render.tgz: - resolution: {integrity: sha512-S4dzdVwNeszvXdPfkm/MIYhJsLanzc/yJ/pZfX4TiWREq40Q0eFt3iNrRs1RYmtdkrLdSks03C5WX7eDacZBCg==, tarball: file:projects/maps-render.tgz} + resolution: {integrity: sha512-Q48y4j1cLw/8BaCOJGbB1Y6G4eEctFesdQjOR3avgv2moibwLajs0Em9duzmp381Dj3acqAOwIAkFRWm/trg/g==, tarball: file:projects/maps-render.tgz} name: '@rush-temp/maps-render' version: 0.0.0 dependencies: @@ -22842,7 +22843,7 @@ packages: dev: false file:projects/maps-route.tgz: - resolution: {integrity: sha512-8UzSXr5iK7NqYGVXPE1RtzlXoeiyeUFJm0FPgp2zCvDhSj/yzguktU19DGMoseH0YrZdhgdOic6v9bAKn6C/Tw==, tarball: file:projects/maps-route.tgz} + resolution: {integrity: sha512-3ZIFY8K9V/tkUD8EYh1UeMvWlLn8R4dhOr31KvnzIVANe/V7ZBeeehfNIefOrBBNDoboN7YkxZ6LlUWbqQ+fSw==, tarball: file:projects/maps-route.tgz} name: '@rush-temp/maps-route' version: 0.0.0 dependencies: @@ -22890,7 +22891,7 @@ packages: dev: false file:projects/maps-search.tgz: - resolution: {integrity: sha512-8+K9ms4YK3CWqCu3g8xPVFI38IailQauHXPnzDDmndMjezFRnKYyu3MHG3Hpb9oxIjjOla8YdDUvVnH7ygkFbA==, tarball: file:projects/maps-search.tgz} + resolution: {integrity: sha512-MmlNE+xPJI26I/xY7nIyZ0aiYyLp71Z2wyolWCKyeVDchqotjBzgTxqKY1DbBfYWLXQeJPs0W82IJoq4s6I8gQ==, tarball: file:projects/maps-search.tgz} name: '@rush-temp/maps-search' version: 0.0.0 dependencies: @@ -22938,7 +22939,7 @@ packages: dev: false file:projects/microsoft-playwright-testing.tgz: - resolution: {integrity: sha512-xpirfRdOWn32HnBb78HxKKbplBdg5dagpdT8y9oVXsQTw7/SQhrWosexS173D89jQxMS4jLoWnB+bX/MQMZZxw==, tarball: file:projects/microsoft-playwright-testing.tgz} + resolution: {integrity: sha512-+eJtd4HTQq83BPlgrMUX0f9gJNzMz2KVqqqyvUrIl1V5bIW4WlnB3ryHYIbSFR2fplCFn7gn236Xgoqt3Q2QaQ==, tarball: file:projects/microsoft-playwright-testing.tgz} name: '@rush-temp/microsoft-playwright-testing' version: 0.0.0 dependencies: @@ -23006,7 +23007,7 @@ packages: dev: false file:projects/mixed-reality-remote-rendering.tgz: - resolution: {integrity: sha512-w4llMPb5Wt4RMxvSFiFdLAqi7iQBr5TzzR09vcdqD30/nj3VgQFrjfmQu5U5ZkIIVS1IpEGkD43p4Y815f/1Gw==, tarball: file:projects/mixed-reality-remote-rendering.tgz} + resolution: {integrity: sha512-HmHF0CKUcjOnx+zfrbxAZ2NRoRhwg05LdKFuNtnTACVArPWWm9SpbOjSLS296zHNzwVfSV2YzZ4Ls0qKf6XtZQ==, tarball: file:projects/mixed-reality-remote-rendering.tgz} name: '@rush-temp/mixed-reality-remote-rendering' version: 0.0.0 dependencies: @@ -23089,7 +23090,7 @@ packages: dev: false file:projects/monitor-ingestion.tgz: - resolution: {integrity: sha512-jzEXSB2xH7ipc5y8Rk+RRUSHEMxeziZOJE8UZDtDKaL0EDAGsARF6C1WAX2lsOqT3fpyOA8xukhQ6UO6u37aFg==, tarball: file:projects/monitor-ingestion.tgz} + resolution: {integrity: sha512-BVSkaP7pIBSc+DkkYl/Y3+yUfYXr7PTKxDomB0Em4dJsheJeXhT48s2vfiDyTu2eA/teg/S4D8qs8WC6ivdg5g==, tarball: file:projects/monitor-ingestion.tgz} name: '@rush-temp/monitor-ingestion' version: 0.0.0 dependencies: @@ -23222,7 +23223,7 @@ packages: dev: false file:projects/monitor-query.tgz: - resolution: {integrity: sha512-42iEjln8SkZxD6NaLGZAKYwFsM9vwcIU4XC3i+Xva6cHDUXrv/OCcIU0ruFxxJWzCMx95hnwpz0/pxH0j1HA7g==, tarball: file:projects/monitor-query.tgz} + resolution: {integrity: sha512-gGKKPVas+OcuI+oID194EoBBjtIPVEkY+KNrs4a3aMgUOeZ7hxFQsOBrb/6SrS8AddwYhzbVfHItZ6tYsORCuw==, tarball: file:projects/monitor-query.tgz} name: '@rush-temp/monitor-query' version: 0.0.0 dependencies: @@ -23306,7 +23307,7 @@ packages: dev: false file:projects/openai.tgz: - resolution: {integrity: sha512-/yiMIb++mM6PTsnfJJKTIuEWVqcpZaXAhqvm7yCEomw6LbkvTpFu/KlU3RBY2Yw9JlAOMhpDjk9tJomf/wqPIg==, tarball: file:projects/openai.tgz} + resolution: {integrity: sha512-ryp9FwJiV8LG+/87VqFapwN2raP91si+sIYMSs2yMD8iEjaZVEwkz2agO2ol0W+BVk7b8hDpsCE81ThuTh5mMg==, tarball: file:projects/openai.tgz} name: '@rush-temp/openai' version: 0.0.0 dependencies: @@ -23392,7 +23393,7 @@ packages: dev: false file:projects/perf-ai-form-recognizer.tgz: - resolution: {integrity: sha512-Bg6ryJlc01GbyzatMcANSJ652rV2knY7tr3klWRwXjoDlyuvGCndo6OK3okSTtOQ+/yAtQinrg0Bnr8SLsdSkg==, tarball: file:projects/perf-ai-form-recognizer.tgz} + resolution: {integrity: sha512-UgfivXnq9yO6r2HLEg4W7ejsEeMqk6VYiJ59E3dMiHvuXAxjsbYrJOQL8etu/5N85RkuHUmGgHmHXgd1T4Aw5g==, tarball: file:projects/perf-ai-form-recognizer.tgz} name: '@rush-temp/perf-ai-form-recognizer' version: 0.0.0 dependencies: @@ -23412,7 +23413,7 @@ packages: dev: false file:projects/perf-ai-language-text.tgz: - resolution: {integrity: sha512-ltcxVmdtrazoRmFy0P9CogHT2dY4nNplFwBMobYGzG3esoPccSYqg0XtLqkb6dqrP6TL5PK/C8j9IFoK14Chmg==, tarball: file:projects/perf-ai-language-text.tgz} + resolution: {integrity: sha512-QktNFGHtIrskryuod2Zefg2B1UGUBzvHB/PHy0MWNaL+ZOYaxG9kKCL9FT8Il3H4w6hklcE8Qbd+EWrQQT8j/g==, tarball: file:projects/perf-ai-language-text.tgz} name: '@rush-temp/perf-ai-language-text' version: 0.0.0 dependencies: @@ -23451,7 +23452,7 @@ packages: dev: false file:projects/perf-ai-text-analytics.tgz: - resolution: {integrity: sha512-tL7ZBqnYY4Gh9MrKZCketkNBUCnkCh8AwgLuIX+YWaXcEoCdArW07beaFegD1Qeq7sJSfO9rlo+yUSi4bEwnug==, tarball: file:projects/perf-ai-text-analytics.tgz} + resolution: {integrity: sha512-S2//MjApHXQzD+u5gojkeWjOh4uC022o8cbshMw3Io+c33Nf6qu3zJxji4PsVYlQV0zZnVhr0ULh/pF+wTxgjQ==, tarball: file:projects/perf-ai-text-analytics.tgz} name: '@rush-temp/perf-ai-text-analytics' version: 0.0.0 dependencies: @@ -23595,7 +23596,7 @@ packages: dev: false file:projects/perf-identity.tgz: - resolution: {integrity: sha512-Ns7HHIRyp4xIWNYqye1Dc3ey0H9JWbwAwB2aH/FhaxnLCbgDXzdblm3BJRpI05aiZSm25sVtGyz/DJIAfOfS0A==, tarball: file:projects/perf-identity.tgz} + resolution: {integrity: sha512-Tm25eU++RHqNcknG6hehyQUtZiN22+/fqA7Y2R2I4doq9LmaNpWm+k9fktEPW0Udo0tg2gKcc/84dljluTO6Aw==, tarball: file:projects/perf-identity.tgz} name: '@rush-temp/perf-identity' version: 0.0.0 dependencies: @@ -23616,7 +23617,7 @@ packages: dev: false file:projects/perf-keyvault-certificates.tgz: - resolution: {integrity: sha512-798DoekIfnjLiRxREUVHdiLmHi4FJa70bGFOi4R6gxt69cgW57qwFi6ik8TP8+j8HxRRC0Fi+GoKy6zdV4Tn7Q==, tarball: file:projects/perf-keyvault-certificates.tgz} + resolution: {integrity: sha512-FLfFxRDdlKxMUXOwx3JNBfOXShTk96oPTdkI+MDfWct5iLo6ouaspEGW7FQ9XbgoruhLf8a2iVk5NlXwKKGMHw==, tarball: file:projects/perf-keyvault-certificates.tgz} name: '@rush-temp/perf-keyvault-certificates' version: 0.0.0 dependencies: @@ -23638,7 +23639,7 @@ packages: dev: false file:projects/perf-keyvault-keys.tgz: - resolution: {integrity: sha512-Go/Xxuo3RhYeJCUV/d0OP03qhmbpzXImO/z0QlJP4GTUsUBODXlC7wLOpsrBW0IM/sHRhzOFvZK1U9zsUU2SHg==, tarball: file:projects/perf-keyvault-keys.tgz} + resolution: {integrity: sha512-giSOVCyTfx79HDmxFFl7gj9FJpx4K9BNOiDRIOAJufuKoQEog3VExLt9+Gr+/v7LDnkRwXzTMoia9J5CgT6SUA==, tarball: file:projects/perf-keyvault-keys.tgz} name: '@rush-temp/perf-keyvault-keys' version: 0.0.0 dependencies: @@ -23660,7 +23661,7 @@ packages: dev: false file:projects/perf-keyvault-secrets.tgz: - resolution: {integrity: sha512-WSSooqKe/2x6VF+kdP+5KoSaxS1wyK9FFdB0o39jPrpYpZhdc42jsUj/nkDIqWo8KxHxkXO3ReMh5AisHQWqGw==, tarball: file:projects/perf-keyvault-secrets.tgz} + resolution: {integrity: sha512-axiLjz6sQo1R06CzuBk5hq5TKZIG6GEoeG7ASmfCIxw/ITIHysCoXsCZvYvgqGugG8gR0feJFAWuUZrDkh3iTQ==, tarball: file:projects/perf-keyvault-secrets.tgz} name: '@rush-temp/perf-keyvault-secrets' version: 0.0.0 dependencies: @@ -23682,7 +23683,7 @@ packages: dev: false file:projects/perf-monitor-ingestion.tgz: - resolution: {integrity: sha512-irk1RGl+xI9cPhLol4UgvBi2xR5hJuzRlcGd8VPsk6aBnpV5GtxX9I33sk4RdzQVBxpWqNscKUztIdE8PspfXw==, tarball: file:projects/perf-monitor-ingestion.tgz} + resolution: {integrity: sha512-cg5zwuxND8KBfNNmStTyRertrDOsYKHMRbJOJ0UxuNVVffLMbtzzWl1a+itccxKQCgeBBZCDMwKAFb1gn8U86A==, tarball: file:projects/perf-monitor-ingestion.tgz} name: '@rush-temp/perf-monitor-ingestion' version: 0.0.0 dependencies: @@ -23721,7 +23722,7 @@ packages: dev: false file:projects/perf-monitor-query.tgz: - resolution: {integrity: sha512-LS97r5Sciwlw7sZP2DfzR3WUaut3mhkilPFEpx3dNivTA27i2zf6/wgz+lcYV8QG57RJzgziI1p3+HuXIi/1Jg==, tarball: file:projects/perf-monitor-query.tgz} + resolution: {integrity: sha512-ANYlPKIZlyM7HOpJTpjnSQ2XDTXy9ebcfJscqy4O0j09EqHdxlh6jphIszNv+JgpNVnP82rlMIfoJRkd9s589A==, tarball: file:projects/perf-monitor-query.tgz} name: '@rush-temp/perf-monitor-query' version: 0.0.0 dependencies: @@ -23741,7 +23742,7 @@ packages: dev: false file:projects/perf-schema-registry-avro.tgz: - resolution: {integrity: sha512-3Npq32S7gNHDWvFJgKtgi2rcckZ2dkbzQc7y7IVUnRx5kRMhEObj8Y+y8UmVyWXqOig0Z6Q1lwTBCVbjF2Ex9Q==, tarball: file:projects/perf-schema-registry-avro.tgz} + resolution: {integrity: sha512-BYktlRuuSmlAOIP1PrLlPbBtElqtzS7ENRY8P1Dh/MCAZ0jpoShXXJjViNP5XGg7+n35+FeeNT+8LPsMPedj+A==, tarball: file:projects/perf-schema-registry-avro.tgz} name: '@rush-temp/perf-schema-registry-avro' version: 0.0.0 dependencies: @@ -23762,7 +23763,7 @@ packages: dev: false file:projects/perf-search-documents.tgz: - resolution: {integrity: sha512-qJs9hKYvk0FMICJfbp+uWd4i1WNU9a6UGPyV6YOCeOkWcoT+Ov/YMESkVi12X0U8ot6Iv2yTg3IAhP/RaT22fQ==, tarball: file:projects/perf-search-documents.tgz} + resolution: {integrity: sha512-1TcM5NDFQf/cfuMbuROrfQ5CueOvvQ58+Il8ZDKhncxSjujXRDZf7u4QjUf4SwTZPcoBDTysbjJCTNavy8usuQ==, tarball: file:projects/perf-search-documents.tgz} name: '@rush-temp/perf-search-documents' version: 0.0.0 dependencies: @@ -23861,7 +23862,7 @@ packages: dev: false file:projects/perf-template.tgz: - resolution: {integrity: sha512-oK3lt2w3mvq8ZKT420CX6VAM8m7mM/bQDlLfCjFpEXdOOiMhf5b5Mc5PzE9WKwGiOMjcCURLlEZAtFrUOOQ8Pg==, tarball: file:projects/perf-template.tgz} + resolution: {integrity: sha512-RKt9bxt1yDQgVHXTp/x0VlGfZgWs1ZpE8j0di0ZAkSt96+egaS+ODThP40s3J3Q7NObgfu3OEjQweIHZvpT7bQ==, tarball: file:projects/perf-template.tgz} name: '@rush-temp/perf-template' version: 0.0.0 dependencies: @@ -23882,7 +23883,7 @@ packages: dev: false file:projects/purview-administration.tgz: - resolution: {integrity: sha512-+Lo5sBSgG1iiTY7lSYjZGMPYp7cJIY99qUFFD0CcqDN+57oO+8Z5PuFerCr5wsqG/KGzjz1DZsU4y4HAuQC5JA==, tarball: file:projects/purview-administration.tgz} + resolution: {integrity: sha512-MQS/1cqX9HyQEgBe+B6AvE12gF2fTgsWgdcrv8tQQSmfAS2waa6en+o2O57Phv6EQkyP4l62Ef1PrPuFDInrVA==, tarball: file:projects/purview-administration.tgz} name: '@rush-temp/purview-administration' version: 0.0.0 dependencies: @@ -23927,7 +23928,7 @@ packages: dev: false file:projects/purview-catalog.tgz: - resolution: {integrity: sha512-1QC+PgsqwFAUYHIGauIXvA+aHwyltPYq/Jh3vdqAze2nQH7rSHtI6H+uv5OtCK0fJbvyCLeLGtt4QedsbmImAA==, tarball: file:projects/purview-catalog.tgz} + resolution: {integrity: sha512-HyhHGxEDc6/0wgiTZS0qUuzNo/ckWojvdWDRn4D3hwp287JxGcVMAoaBr8wiJuxcunzgqDh7TmUViDPD40Wpzg==, tarball: file:projects/purview-catalog.tgz} name: '@rush-temp/purview-catalog' version: 0.0.0 dependencies: @@ -23973,7 +23974,7 @@ packages: dev: false file:projects/purview-datamap.tgz: - resolution: {integrity: sha512-j9Fyp+CS073IEyhNcDxDP96DyFZl1Uw/iUkacRjZR2GDdCoJK2s15tevR980Ns6OE4wC0Hd0NErCT+ch+mU8fQ==, tarball: file:projects/purview-datamap.tgz} + resolution: {integrity: sha512-pQ47LMlb1COoISRPdklUM1w17lO1jYO+UweXkhHquSXev36+mXwEVe6vDLBzJMNjjClsJGjpcrQTnQ7dswtTHQ==, tarball: file:projects/purview-datamap.tgz} name: '@rush-temp/purview-datamap' version: 0.0.0 dependencies: @@ -24019,7 +24020,7 @@ packages: dev: false file:projects/purview-scanning.tgz: - resolution: {integrity: sha512-F6fMaifF+UZYMmQL6L82h0U82uPvq804dznj6nyAT6HTs/QArgOPT3PRW5yfjYtjglkOneAFR+uYGEF4M3bbRA==, tarball: file:projects/purview-scanning.tgz} + resolution: {integrity: sha512-TWUbAABMm/tGNI1/jrLxkykfoRupx0+xvokbeyyvAskamJsPv31DWAGzxQRyt5fTc3UX85HI+pzRX5N/bVY2bw==, tarball: file:projects/purview-scanning.tgz} name: '@rush-temp/purview-scanning' version: 0.0.0 dependencies: @@ -24064,7 +24065,7 @@ packages: dev: false file:projects/purview-sharing.tgz: - resolution: {integrity: sha512-rESQag7jacmeVbqm1SUYRzWVUN2EeKX9CKhB4p31mp+hyCvbR4YuKm1nme32UX1Y/XgmTu976kuud6vK17zKvw==, tarball: file:projects/purview-sharing.tgz} + resolution: {integrity: sha512-J+C4imnoxnciqSsPoGM1m680rmJHeUOEM4IoJcpg6jG3VNLXedPB37yTpVxY6tqNnVHxgmcROH9Bjl5kbDfF5g==, tarball: file:projects/purview-sharing.tgz} name: '@rush-temp/purview-sharing' version: 0.0.0 dependencies: @@ -24112,7 +24113,7 @@ packages: dev: false file:projects/purview-workflow.tgz: - resolution: {integrity: sha512-WDNMrXBUnadgzoHoLWsuCaOPMiNG9J3Zo50j2MA6AGi7sQS2SXC+iks3aYrdvXnI1Gdwgu7bmcuFOVSokLYpjg==, tarball: file:projects/purview-workflow.tgz} + resolution: {integrity: sha512-++OASiOLQE+9J8Ufg7LG3EAZmySKvRn9TQA80Vns+Kd55R8mWohlXQ0gM6528LlBJrgWbk2fkjC9j2QlDhHIaA==, tarball: file:projects/purview-workflow.tgz} name: '@rush-temp/purview-workflow' version: 0.0.0 dependencies: @@ -24158,7 +24159,7 @@ packages: dev: false file:projects/quantum-jobs.tgz: - resolution: {integrity: sha512-EyI5vM1la+ICxSer0h+O6kaHVTU/DBzZqUolZH+hElzKDiXmpxXpqD2P7x/ZZoXFHSKwArFmu5I6kYz/75IY9w==, tarball: file:projects/quantum-jobs.tgz} + resolution: {integrity: sha512-IlA2RIZlXWxllZmxrnOyubOy08TGdYjzilmU9iXQ7HgIP+516WI8kiwDt9H/LE568QPmkhyUonpRC8BTBOOw3g==, tarball: file:projects/quantum-jobs.tgz} name: '@rush-temp/quantum-jobs' version: 0.0.0 dependencies: @@ -24204,7 +24205,7 @@ packages: dev: false file:projects/schema-registry-avro.tgz: - resolution: {integrity: sha512-CSM6bUuSWAB1vosfROpbOfdPvZUiA4b6ylTfPRMSyVUV0A3aW2Xv0OnM/dmjmFv2bXj7xA0lLFiyJ76YKrZObg==, tarball: file:projects/schema-registry-avro.tgz} + resolution: {integrity: sha512-/vA4YkOsB+M+MWRQM7X4cARPyKJL0zF+uZw2vA1wl4TMcPV1ZxCJX6n/mokhGcsdJBJ5K9XkAQ+KjGP910v+Sg==, tarball: file:projects/schema-registry-avro.tgz} name: '@rush-temp/schema-registry-avro' version: 0.0.0 dependencies: @@ -24258,7 +24259,7 @@ packages: dev: false file:projects/schema-registry-json.tgz: - resolution: {integrity: sha512-2f41GQADPD/ogg/63PuUCaPrDgUyh2c8rFdW0PkSfoud/yxXmrhAQsM5kuDQl8tyCtdxtIByghnxme6RrII5+g==, tarball: file:projects/schema-registry-json.tgz} + resolution: {integrity: sha512-zMhIdAv1iElRZPhOnMULxuEaX0E9jb2JPJKcoPbWC75e9IvOmBH/0AX2XlHSFrnooDAaqCtFcaRalQKoE+3OIQ==, tarball: file:projects/schema-registry-json.tgz} name: '@rush-temp/schema-registry-json' version: 0.0.0 dependencies: @@ -24303,7 +24304,7 @@ packages: dev: false file:projects/schema-registry.tgz: - resolution: {integrity: sha512-/oTB4TYqKdwtQtHiFtbSRPDgyOLhIOAM8858HpqnOiyH7XbQOomvybRhcCA1wzGd8HxyikQHw/a6EK0rFWOIjw==, tarball: file:projects/schema-registry.tgz} + resolution: {integrity: sha512-yA5edB/kaTLT3QHClIRzUorQQEskuZdIkFIFTNVtpOP+aT+qRZIaTDQfbjpDnNBViDpC9IZWkktU3NOsUUss5A==, tarball: file:projects/schema-registry.tgz} name: '@rush-temp/schema-registry' version: 0.0.0 dependencies: @@ -24344,7 +24345,7 @@ packages: dev: false file:projects/search-documents.tgz: - resolution: {integrity: sha512-OsJFQ32sOfN2koO/FiVq5Vz20h8vtW1p+Wkxw3axa8lzMhxfb1Nq5IcvOFLvWx2/WleRt4Sll1EgpR9K/Q1Vjg==, tarball: file:projects/search-documents.tgz} + resolution: {integrity: sha512-JZPvnO6/Jcoxq9ZfligECbNVtoAJ5aOCUDV1I9iXoZhk9EAjp6dQWLqX8UWKiMWQBnMl/BT2DMbgOUbdUiS0/w==, tarball: file:projects/search-documents.tgz} name: '@rush-temp/search-documents' version: 0.0.0 dependencies: @@ -24393,7 +24394,7 @@ packages: dev: false file:projects/service-bus.tgz: - resolution: {integrity: sha512-R0M+BLwA7P9dfld21J2xOS7lPwHPk5T9WCtOeZakFY8YtVRvbnoTdza5C/cQPVVmHRjzQxbumDhrch//tT/nSg==, tarball: file:projects/service-bus.tgz} + resolution: {integrity: sha512-AWZZkHqT/9iI7REatPivhaFY9CpXVZ3RTAZ2cDfUpr2rD2AkGsC7xlK/m7hfiP+KpKF+CHSVKrqoLfDmscKiJg==, tarball: file:projects/service-bus.tgz} name: '@rush-temp/service-bus' version: 0.0.0 dependencies: @@ -24507,7 +24508,7 @@ packages: dev: false file:projects/storage-blob.tgz: - resolution: {integrity: sha512-Rag6sV6e/oyzaz5WXpyCyg36wbMeSfgivyQciXwZIKkV1SstpChHwbnfb9zPrdMa9TrpYMwe5yis7kUonlm0HA==, tarball: file:projects/storage-blob.tgz} + resolution: {integrity: sha512-44jBwMRnnOdvjj6/sg0immrMOOV+Wn5yWF8CmEk2OcW9U2hJ1pA28kIcgYfQ1uu8JC+SgsadHyOthyUh3SKk0w==, tarball: file:projects/storage-blob.tgz} name: '@rush-temp/storage-blob' version: 0.0.0 dependencies: @@ -24555,7 +24556,7 @@ packages: dev: false file:projects/storage-file-datalake.tgz: - resolution: {integrity: sha512-FC/2g+ENPQlUMKPrj3Nm2p9penM3sSaIAbZw01qhZUjDQ+tVAlecwqqfQLcAk8qh82sJ9vd4GByEduRHyzh4kA==, tarball: file:projects/storage-file-datalake.tgz} + resolution: {integrity: sha512-lIhrv5ADPLnWdXWmlUm0vaygykPAZ486DxKvritXwkjGMSMEre3KKyhyu/nMSk5cMYuDBKnI8ca1qyATmmsJPA==, tarball: file:projects/storage-file-datalake.tgz} name: '@rush-temp/storage-file-datalake' version: 0.0.0 dependencies: @@ -24606,7 +24607,7 @@ packages: dev: false file:projects/storage-file-share.tgz: - resolution: {integrity: sha512-GuFyt0d1m2oDh+TuXVpczjUZCwDnEzFgIoq2AHS5ZiB/R5XeCofIDIFQQJQaCuUtY39c6ul4aX5uCP1B8rLN0g==, tarball: file:projects/storage-file-share.tgz} + resolution: {integrity: sha512-HyJ2/CF0HL9Setq4V72wicPSUYTG08XKQA4+3iuiwonzYn5MJR4GNtbNI6yeHqCztzcAEbVHobVls4zB99HN0g==, tarball: file:projects/storage-file-share.tgz} name: '@rush-temp/storage-file-share' version: 0.0.0 dependencies: @@ -24698,7 +24699,7 @@ packages: dev: false file:projects/storage-queue.tgz: - resolution: {integrity: sha512-IePQwAAuWIRX+Uvxr7M1JRQIhzkotL9NYuw5L8zmuzay7pXXiZUHZed7ghZ56YESovhpwqGm5qwtrYwu4mDl4Q==, tarball: file:projects/storage-queue.tgz} + resolution: {integrity: sha512-n5kEh4aa3dbN0WbpmR2/NUsqiUYExzquaMl7WUIWXjG1AxNiJvB+DMAD8YBLPnKozdIXZL8/R6xXV5i5d8+aEQ==, tarball: file:projects/storage-queue.tgz} name: '@rush-temp/storage-queue' version: 0.0.0 dependencies: @@ -24791,7 +24792,7 @@ packages: dev: false file:projects/synapse-access-control.tgz: - resolution: {integrity: sha512-9QtpFkHrrk+oSh/EPshLaS7q0EU4JlC8oGXP0Wtnhz/vvANql8qUi3CfFB4r/VzcQRGQQufhp+E27fRRbjZUOA==, tarball: file:projects/synapse-access-control.tgz} + resolution: {integrity: sha512-xBRwQr0VlPm77nkHjk85tPySwz44jLWlYHLl6zaKsmqVbQ6ZKVA4qBQNflmg4/ZW4nqWO9bypiSLt7LyUBTQLQ==, tarball: file:projects/synapse-access-control.tgz} name: '@rush-temp/synapse-access-control' version: 0.0.0 dependencies: @@ -24841,7 +24842,7 @@ packages: dev: false file:projects/synapse-artifacts.tgz: - resolution: {integrity: sha512-HYsAX3ou8HzMoiOnGC8uxCTjvSAQJ+YzovfPbRtv2GuAN5OcOdKvNulIwbKyIKWixrfUBDqvXcWRHdzFpIKU2g==, tarball: file:projects/synapse-artifacts.tgz} + resolution: {integrity: sha512-y36pCAWl7KhbzL5FDLzEJ2Y6WeiQzKDs+MjS+6Ou690hXc/VA09CEty/FUNnMUTUBFbscfy6IQDhSnWeDwmYbA==, tarball: file:projects/synapse-artifacts.tgz} name: '@rush-temp/synapse-artifacts' version: 0.0.0 dependencies: @@ -25062,7 +25063,7 @@ packages: dev: false file:projects/template.tgz: - resolution: {integrity: sha512-qseFMv7dU409oMyS9L9XyK3qTP+dUvmYNe27taFStTecL5Iglm+3icDkMQgEzxFV7XZxHlKK2bI+j5k5LT0n3g==, tarball: file:projects/template.tgz} + resolution: {integrity: sha512-CInlxrzq1puqe+ArK28Lpe8iIgujEauSoiWX+bTL/RvOu0cdr1CrFeZThotp5Vu78VtamGMrICDmnALRq0lbxQ==, tarball: file:projects/template.tgz} name: '@rush-temp/template' version: 0.0.0 dependencies: @@ -25105,7 +25106,7 @@ packages: dev: false file:projects/test-credential.tgz: - resolution: {integrity: sha512-z0h2+PnicCgLrh3QclZVb/npXPzYeCPjyaoFJqK0r04uK7ke42Ge8XNx++ejWYdefP9vg43CAa4q0y6cA+9kKA==, tarball: file:projects/test-credential.tgz} + resolution: {integrity: sha512-aArHiEcfPNEaUDPnLrqSzBLMcl5nSy6OfetgB2G9uroK4tEW/9RJN6Y+6GebyqK6bzH0RjRQHFihl4wuXSuN0g==, tarball: file:projects/test-credential.tgz} name: '@rush-temp/test-credential' version: 0.0.0 dependencies: diff --git a/sdk/face/ai-vision-face-rest/CHANGELOG.md b/sdk/face/ai-vision-face-rest/CHANGELOG.md index 23136309cfdc..bccd9b1d2913 100644 --- a/sdk/face/ai-vision-face-rest/CHANGELOG.md +++ b/sdk/face/ai-vision-face-rest/CHANGELOG.md @@ -1,33 +1,264 @@ -# Release History - -## 1.0.0-beta.2 (Unreleased) - -### Features Added - -### Breaking Changes - -### Bugs Fixed - -### Other Changes - -## 1.0.0-beta.1 (2024-05-23) - -This is the first preview of the Azure Face Service client library `@azure-rest/ai-vision-face` that follows the [TypeScript Azure SDK Design Guidelines](https://azure.github.io/azure-sdk/typescript_introduction.html). -This library replaces the package [@azure/cognitiveservices-face](https://www.npmjs.com/package/@azure/cognitiveservices-face). - -This package's [documentation](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/README.md) and [samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/samples) demonstrate the new API. - +## 1.0.0-beta.1 (2024-10-08) + ### Features Added -These are the new features not supported by the old package [@azure/cognitiveservices-face](https://www.npmjs.com/package/@azure/cognitiveservices-face). - -- Added support for Liveness Detection. -- Added support for `Person` and `DynamicPersonGroup` operations. -- Added support for face recognition with `PersonDirectory` by passing `IdentifyFromPersonDirectoryParameters` or `IdentifyFromDynamicPersonGroupParameters` to `/identify`. -- Added support for authentication with Microsoft Entra ID using `DefaultAzureCredential` from `@azure/identity`. + - Added operation group GetSessionImage + - Added Interface AddFaceFromUrlRequest + - Added Interface CreateCollectionRequest + - Added Interface CreateLivenessWithVerifySessionJsonContent + - Added Interface CreateLivenessWithVerifySessionMultipartContentParametersPartDescriptor + - Added Interface CreateLivenessWithVerifySessionMultipartContentVerifyImagePartDescriptor + - Added Interface DetectFromSessionImageId200Response + - Added Interface DetectFromSessionImageIdBodyParam + - Added Interface DetectFromSessionImageIdDefaultHeaders + - Added Interface DetectFromSessionImageIdDefaultResponse + - Added Interface DetectFromSessionImageIdMediaTypesParam + - Added Interface DetectFromSessionImageIdQueryParam + - Added Interface DetectFromSessionImageIdQueryParamProperties + - Added Interface FaceUserData + - Added Interface GetSessionImage200Headers + - Added Interface GetSessionImage200Response + - Added Interface GetSessionImageDefaultHeaders + - Added Interface GetSessionImageDefaultResponse + - Added Interface UserDefinedFields + - Added Interface UserDefinedFieldsForUpdate + - Added Type Alias CreateLivenessWithVerifySessionMultipartContent + - Added Type Alias DetectFromSessionImageIdParameters + - Added Type Alias GetSessionImageParameters + - Added Type Alias LivenessModel + - Interface CreateLivenessSessionContent has a new optional parameter enableSessionImage + - Interface CreateLivenessSessionContent has a new optional parameter livenessSingleModalModel + - Interface LivenessSessionAuditEntryOutput has a new optional parameter sessionImageId + - Interface LivenessSessionAuditEntryOutput has a new optional parameter verifyImageHash ### Breaking Changes -- This library supports only the Azure AI Face v1.1-preview.1 API, whose data models are not compatible with the v1.0 API used by [@azure/cognitiveservices-face](https://www.npmjs.com/package/@azure/cognitiveservices-face). -- This library follows the design of [REST client](https://devblogs.microsoft.com/azure-sdk/azure-rest-libraries-for-javascript/), which is essentially different from [@azure/cognitiveservices-face](https://www.npmjs.com/package/@azure/cognitiveservices-face). -- The Snapshot operations are all removed as [the Snapshot API is no longer supported](https://azure.microsoft.com/updates/facelimitedaccess/). + - Operation AddFaceListFaceFromUrl.post has a new signature + - Operation AddFaceListFaceFromUrl.post has a new signature + - Operation AddFaceListFaceFromUrl.post has a new signature + - Operation AddLargeFaceListFaceFromUrl.post has a new signature + - Operation AddLargeFaceListFaceFromUrl.post has a new signature + - Operation AddLargeFaceListFaceFromUrl.post has a new signature + - Operation AddLargePersonGroupPersonFaceFromUrl.post has a new signature + - Operation AddLargePersonGroupPersonFaceFromUrl.post has a new signature + - Operation AddLargePersonGroupPersonFaceFromUrl.post has a new signature + - Operation AddPersonFace.post has a new signature + - Operation AddPersonFace.post has a new signature + - Operation AddPersonFace.post has a new signature + - Operation AddPersonGroupPersonFaceFromUrl.post has a new signature + - Operation AddPersonGroupPersonFaceFromUrl.post has a new signature + - Operation AddPersonGroupPersonFaceFromUrl.post has a new signature + - Operation CreateDynamicPersonGroupWithPerson.patch has a new signature + - Operation CreateDynamicPersonGroupWithPerson.patch has a new signature + - Operation CreateDynamicPersonGroupWithPerson.patch has a new signature + - Operation CreateDynamicPersonGroupWithPerson.patch has a new signature + - Operation CreateDynamicPersonGroupWithPerson.put has a new signature + - Operation CreateDynamicPersonGroupWithPerson.put has a new signature + - Operation CreateDynamicPersonGroupWithPerson.put has a new signature + - Operation CreateDynamicPersonGroupWithPerson.put has a new signature + - Operation CreateFaceList.patch has a new signature + - Operation CreateFaceList.put has a new signature + - Operation CreateLargeFaceList.patch has a new signature + - Operation CreateLargeFaceList.put has a new signature + - Operation CreateLargePersonGroup.patch has a new signature + - Operation CreateLargePersonGroup.put has a new signature + - Operation CreateLargePersonGroupPerson.post has a new signature + - Operation CreateLivenessSession.post has a new signature + - Operation CreateLivenessWithVerifySessionWithVerifyImage.post has a new signature + - Operation CreateLivenessWithVerifySessionWithVerifyImage.post has a new signature + - Operation CreateLivenessWithVerifySessionWithVerifyImage.post has a new signature + - Operation CreatePerson.post has a new signature + - Operation CreatePersonGroup.patch has a new signature + - Operation CreatePersonGroup.put has a new signature + - Operation CreatePersonGroupPerson.post has a new signature + - Operation DeleteLargeFaceListFace.patch has a new signature + - Operation DeleteLargePersonGroupPerson.patch has a new signature + - Operation DeleteLargePersonGroupPersonFace.patch has a new signature + - Operation DeletePerson.patch has a new signature + - Operation DeletePersonFace.patch has a new signature + - Operation DeletePersonGroupPerson.patch has a new signature + - Operation DeletePersonGroupPersonFace.patch has a new signature + - Operation DetectFromUrl.post has a new signature + - Operation DetectFromUrl.post has a new signature + - Operation DetectFromUrl.post has a new signature + - Operation DetectFromUrl.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation FindSimilar.post has a new signature + - Operation Group.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation IdentifyFromPersonGroup.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Operation VerifyFaceToFace.post has a new signature + - Parameter body of interface AddFaceListFaceFromUrlBodyParam is now required + - Parameter body of interface AddLargeFaceListFaceFromUrlBodyParam is now required + - Parameter body of interface AddLargePersonGroupPersonFaceFromUrlBodyParam is now required + - Parameter body of interface AddPersonFaceFromUrlBodyParam is now required + - Parameter body of interface AddPersonGroupPersonFaceFromUrlBodyParam is now required + - Parameter body of interface CreateDynamicPersonGroupBodyParam is now required + - Parameter body of interface CreateDynamicPersonGroupWithPersonBodyParam is now required + - Parameter body of interface CreateFaceListBodyParam is now required + - Parameter body of interface CreateLargeFaceListBodyParam is now required + - Parameter body of interface CreateLargePersonGroupBodyParam is now required + - Parameter body of interface CreateLargePersonGroupPersonBodyParam is now required + - Parameter body of interface CreateLivenessSessionBodyParam is now required + - Parameter body of interface CreateLivenessWithVerifySessionBodyParam is now required + - Parameter body of interface CreateLivenessWithVerifySessionWithVerifyImageBodyParam is now required + - Parameter body of interface CreatePersonBodyParam is now required + - Parameter body of interface CreatePersonGroupBodyParam is now required + - Parameter body of interface CreatePersonGroupPersonBodyParam is now required + - Parameter body of interface DetectFromUrlBodyParam is now required + - Parameter body of interface FindSimilarBodyParam is now required + - Parameter body of interface FindSimilarFromFaceListBodyParam is now required + - Parameter body of interface FindSimilarFromLargeFaceListBodyParam is now required + - Parameter body of interface GroupBodyParam is now required + - Parameter body of interface IdentifyFromDynamicPersonGroupBodyParam is now required + - Parameter body of interface IdentifyFromLargePersonGroupBodyParam is now required + - Parameter body of interface IdentifyFromPersonDirectoryBodyParam is now required + - Parameter body of interface IdentifyFromPersonGroupBodyParam is now required + - Parameter body of interface UpdateDynamicPersonGroupBodyParam is now required + - Parameter body of interface UpdateDynamicPersonGroupWithPersonChangesBodyParam is now required + - Parameter body of interface UpdateFaceListBodyParam is now required + - Parameter body of interface UpdateLargeFaceListBodyParam is now required + - Parameter body of interface UpdateLargeFaceListFaceBodyParam is now required + - Parameter body of interface UpdateLargePersonGroupBodyParam is now required + - Parameter body of interface UpdateLargePersonGroupPersonBodyParam is now required + - Parameter body of interface UpdateLargePersonGroupPersonFaceBodyParam is now required + - Parameter body of interface UpdatePersonBodyParam is now required + - Parameter body of interface UpdatePersonFaceBodyParam is now required + - Parameter body of interface UpdatePersonGroupBodyParam is now required + - Parameter body of interface UpdatePersonGroupPersonBodyParam is now required + - Parameter body of interface UpdatePersonGroupPersonFaceBodyParam is now required + - Parameter body of interface VerifyFaceToFaceBodyParam is now required + - Parameter body of interface VerifyFromLargePersonGroupBodyParam is now required + - Parameter body of interface VerifyFromPersonDirectoryBodyParam is now required + - Parameter body of interface VerifyFromPersonGroupBodyParam is now required + - Type of parameter body of interface AddFaceListFaceFromUrlBodyParam is changed from { + url: string; + } to AddFaceFromUrlRequest + - Type of parameter body of interface AddLargeFaceListFaceFromUrlBodyParam is changed from { + url: string; + } to AddFaceFromUrlRequest + - Type of parameter body of interface AddLargePersonGroupPersonFaceFromUrlBodyParam is changed from { + url: string; + } to AddFaceFromUrlRequest + - Type of parameter body of interface AddPersonGroupPersonFaceFromUrlBodyParam is changed from { + url: string; + } to AddFaceFromUrlRequest + - Type of parameter body of interface CreateDynamicPersonGroupBodyParam is changed from { + name: string; + userData?: string; + } to UserDefinedFields + - Type of parameter body of interface CreateFaceListBodyParam is changed from { + name: string; + userData?: string; + recognitionModel?: RecognitionModel; + } to CreateCollectionRequest + - Type of parameter body of interface CreateLargeFaceListBodyParam is changed from { + name: string; + userData?: string; + recognitionModel?: RecognitionModel; + } to CreateCollectionRequest + - Type of parameter body of interface CreateLargePersonGroupBodyParam is changed from { + name: string; + userData?: string; + recognitionModel?: RecognitionModel; + } to CreateCollectionRequest + - Type of parameter body of interface CreateLargePersonGroupPersonBodyParam is changed from { + name: string; + userData?: string; + } to UserDefinedFields + - Type of parameter body of interface CreateLivenessWithVerifySessionBodyParam is changed from CreateLivenessSessionContent to CreateLivenessWithVerifySessionJsonContent + - Type of parameter body of interface CreateLivenessWithVerifySessionWithVerifyImageBodyParam is changed from CreateLivenessWithVerifySessionContent to CreateLivenessWithVerifySessionMultipartContent + - Type of parameter body of interface CreatePersonBodyParam is changed from { + name: string; + userData?: string; + } to UserDefinedFields + - Type of parameter body of interface CreatePersonGroupBodyParam is changed from { + name: string; + userData?: string; + recognitionModel?: RecognitionModel; + } to CreateCollectionRequest + - Type of parameter body of interface CreatePersonGroupPersonBodyParam is changed from { + name: string; + userData?: string; + } to UserDefinedFields + - Type of parameter body of interface UpdateDynamicPersonGroupBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdateFaceListBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdateLargeFaceListBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdateLargeFaceListFaceBodyParam is changed from { + userData?: string; + } to FaceUserData + - Type of parameter body of interface UpdateLargePersonGroupBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdateLargePersonGroupPersonBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdateLargePersonGroupPersonFaceBodyParam is changed from { + userData?: string; + } to FaceUserData + - Type of parameter body of interface UpdatePersonBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdatePersonFaceBodyParam is changed from { + userData?: string; + } to FaceUserData + - Type of parameter body of interface UpdatePersonGroupBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdatePersonGroupPersonBodyParam is changed from { + name?: string; + userData?: string; + } to UserDefinedFieldsForUpdate + - Type of parameter body of interface UpdatePersonGroupPersonFaceBodyParam is changed from { + userData?: string; + } to FaceUserData + diff --git a/sdk/face/ai-vision-face-rest/LICENSE b/sdk/face/ai-vision-face-rest/LICENSE new file mode 100644 index 000000000000..7d5934740965 --- /dev/null +++ b/sdk/face/ai-vision-face-rest/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2024 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/face/ai-vision-face-rest/README.md b/sdk/face/ai-vision-face-rest/README.md index 2b18dee90962..261c4c66c7d6 100644 --- a/sdk/face/ai-vision-face-rest/README.md +++ b/sdk/face/ai-vision-face-rest/README.md @@ -1,20 +1,13 @@ -# Azure AI Face client library for JavaScript +# Azure Face REST client library for JavaScript -The Azure AI Face service provides AI algorithms that detect, recognize, and analyze human faces in images. It includes the following main features: +Face API REST Client -- Face detection and analysis -- Liveness detection -- Face recognition - - Face verification ("one-to-one" matching) - - Face identification ("one-to-many" matching) -- Find similar faces -- Group faces +**Please rely heavily on our [REST client docs](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/rest-clients.md) to use this library** -[Product documentation](https://learn.microsoft.com/azure/ai-services/computer-vision/overview-identity) -| [Source code](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest) -| [Package (NPM)](https://www.npmjs.com/package/@azure-rest/ai-vision-face) -| [Samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/samples) -| [API reference documentation](https://aka.ms/azsdk-javascript-face-ref) +Key links: + +- [Package (NPM)](https://www.npmjs.com/package/@azure-rest/ai-vision-face) +- [API reference documentation](https://docs.microsoft.com/javascript/api/@azure-rest/ai-vision-face?view=azure-node-preview) ## Getting started @@ -22,408 +15,35 @@ The Azure AI Face service provides AI algorithms that detect, recognize, and ana - LTS versions of Node.js -See our [support policy](https://github.com/Azure/azure-sdk-for-js/blob/main/SUPPORT.md) for more details. - ### Prerequisites -- An [Azure subscription](https://azure.microsoft.com/free/). -- Your Azure account must have a `Cognitive Services Contributor` role assigned in order for you to agree to the responsible AI terms and create a resource. To get this role assigned to your account, follow the steps in the [Assign roles](https://learn.microsoft.com/azure/role-based-access-control/role-assignments-steps) documentation, or contact your administrator. -- Once you have sufficient permissions to control your Azure subscription, you need either - - an [Azure Face account](https://portal.azure.com/#blade/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/Face) or - - an [Azure AI services multi-service account](https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/AllInOne) - -### Create a Face or an Azure AI services multi-service account - -Azure AI Face supports both [multi-service](https://learn.microsoft.com/azure/ai-services/multi-service-resource?tabs=windows&pivots=azportal#supported-services-with-a-multi-service-resource) and single-service access. Create an Azure AI services multi-service account if you plan to access multiple Azure AI services under a single endpoint/key. For Face access only, create a Face resource. +- You must have an [Azure subscription](https://azure.microsoft.com/free/) to use this package. -- To create a new Face or Azure AI services multi-service account, you can use [Azure Portal](https://ms.portal.azure.com/#create/Microsoft.CognitiveServicesFace), [Azure PowerShell](https://learn.microsoft.com/azure/ai-services/multi-service-resource?tabs=windows&pivots=azpowershell), or [Azure CLI](https://learn.microsoft.com/azure/ai-services/multi-service-resource?tabs=windows&pivots=azcli). +### Install the `@azure-rest/ai-vision-face` package -### Install the package - -Install the Azure Face REST client library for JavaScript with `npm`: +Install the Azure Face REST client REST client library for JavaScript with `npm`: ```bash npm install @azure-rest/ai-vision-face ``` -### Authenticate the client - -In order to interact with the Face service, you will need to create an instance of a client. -An **endpoint** and **credential** are necessary to instantiate the client object. - -Both key credential and Microsoft Entra ID credential are supported to authenticate the client. -For enhanced security, we strongly recommend utilizing Microsoft Entra ID credential for authentication in the production environment, while AzureKeyCredential should be reserved exclusively for the testing environment. - -#### Get the endpoint - -You can find the endpoint for your Face resource using the Azure Portal or Azure CLI: - -```bash -# Get the endpoint for the Face resource -az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint" -``` - -Either a regional endpoint or a custom subdomain can be used for authentication. They are formatted as follows: - -``` -Regional endpoint: https://.api.cognitive.microsoft.com/ -Custom subdomain: https://.cognitiveservices.azure.com/ -``` - -A regional endpoint is the same for every resource in a region. A complete list of supported regional endpoints can be consulted [here](https://azure.microsoft.com/global-infrastructure/services/?products=cognitive-services). Please note that regional endpoints do not support Microsoft Entra ID authentication. If you'd like migrate your resource to use custom subdomain, follow the instructions [here](https://learn.microsoft.com/azure/ai-services/cognitive-services-custom-subdomains#how-does-this-impact-existing-resources). - -A custom subdomain, on the other hand, is a name that is unique to the resource. Once created and linked to a resource, it cannot be modified. - -#### Create the client with a Microsoft Entra ID credential - -`AzureKeyCredential` authentication is used in the examples in this getting started guide, but you can also authenticate with Microsoft Entra ID using the [@azure/identity](https://learn.microsoft.com/javascript/api/@azure/identity/?view=azure-node-latest) library. -Note that regional endpoints do not support Microsoft Entra ID authentication. Create a [custom subdomain](https://docs.microsoft.com/azure/cognitive-services/authentication#create-a-resource-with-a-custom-subdomain) name for your resource in order to use this type of authentication. - -To use the [DefaultAzureCredential](https://learn.microsoft.com/javascript/api/@azure/identity/defaultazurecredential?view=azure-node-latest) type shown below, or other credential types provided with the Azure SDK, please install the `@azure/identity` package: - -``` -npm install --save @azure/identity -``` - -You will also need to [register a new Microsoft Entra ID application and grant access](https://docs.microsoft.com/azure/cognitive-services/authentication#assign-a-role-to-a-service-principal) to Face by assigning the `"Cognitive Services User"` role to your service principal. - -Once completed, set the values of the client ID, tenant ID, and client secret of the Microsoft Entra ID application as environment variables: -`AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`. - -```js -/** - * DefaultAzureCredential will use the values from these environment - * variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET - */ -import { DefaultAzureCredential } from '@azure/identity'; -import createFaceClient from '@azure-rest/ai-vision-face'; - -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const credential = new DefaultAzureCredential(); -const client = createFaceClient(endpoint, credential); -``` - -#### Create the client with AzureKeyCredential - -To use an API key as the `credential` parameter, pass the key as a string into an instance of [AzureKeyCredential](https://learn.microsoft.com/javascript/api/@azure/core-auth/azurekeycredential?view=azure-node-latest). -You can get the API key for your Face resource using the [Azure Portal](https://learn.microsoft.com/azure/ai-services/multi-service-resource?tabs=windows&pivots=azportal#get-the-keys-for-your-resource) or [Azure CLI](https://learn.microsoft.com/azure/ai-services/multi-service-resource?tabs=windows&pivots=azcli#get-the-keys-for-your-resource): - -```bash -# Get the API keys for the Face resource -az cognitiveservices account keys list --name "" --resource-group "" -``` - -```js -import { AzureKeyCredential } from '@azure/core-auth'; -import createFaceClient from '@azure-rest/ai-vision-face'; - -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const apikey = process.env['FACE_APIKEY'] || ''; -const credential = new AzureKeyCredential(apikey); -const client = createFaceClient(endpoint, credential); -``` - -## Key concepts - -### FaceClient - -The `FaceClient` is the primary interface for developers interacting with the Azure AI Face service. It follows the design of [REST client](https://devblogs.microsoft.com/azure-sdk/azure-rest-libraries-for-javascript/) and serves as the gateway from which all interaction with the library will occur. - -### Long-running operations - -Long-running operations are operations which consist of an initial request sent to the service to start an operation, followed by polling the service at intervals to determine whether the operation has completed or failed, and if it has succeeded, to get the result. For more information, please refer to the "Long-running operations" section in this [blog post](https://devblogs.microsoft.com/azure-sdk/azure-rest-libraries-for-javascript/). - -Current long-running face operations: - -- Face list operations - - [Train large face list](https://learn.microsoft.com/rest/api/face/face-list-operations/train-large-face-list?view=rest-face-v1.1-preview.1&tabs=HTTP) -- Person group operations - - [Train large person group](https://learn.microsoft.com/rest/api/face/person-group-operations/update-large-person-group?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Train person group](https://learn.microsoft.com/rest/api/face/person-group-operations/train-person-group?view=rest-face-v1.1-preview.1&tabs=HTTP) -- Person directory operations - - [Add person face](https://learn.microsoft.com/rest/api/face/person-directory-operations/add-person-face?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Add person face from URL](https://learn.microsoft.com/rest/api/face/person-directory-operations/add-person-face-from-url?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Create dynamic person group with person](https://learn.microsoft.com/rest/api/face/person-directory-operations/create-dynamic-person-group-with-person?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Create person](https://learn.microsoft.com/rest/api/face/person-directory-operations/create-person?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Delete dynamic person group](https://learn.microsoft.com/rest/api/face/person-directory-operations/delete-dynamic-person-group?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Delete person](https://learn.microsoft.com/rest/api/face/person-directory-operations/delete-person?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Delete person face](https://learn.microsoft.com/rest/api/face/person-directory-operations/delete-person-face?view=rest-face-v1.1-preview.1&tabs=HTTP) - - [Update dynamic person group with person changes](https://learn.microsoft.com/rest/api/face/person-directory-operations/update-dynamic-person-group-with-person-changes?view=rest-face-v1.1-preview.1&tabs=HTTP) - -## Examples - -The following section provides several code snippets covering some of the most common Face tasks, including: - -- [Detecting faces in an image](#face-detection "Face Detection") -- [Identifing the specific face from a LargePersonGroup](#face-recognition-from-largepersongroup "Face Recognition from LargePersonGroup") -- [Determining if a face in an video is real (live) or fake (spoof)](#liveness-detection "Liveness Detection") - -### Face Detection - -Detect faces and analyze them from an binary data. - -```js -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const apikey = process.env['FACE_APIKEY'] || ''; -const credential = new AzureKeyCredential(apikey); -const client = createFaceClient(endpoint, credential); - -const response = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ['headPose', 'mask', 'qualityForRecognition'], - returnFaceId: false, - }, - body: readFileSync('path/to/test/image'), -}); -if (isUnexpected(response)) { - throw new Error(response.body.error.message); -} -console.log(response.body); -``` - -### Face Recognition from LargePersonGroup - -Identify a face against a defined LargePersonGroup. - -First, we have to create a LargePersonGroup, add a few Persons to it, and then register faces with these Persons. - -```js -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - getLongRunningPoller, - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const apikey = process.env['FACE_APIKEY'] || ''; -const credential = new AzureKeyCredential(apikey); -const client = createFaceClient(endpoint, credential); - -const largePersonGroupId = 'lpg_family'; - -console.log(`Create a large person group with id: ${largePersonGroupId}`); -const createLargePersonGroupResponse = await client.path('/largepersongroups/{largePersonGroupId}', largePersonGroupId).put({ - body: { - name: 'My Family', - recognitionModel: 'recognition_04', - }, -}); - -console.log('Create a Person Bill and add a face to him.'); -const createLargePersonGroupPersonResponse_bill = await client.path('/largepersongroups/{largePersonGroupId}/persons', largePersonGroupId).post({ - body: { - name: 'Bill', - userData: 'Dad', - }, -}); -if (isUnexpected(createLargePersonGroupPersonResponse_bill)) { - throw new Error(createLargePersonGroupPersonResponse_bill.body.error.message); -} -const personId_bill = createLargePersonGroupPersonResponse_bill.body.personId; -await client.path('/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces', largePersonGroupId, personId_bill).post({ - queryParameters: { - userData: 'Dad-0001', - detectionModel: 'detection_03', - }, - contentType: 'application/octet-stream', - body: readFileSync('path/to/bill/image'), -}); - -console.log('Create a Person Clare and add a face to her.'); -const createLargePersonGroupPersonResponse_clare = await client.path('/largepersongroups/{largePersonGroupId}/persons', largePersonGroupId).post({ - body: { - name: 'Clare', - userData: 'Mom', - }, -}); -if (isUnexpected(createLargePersonGroupPersonResponse_clare)) { - throw new Error(createLargePersonGroupPersonResponse_clare.body.error.message); -} -const personId_clare = createLargePersonGroupPersonResponse_clare.body.personId; -await client.path('/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces', largePersonGroupId, personId_clare).post({ - queryParameters: { - userData: 'Mom-0001', - detectionModel: 'detection_03', - }, - contentType: 'application/octet-stream', - body: readFileSync('path/to/clare/image'), -}); -``` - -Before doing the identification, we must train the LargePersonGroup first. - -```js -console.log(`Start to train the large person group: ${largePersonGroupId}`); -const trainResponse = await client.path('/largepersongroups/{largePersonGroupId}/train', largePersonGroupId).post(); -const trainPoller = await getLongRunningPoller(client, trainResponse); -await trainPoller.pollUntilDone(); -// Check if poller.getOperationState().status is 'succeeded'. -``` - -When the training operation is completed successfully, we can identify the faces in this LargePersonGroup throught. - -```js -console.log('Detect faces from the target image.'); -const detectResponse = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceId: true, - }, - body: readFileSync('path/to/target/image'), -}); -if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); -} -const faceIds = detectResponse.body.map(face => face.faceId as string) - -console.log('Identify the faces in the large person group.'); -const identifyResponse = await client.path('/identify').post({ - body: { faceIds, largePersonGroupId }, -}); -if (isUnexpected(identifyResponse)) { - throw new Error(identifyResponse.body.error.message); -} -console.log(identifyResponse.body); -``` - -Finally, remove the large person group if you don't need it anymore. - -```js -console.log(`Delete the large person group: ${largePersonGroupId}`); -await client.path('/largepersongroups/{largePersonGroupId}', largePersonGroupId).delete(); -``` - -### Liveness detection -Face Liveness detection can be used to determine if a face in an input video stream is real (live) or fake (spoof). -The goal of liveness detection is to ensure that the system is interacting with a physically present live person at -the time of authentication. The whole process of authentication is called a session. - -There are two different components in the authentication: a frontend application and an app server/orchestrator. -Before uploading the video stream, the app server has to create a session, and then the frontend client could upload -the payload with a `session authorization token` to call the liveness detection. The app server can query for the -liveness detection result and audit logs anytime until the session is deleted. - -The Liveness detection operation can not only confirm if the input is live or spoof, but also verify whether the input -belongs to the expected person's face, which is called **liveness detection with face verification**. For the detail -information, please refer to the [tutorial](https://learn.microsoft.com/azure/ai-services/computer-vision/tutorials/liveness). - -This package is only responsible for app server to create, query, delete a session and get audit logs. For how to -integrate the UI and the code into your native frontend application, please follow instructions in the [tutorial](https://learn.microsoft.com/azure/ai-services/computer-vision/tutorials/liveness). - -Here is an example to create and get the liveness detection result of a session. - -```js -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const apikey = process.env['FACE_APIKEY'] || ''; -const credential = new AzureKeyCredential(apikey); -const client = createFaceClient(endpoint, credential); - -console.log('Create a new liveness session.'); -const createLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions').post({ - body: { - livenessOperationMode: 'Passive', - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, -}); -if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); -} -console.log(createLivenessSessionResponse.body); - -const { sessionId } = createLivenessSessionResponse.body; - -console.log('Get liveness detection results.'); -const getLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}', sessionId).get(); -if (isUnexpected(getLivenessSessionResponse)) { - throw new Error(getLivenessSessionResponse.body.error.message); -} -console.log(getLivenessSessionResponse.body); -``` - -Here is another example for the liveness detection with face verification. - -```js -import { randomUUID } from 'crypto'; -import { readFileSync } from 'fs'; - -import { AzureKeyCredential } from '@azure/core-auth'; +### Create and authenticate a `FaceClient` -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; +To use an [Azure Active Directory (AAD) token credential](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/identity/identity/samples/AzureIdentityExamples.md#authenticating-with-a-pre-fetched-access-token), +provide an instance of the desired credential type obtained from the +[@azure/identity](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) library. -const endpoint = process.env['FACE_ENDPOINT'] || ''; -const apikey = process.env['FACE_APIKEY'] || ''; -const credential = new AzureKeyCredential(apikey); -const client = createFaceClient(endpoint, credential); +To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity) -console.log('Create a new liveness with verify session with verify image.'); -const createLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').post({ - contentType: 'multipart/form-data', - body: [ - { - name: 'VerifyImage', - body: readFileSync('path/to/verify/image'), - }, - { - name: 'Parameters', - body: { - livenessOperationMode: 'Passive', - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - deviceCorrelationId: randomUUID(), - }, - }, - ], -}); -if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); -} -console.log(createLivenessSessionResponse.body); +After setup, you can choose which type of [credential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) from `@azure/identity` to use. +As an example, [DefaultAzureCredential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential) +can be used to authenticate the client. -const { sessionId } = createLivenessSessionResponse.body; - -console.log('Get the liveness detection and verification result.'); -const getLivenessSessionResultResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).get(); -if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); -} -console.log(getLivenessSessionResultResponse.body); -``` +Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables: +AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET ## Troubleshooting -### General - -Error codes and messages raised by the Face service can be found in the [service documentation](https://aka.ms/face-error-codes-and-messages). - ### Logging Enabling logging may help uncover useful information about failures. In order to see a log of HTTP requests and responses, set the `AZURE_LOG_LEVEL` environment variable to `info`. Alternatively, logging can be enabled at runtime by calling `setLogLevel` in the `@azure/logger`: @@ -435,30 +55,3 @@ setLogLevel("info"); ``` For more detailed instructions on how to enable logs, you can look at the [@azure/logger package docs](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger). - -## Next steps - -### More sample code - -See the [Sample README](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/samples) for several code snippets illustrating common patterns used in the Face JavaScript API. - -### Additional documentation - -For more extensive documentation on Azure AI Face, see the [Face documentation](https://learn.microsoft.com/azure/ai-services/computer-vision/overview-identity) on learn.microsoft.com. - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require -you to agree to a Contributor License Agreement (CLA) declaring that you have -the right to, and actually do, grant us the rights to use your contribution. -For details, visit https://cla.microsoft.com. - -When you submit a pull request, a CLA-bot will automatically determine whether -you need to provide a CLA and decorate the PR appropriately (e.g., label, -comment). Simply follow the instructions provided by the bot. You will only -need to do this once across all repos using our CLA. - -This project has adopted the -[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, -see the Code of Conduct FAQ or contact opencode@microsoft.com with any -additional questions or comments. diff --git a/sdk/face/ai-vision-face-rest/api-extractor.json b/sdk/face/ai-vision-face-rest/api-extractor.json index cd138c9cf45d..f45cda543122 100644 --- a/sdk/face/ai-vision-face-rest/api-extractor.json +++ b/sdk/face/ai-vision-face-rest/api-extractor.json @@ -1,18 +1,31 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", "mainEntryPointFilePath": "./dist/esm/index.d.ts", - "docModel": { "enabled": true }, - "apiReport": { "enabled": true, "reportFolder": "./review" }, + "docModel": { + "enabled": true + }, + "apiReport": { + "enabled": true, + "reportFolder": "./review" + }, "dtsRollup": { "enabled": true, "untrimmedFilePath": "", "publicTrimmedFilePath": "./types/ai-vision-face.d.ts" }, "messages": { - "tsdocMessageReporting": { "default": { "logLevel": "none" } }, + "tsdocMessageReporting": { + "default": { + "logLevel": "none" + } + }, "extractorMessageReporting": { - "ae-missing-release-tag": { "logLevel": "none" }, - "ae-unresolved-link": { "logLevel": "none" } + "ae-missing-release-tag": { + "logLevel": "none" + }, + "ae-unresolved-link": { + "logLevel": "none" + } } } -} +} \ No newline at end of file diff --git a/sdk/face/ai-vision-face-rest/assets.json b/sdk/face/ai-vision-face-rest/assets.json deleted file mode 100644 index 5553ae6aacca..000000000000 --- a/sdk/face/ai-vision-face-rest/assets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "AssetsRepo": "Azure/azure-sdk-assets", - "AssetsRepoPrefixPath": "js", - "TagPrefix": "js/face/ai-vision-face-rest", - "Tag": "js/face/ai-vision-face-rest_dad2b43d3e" -} diff --git a/sdk/face/ai-vision-face-rest/eslint.config.mjs b/sdk/face/ai-vision-face-rest/eslint.config.mjs index 069606823f69..113bdc3eaf5f 100644 --- a/sdk/face/ai-vision-face-rest/eslint.config.mjs +++ b/sdk/face/ai-vision-face-rest/eslint.config.mjs @@ -6,7 +6,12 @@ export default [ rules: { "@azure/azure-sdk/ts-modules-only-named": "warn", "@azure/azure-sdk/ts-apiextractor-json-types": "warn", - "tsdoc/syntax": "warn", - }, - }, + "@azure/azure-sdk/ts-package-json-types": "warn", + "@azure/azure-sdk/ts-package-json-engine-is-present": "warn", + "@azure/azure-sdk/ts-package-json-module": "off", + "@azure/azure-sdk/ts-package-json-files-required": "off", + "@azure/azure-sdk/ts-package-json-main-is-cjs": "off", + "tsdoc/syntax": "warn" + } + } ]; diff --git a/sdk/face/ai-vision-face-rest/package.json b/sdk/face/ai-vision-face-rest/package.json index 0ecfbd30d1da..16c042b43c6a 100644 --- a/sdk/face/ai-vision-face-rest/package.json +++ b/sdk/face/ai-vision-face-rest/package.json @@ -1,6 +1,6 @@ { "name": "@azure-rest/ai-vision-face", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.1", "description": "Face API REST Client", "engines": { "node": ">=18.0.0" @@ -37,121 +37,102 @@ "dist", "README.md", "LICENSE", - "review/*" + "review/*", + "CHANGELOG.md" ], "sdk-type": "client", "repository": "github:Azure/azure-sdk-for-js", "bugs": { "url": "https://github.com/Azure/azure-sdk-for-js/issues" }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/README.md", "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json", "//metadata": { "constantPaths": [ { "path": "src/faceClient.ts", - "prefix": "package-version" + "prefix": "userAgentInfo" } ] }, "dependencies": { - "@azure-rest/core-client": "^2.0.0", - "@azure/abort-controller": "^2.0.0", + "@azure-rest/core-client": "^2.1.0", "@azure/core-auth": "^1.6.0", - "@azure/core-lro": "3.0.0-beta.1", "@azure/core-rest-pipeline": "^1.5.0", "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" + "tslib": "^2.6.2", + "@azure/core-lro": "^3.0.0", + "@azure/abort-controller": "^2.1.2" }, "devDependencies": { - "@azure-tools/test-credential": "^1.0.0", - "@azure-tools/test-recorder": "^4.0.0", - "@azure/core-util": "^1.0.0", - "@azure/dev-tool": "^1.0.0", - "@azure/eslint-plugin-azure-sdk": "^3.0.0", - "@azure/identity": "^4.0.1", + "dotenv": "^16.0.0", "@microsoft/api-extractor": "^7.40.3", "@types/node": "^18.0.0", + "eslint": "^8.55.0", + "prettier": "^3.2.5", + "rimraf": "^5.0.5", + "mkdirp": "^3.0.1", + "typescript": "~5.5.3", + "tshy": "^1.11.1", + "@azure/identity": "^4.2.1", "@vitest/browser": "^2.0.5", "@vitest/coverage-istanbul": "^2.0.5", - "dotenv": "^16.0.0", - "eslint": "^9.9.0", - "mkdirp": "^3.0.1", "playwright": "^1.41.2", - "rimraf": "^5.0.5", - "typescript": "~5.6.2", - "vitest": "^2.0.5" + "vitest": "^2.0.5", + "@azure-tools/test-credential": "^2.0.0", + "@azure-tools/test-recorder": "^4.0.0", + "@azure/dev-tool": "^1.0.0", + "@azure/eslint-plugin-azure-sdk": "^3.0.0" }, "scripts": { - "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", - "build": "npm run clean && dev-tool run build-package && mkdirp ./review && dev-tool run extract-api", - "build:samples": "dev-tool samples publish --force", - "build:test": "npm run clean && dev-tool run build-package && dev-tool run build-test", - "check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\"", "clean": "rimraf --glob dist dist-browser dist-esm test-dist temp types *.tgz *.log", - "execute:samples": "dev-tool samples run samples-dev", "extract-api": "rimraf review && mkdirp ./review && dev-tool run extract-api", - "format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\"", - "generate:client": "echo skipped", - "integration-test": "npm run integration-test:node && npm run integration-test:browser", - "integration-test:browser": "echo skipped", - "integration-test:node": "echo skipped", + "pack": "npm pack 2>&1", "lint": "eslint package.json api-extractor.json src test", "lint:fix": "eslint package.json api-extractor.json src test --fix --fix-type [problem,suggestion]", - "minify": "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js", - "pack": "npm pack 2>&1", - "test": "npm run clean && dev-tool run build-package && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test", - "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser", - "test:node": "npm run clean && dev-tool run build-package && npm run unit-test:node && npm run integration-test:node", "unit-test": "npm run unit-test:node && npm run unit-test:browser", "unit-test:browser": "npm run build:test && dev-tool run test:vitest --browser", "unit-test:node": "dev-tool run test:vitest", - "update-snippets": "echo skipped" - }, - "//sampleConfiguration": { - "productName": "Face API", - "productSlugs": [ - "azure" - ], - "disableDocsMs": true, - "apiRefLink": "https://aka.ms/azsdk-javascript-face-ref", - "extraFiles": { - "./samples-dev/data/detection1.jpg": [ - "javascript/data/detection1.jpg", - "typescript/src/data/detection1.jpg" - ], - "./samples-dev/data/detection5.jpg": [ - "javascript/data/detection5.jpg", - "typescript/src/data/detection5.jpg" - ], - "./samples-dev/data/nine-faces.png": [ - "javascript/data/nine-faces.png", - "typescript/src/data/nine-faces.png" - ] - } + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "integration-test:browser": "echo skipped", + "integration-test:node": "echo skipped", + "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", + "build:samples": "echo skipped", + "check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\" ", + "execute:samples": "echo skipped", + "format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\" ", + "generate:client": "echo skipped", + "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser", + "minify": "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js", + "build:test": "npm run clean && tshy && dev-tool run build-test", + "build": "npm run clean && tshy && mkdirp ./review && dev-tool run extract-api", + "test:node": "npm run clean && tshy && npm run unit-test:node && npm run integration-test:node", + "test": "npm run clean && tshy && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test" }, "exports": { "./package.json": "./package.json", ".": { "browser": { + "source": "./src/index.ts", "types": "./dist/browser/index.d.ts", "default": "./dist/browser/index.js" }, "react-native": { + "source": "./src/index.ts", "types": "./dist/react-native/index.d.ts", "default": "./dist/react-native/index.js" }, "import": { + "source": "./src/index.ts", "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.js" }, "require": { + "source": "./src/index.ts", "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.js" } } }, "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "module": "./dist/esm/index.js" -} + "types": "./dist/commonjs/index.d.ts" +} \ No newline at end of file diff --git a/sdk/face/ai-vision-face-rest/review/ai-vision-face.api.md b/sdk/face/ai-vision-face-rest/review/ai-vision-face.api.md index e7c8f7eab57c..a42d2a5355a7 100644 --- a/sdk/face/ai-vision-face-rest/review/ai-vision-face.api.md +++ b/sdk/face/ai-vision-face-rest/review/ai-vision-face.api.md @@ -24,7 +24,12 @@ export interface AccessoryItemOutput { } // @public -export type AccessoryTypeOutput = string | "headwear" | "glasses" | "mask"; +export type AccessoryTypeOutput = string; + +// @public +export interface AddFaceFromUrlRequest { + url: string; +} // @public export interface AddFaceListFace200Response extends HttpResponse { @@ -56,7 +61,7 @@ export interface AddFaceListFaceDefaultResponse extends HttpResponse { // @public (undocumented) export interface AddFaceListFaceFromUrl { - post(options?: AddFaceListFaceFromUrlParameters): StreamableMethod; + post(options: AddFaceListFaceFromUrlParameters): StreamableMethod; post(options: AddFaceListFaceParameters): StreamableMethod; } @@ -71,9 +76,7 @@ export interface AddFaceListFaceFromUrl200Response extends HttpResponse { // @public (undocumented) export interface AddFaceListFaceFromUrlBodyParam { // (undocumented) - body?: { - url: string; - }; + body: AddFaceFromUrlRequest; } // @public (undocumented) @@ -164,7 +167,7 @@ export interface AddLargeFaceListFaceDefaultResponse extends HttpResponse { // @public (undocumented) export interface AddLargeFaceListFaceFromUrl { get(options?: GetLargeFaceListFacesParameters): StreamableMethod; - post(options?: AddLargeFaceListFaceFromUrlParameters): StreamableMethod; + post(options: AddLargeFaceListFaceFromUrlParameters): StreamableMethod; post(options: AddLargeFaceListFaceParameters): StreamableMethod; } @@ -179,9 +182,7 @@ export interface AddLargeFaceListFaceFromUrl200Response extends HttpResponse { // @public (undocumented) export interface AddLargeFaceListFaceFromUrlBodyParam { // (undocumented) - body?: { - url: string; - }; + body: AddFaceFromUrlRequest; } // @public (undocumented) @@ -266,7 +267,7 @@ export interface AddLargePersonGroupPersonFaceDefaultResponse extends HttpRespon // @public (undocumented) export interface AddLargePersonGroupPersonFaceFromUrl { - post(options?: AddLargePersonGroupPersonFaceFromUrlParameters): StreamableMethod; + post(options: AddLargePersonGroupPersonFaceFromUrlParameters): StreamableMethod; post(options: AddLargePersonGroupPersonFaceParameters): StreamableMethod; } @@ -281,9 +282,7 @@ export interface AddLargePersonGroupPersonFaceFromUrl200Response extends HttpRes // @public (undocumented) export interface AddLargePersonGroupPersonFaceFromUrlBodyParam { // (undocumented) - body?: { - url: string; - }; + body: AddFaceFromUrlRequest; } // @public (undocumented) @@ -342,7 +341,7 @@ export interface AddLargePersonGroupPersonFaceQueryParamProperties { export interface AddPersonFace { get(options?: GetPersonFacesParameters): StreamableMethod; post(options: AddPersonFaceParameters): StreamableMethod; - post(options?: AddPersonFaceFromUrlParameters): StreamableMethod; + post(options: AddPersonFaceFromUrlParameters): StreamableMethod; } // @public (undocumented) @@ -404,7 +403,7 @@ export interface AddPersonFaceFromUrl202Response extends HttpResponse { // @public (undocumented) export interface AddPersonFaceFromUrlBodyParam { // (undocumented) - body?: { + body: { url: string; }; } @@ -507,7 +506,7 @@ export interface AddPersonGroupPersonFaceDefaultResponse extends HttpResponse { // @public (undocumented) export interface AddPersonGroupPersonFaceFromUrl { - post(options?: AddPersonGroupPersonFaceFromUrlParameters): StreamableMethod; + post(options: AddPersonGroupPersonFaceFromUrlParameters): StreamableMethod; post(options: AddPersonGroupPersonFaceParameters): StreamableMethod; } @@ -522,9 +521,7 @@ export interface AddPersonGroupPersonFaceFromUrl200Response extends HttpResponse // @public (undocumented) export interface AddPersonGroupPersonFaceFromUrlBodyParam { // (undocumented) - body?: { - url: string; - }; + body: AddFaceFromUrlRequest; } // @public (undocumented) @@ -596,7 +593,7 @@ export interface AuditRequestInfoOutput { } // @public -export type BlurLevelOutput = string | "low" | "medium" | "high"; +export type BlurLevelOutput = string; // @public export interface BlurPropertiesOutput { @@ -605,9 +602,16 @@ export interface BlurPropertiesOutput { } // @public -function createClient(endpointParam: string, credentials: TokenCredential | KeyCredential, options?: FaceClientOptions): FaceClient; +function createClient(endpointParam: string, credentials: TokenCredential | KeyCredential, { apiVersion, ...options }?: FaceClientOptions): FaceClient; export default createClient; +// @public +export interface CreateCollectionRequest { + name: string; + recognitionModel?: RecognitionModel; + userData?: string; +} + // @public export interface CreateDynamicPersonGroup200Response extends HttpResponse { // (undocumented) @@ -617,10 +621,7 @@ export interface CreateDynamicPersonGroup200Response extends HttpResponse { // @public (undocumented) export interface CreateDynamicPersonGroupBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - }; + body: UserDefinedFields; } // @public (undocumented) @@ -645,10 +646,10 @@ export type CreateDynamicPersonGroupParameters = CreateDynamicPersonGroupBodyPar export interface CreateDynamicPersonGroupWithPerson { delete(options?: DeleteDynamicPersonGroupParameters): StreamableMethod; get(options?: GetDynamicPersonGroupParameters): StreamableMethod; - patch(options?: UpdateDynamicPersonGroupWithPersonChangesParameters): StreamableMethod; - patch(options?: UpdateDynamicPersonGroupParameters): StreamableMethod; - put(options?: CreateDynamicPersonGroupWithPersonParameters): StreamableMethod; - put(options?: CreateDynamicPersonGroupParameters): StreamableMethod; + patch(options: UpdateDynamicPersonGroupWithPersonChangesParameters): StreamableMethod; + patch(options: UpdateDynamicPersonGroupParameters): StreamableMethod; + put(options: CreateDynamicPersonGroupWithPersonParameters): StreamableMethod; + put(options: CreateDynamicPersonGroupParameters): StreamableMethod; } // @public (undocumented) @@ -668,7 +669,7 @@ export interface CreateDynamicPersonGroupWithPerson202Response extends HttpRespo // @public (undocumented) export interface CreateDynamicPersonGroupWithPersonBodyParam { // (undocumented) - body?: { + body: { name: string; userData?: string; addPersonIds: string[]; @@ -703,8 +704,8 @@ export type CreateDynamicPersonGroupWithPersonParameters = CreateDynamicPersonGr export interface CreateFaceList { delete(options?: DeleteFaceListParameters): StreamableMethod; get(options?: GetFaceListParameters): StreamableMethod; - patch(options?: UpdateFaceListParameters): StreamableMethod; - put(options?: CreateFaceListParameters): StreamableMethod; + patch(options: UpdateFaceListParameters): StreamableMethod; + put(options: CreateFaceListParameters): StreamableMethod; } // @public @@ -716,11 +717,7 @@ export interface CreateFaceList200Response extends HttpResponse { // @public (undocumented) export interface CreateFaceListBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } // @public (undocumented) @@ -745,8 +742,8 @@ export type CreateFaceListParameters = CreateFaceListBodyParam & RequestParamete export interface CreateLargeFaceList { delete(options?: DeleteLargeFaceListParameters): StreamableMethod; get(options?: GetLargeFaceListParameters): StreamableMethod; - patch(options?: UpdateLargeFaceListParameters): StreamableMethod; - put(options?: CreateLargeFaceListParameters): StreamableMethod; + patch(options: UpdateLargeFaceListParameters): StreamableMethod; + put(options: CreateLargeFaceListParameters): StreamableMethod; } // @public @@ -758,11 +755,7 @@ export interface CreateLargeFaceList200Response extends HttpResponse { // @public (undocumented) export interface CreateLargeFaceListBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } // @public (undocumented) @@ -787,8 +780,8 @@ export type CreateLargeFaceListParameters = CreateLargeFaceListBodyParam & Reque export interface CreateLargePersonGroup { delete(options?: DeleteLargePersonGroupParameters): StreamableMethod; get(options?: GetLargePersonGroupParameters): StreamableMethod; - patch(options?: UpdateLargePersonGroupParameters): StreamableMethod; - put(options?: CreateLargePersonGroupParameters): StreamableMethod; + patch(options: UpdateLargePersonGroupParameters): StreamableMethod; + put(options: CreateLargePersonGroupParameters): StreamableMethod; } // @public @@ -800,11 +793,7 @@ export interface CreateLargePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface CreateLargePersonGroupBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } // @public (undocumented) @@ -828,7 +817,7 @@ export type CreateLargePersonGroupParameters = CreateLargePersonGroupBodyParam & // @public (undocumented) export interface CreateLargePersonGroupPerson { get(options?: GetLargePersonGroupPersonsParameters): StreamableMethod; - post(options?: CreateLargePersonGroupPersonParameters): StreamableMethod; + post(options: CreateLargePersonGroupPersonParameters): StreamableMethod; } // @public @@ -842,10 +831,7 @@ export interface CreateLargePersonGroupPerson200Response extends HttpResponse { // @public (undocumented) export interface CreateLargePersonGroupPersonBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - }; + body: UserDefinedFields; } // @public (undocumented) @@ -869,7 +855,7 @@ export type CreateLargePersonGroupPersonParameters = CreateLargePersonGroupPerso // @public (undocumented) export interface CreateLivenessSession { get(options?: GetLivenessSessionsParameters): StreamableMethod; - post(options?: CreateLivenessSessionParameters): StreamableMethod; + post(options: CreateLivenessSessionParameters): StreamableMethod; } // @public @@ -882,8 +868,7 @@ export interface CreateLivenessSession200Response extends HttpResponse { // @public (undocumented) export interface CreateLivenessSessionBodyParam { - // (undocumented) - body?: CreateLivenessSessionContent; + body: CreateLivenessSessionContent; } // @public @@ -891,7 +876,9 @@ export interface CreateLivenessSessionContent { authTokenTimeToLiveInSeconds?: number; deviceCorrelationId?: string; deviceCorrelationIdSetInClient?: boolean; + enableSessionImage?: boolean; livenessOperationMode: LivenessOperationMode; + livenessSingleModalModel?: LivenessModel; sendResultsToClient?: boolean; } @@ -929,23 +916,50 @@ export interface CreateLivenessWithVerifySession200Response extends HttpResponse // @public (undocumented) export interface CreateLivenessWithVerifySessionBodyParam { + body: CreateLivenessWithVerifySessionJsonContent; +} + +// @public (undocumented) +export interface CreateLivenessWithVerifySessionDefaultHeaders { + "x-ms-error-code"?: string; +} + +// @public (undocumented) +export interface CreateLivenessWithVerifySessionDefaultResponse extends HttpResponse { + // (undocumented) + body: FaceErrorResponseOutput; + // (undocumented) + headers: RawHttpHeaders & CreateLivenessWithVerifySessionDefaultHeaders; // (undocumented) - body?: CreateLivenessSessionContent; + status: string; +} + +// @public +export interface CreateLivenessWithVerifySessionJsonContent { + authTokenTimeToLiveInSeconds?: number; + deviceCorrelationId?: string; + deviceCorrelationIdSetInClient?: boolean; + enableSessionImage?: boolean; + livenessOperationMode: LivenessOperationMode; + livenessSingleModalModel?: LivenessModel; + returnVerifyImageHash?: boolean; + sendResultsToClient?: boolean; + verifyConfidenceThreshold?: number; } // @public -export type CreateLivenessWithVerifySessionContent = FormData | Array; +export type CreateLivenessWithVerifySessionMultipartContent = FormData | Array; // @public (undocumented) -export interface CreateLivenessWithVerifySessionContentParametersPartDescriptor { +export interface CreateLivenessWithVerifySessionMultipartContentParametersPartDescriptor { // (undocumented) - body: CreateLivenessSessionContent; + body: CreateLivenessWithVerifySessionJsonContent; // (undocumented) name: "Parameters"; } // @public (undocumented) -export interface CreateLivenessWithVerifySessionContentVerifyImagePartDescriptor { +export interface CreateLivenessWithVerifySessionMultipartContentVerifyImagePartDescriptor { // (undocumented) body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream | File; // (undocumented) @@ -956,21 +970,6 @@ export interface CreateLivenessWithVerifySessionContentVerifyImagePartDescriptor name: "VerifyImage"; } -// @public (undocumented) -export interface CreateLivenessWithVerifySessionDefaultHeaders { - "x-ms-error-code"?: string; -} - -// @public (undocumented) -export interface CreateLivenessWithVerifySessionDefaultResponse extends HttpResponse { - // (undocumented) - body: FaceErrorResponseOutput; - // (undocumented) - headers: RawHttpHeaders & CreateLivenessWithVerifySessionDefaultHeaders; - // (undocumented) - status: string; -} - // @public (undocumented) export type CreateLivenessWithVerifySessionParameters = CreateLivenessWithVerifySessionBodyParam & RequestParameters; @@ -985,7 +984,7 @@ export interface CreateLivenessWithVerifySessionResultOutput { export interface CreateLivenessWithVerifySessionWithVerifyImage { get(options?: GetLivenessWithVerifySessionsParameters): StreamableMethod; post(options: CreateLivenessWithVerifySessionWithVerifyImageParameters): StreamableMethod; - post(options?: CreateLivenessWithVerifySessionParameters): StreamableMethod; + post(options: CreateLivenessWithVerifySessionParameters): StreamableMethod; } // @public @@ -998,8 +997,7 @@ export interface CreateLivenessWithVerifySessionWithVerifyImage200Response exten // @public (undocumented) export interface CreateLivenessWithVerifySessionWithVerifyImageBodyParam { - // (undocumented) - body?: CreateLivenessWithVerifySessionContent; + body: CreateLivenessWithVerifySessionMultipartContent; } // @public (undocumented) @@ -1028,7 +1026,7 @@ export type CreateLivenessWithVerifySessionWithVerifyImageParameters = CreateLiv // @public (undocumented) export interface CreatePerson { get(options?: GetPersonsParameters): StreamableMethod; - post(options?: CreatePersonParameters): StreamableMethod; + post(options: CreatePersonParameters): StreamableMethod; } // @public (undocumented) @@ -1052,10 +1050,7 @@ export interface CreatePerson202Response extends HttpResponse { // @public (undocumented) export interface CreatePersonBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - }; + body: UserDefinedFields; } // @public (undocumented) @@ -1077,8 +1072,8 @@ export interface CreatePersonDefaultResponse extends HttpResponse { export interface CreatePersonGroup { delete(options?: DeletePersonGroupParameters): StreamableMethod; get(options?: GetPersonGroupParameters): StreamableMethod; - patch(options?: UpdatePersonGroupParameters): StreamableMethod; - put(options?: CreatePersonGroupParameters): StreamableMethod; + patch(options: UpdatePersonGroupParameters): StreamableMethod; + put(options: CreatePersonGroupParameters): StreamableMethod; } // @public @@ -1090,11 +1085,7 @@ export interface CreatePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface CreatePersonGroupBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } // @public (undocumented) @@ -1118,7 +1109,7 @@ export type CreatePersonGroupParameters = CreatePersonGroupBodyParam & RequestPa // @public (undocumented) export interface CreatePersonGroupPerson { get(options?: GetPersonGroupPersonsParameters): StreamableMethod; - post(options?: CreatePersonGroupPersonParameters): StreamableMethod; + post(options: CreatePersonGroupPersonParameters): StreamableMethod; } // @public @@ -1132,10 +1123,7 @@ export interface CreatePersonGroupPerson200Response extends HttpResponse { // @public (undocumented) export interface CreatePersonGroupPersonBodyParam { // (undocumented) - body?: { - name: string; - userData?: string; - }; + body: UserDefinedFields; } // @public (undocumented) @@ -1288,7 +1276,7 @@ export interface DeleteLargeFaceListDefaultResponse extends HttpResponse { export interface DeleteLargeFaceListFace { delete(options?: DeleteLargeFaceListFaceParameters): StreamableMethod; get(options?: GetLargeFaceListFaceParameters): StreamableMethod; - patch(options?: UpdateLargeFaceListFaceParameters): StreamableMethod; + patch(options: UpdateLargeFaceListFaceParameters): StreamableMethod; } // @public @@ -1346,7 +1334,7 @@ export type DeleteLargePersonGroupParameters = RequestParameters; export interface DeleteLargePersonGroupPerson { delete(options?: DeleteLargePersonGroupPersonParameters): StreamableMethod; get(options?: GetLargePersonGroupPersonParameters): StreamableMethod; - patch(options?: UpdateLargePersonGroupPersonParameters): StreamableMethod; + patch(options: UpdateLargePersonGroupPersonParameters): StreamableMethod; } // @public @@ -1374,7 +1362,7 @@ export interface DeleteLargePersonGroupPersonDefaultResponse extends HttpRespons export interface DeleteLargePersonGroupPersonFace { delete(options?: DeleteLargePersonGroupPersonFaceParameters): StreamableMethod; get(options?: GetLargePersonGroupPersonFaceParameters): StreamableMethod; - patch(options?: UpdateLargePersonGroupPersonFaceParameters): StreamableMethod; + patch(options: UpdateLargePersonGroupPersonFaceParameters): StreamableMethod; } // @public @@ -1468,7 +1456,7 @@ export type DeleteLivenessWithVerifySessionParameters = RequestParameters; export interface DeletePerson { delete(options?: DeletePersonParameters): StreamableMethod; get(options?: GetPersonParameters): StreamableMethod; - patch(options?: UpdatePersonParameters): StreamableMethod; + patch(options: UpdatePersonParameters): StreamableMethod; } // @public (undocumented) @@ -1504,7 +1492,7 @@ export interface DeletePersonDefaultResponse extends HttpResponse { export interface DeletePersonFace { delete(options?: DeletePersonFaceParameters): StreamableMethod; get(options?: GetPersonFaceParameters): StreamableMethod; - patch(options?: UpdatePersonFaceParameters): StreamableMethod; + patch(options: UpdatePersonFaceParameters): StreamableMethod; } // @public (undocumented) @@ -1573,7 +1561,7 @@ export type DeletePersonGroupParameters = RequestParameters; export interface DeletePersonGroupPerson { delete(options?: DeletePersonGroupPersonParameters): StreamableMethod; get(options?: GetPersonGroupPersonParameters): StreamableMethod; - patch(options?: UpdatePersonGroupPersonParameters): StreamableMethod; + patch(options: UpdatePersonGroupPersonParameters): StreamableMethod; } // @public @@ -1601,7 +1589,7 @@ export interface DeletePersonGroupPersonDefaultResponse extends HttpResponse { export interface DeletePersonGroupPersonFace { delete(options?: DeletePersonGroupPersonFaceParameters): StreamableMethod; get(options?: GetPersonGroupPersonFaceParameters): StreamableMethod; - patch(options?: UpdatePersonGroupPersonFaceParameters): StreamableMethod; + patch(options: UpdatePersonGroupPersonFaceParameters): StreamableMethod; } // @public @@ -1668,10 +1656,67 @@ export interface DetectDefaultResponse extends HttpResponse { status: string; } +// @public +export interface DetectFromSessionImageId200Response extends HttpResponse { + // (undocumented) + body: Array; + // (undocumented) + status: "200"; +} + +// @public (undocumented) +export interface DetectFromSessionImageIdBodyParam { + // (undocumented) + body: { + sessionImageId: string; + }; +} + +// @public (undocumented) +export interface DetectFromSessionImageIdDefaultHeaders { + "x-ms-error-code"?: string; +} + +// @public (undocumented) +export interface DetectFromSessionImageIdDefaultResponse extends HttpResponse { + // (undocumented) + body: FaceErrorResponseOutput; + // (undocumented) + headers: RawHttpHeaders & DetectFromSessionImageIdDefaultHeaders; + // (undocumented) + status: string; +} + +// @public (undocumented) +export interface DetectFromSessionImageIdMediaTypesParam { + contentType: "application/json"; +} + +// @public (undocumented) +export type DetectFromSessionImageIdParameters = DetectFromSessionImageIdQueryParam & DetectFromSessionImageIdMediaTypesParam & DetectFromSessionImageIdBodyParam & RequestParameters; + +// @public (undocumented) +export interface DetectFromSessionImageIdQueryParam { + // (undocumented) + queryParameters?: DetectFromSessionImageIdQueryParamProperties; +} + +// @public (undocumented) +export interface DetectFromSessionImageIdQueryParamProperties { + detectionModel?: DetectionModel; + faceIdTimeToLive?: number; + recognitionModel?: RecognitionModel; + returnFaceAttributes?: FaceAttributeType[]; + returnFaceId?: boolean; + returnFaceLandmarks?: boolean; + returnRecognitionModel?: boolean; +} + // @public (undocumented) export interface DetectFromUrl { post(options: DetectFromUrlParameters): StreamableMethod; post(options: DetectParameters): StreamableMethod; + post(options: DetectFromSessionImageIdParameters): StreamableMethod; } // @public @@ -1685,7 +1730,7 @@ export interface DetectFromUrl200Response extends HttpResponse { // @public (undocumented) export interface DetectFromUrlBodyParam { // (undocumented) - body?: { + body: { url: string; }; } @@ -1731,7 +1776,7 @@ export interface DetectFromUrlQueryParamProperties { } // @public -export type DetectionModel = string | "detection_01" | "detection_02" | "detection_03"; +export type DetectionModel = string; // @public (undocumented) export interface DetectMediaTypesParam { @@ -1766,7 +1811,7 @@ export interface DynamicPersonGroupOutput { } // @public -export type ExposureLevelOutput = string | "underExposure" | "goodExposure" | "overExposure"; +export type ExposureLevelOutput = string; // @public export interface ExposurePropertiesOutput { @@ -1792,16 +1837,15 @@ export interface FaceAttributesOutput { } // @public -export type FaceAttributeType = string | "headPose" | "glasses" | "occlusion" | "accessories" | "blur" | "exposure" | "noise" | "mask" | "qualityForRecognition" | "age" | "smile" | "facialHair" | "hair"; +export type FaceAttributeType = string; // @public (undocumented) export type FaceClient = Client & { path: Routes; }; -// @public (undocumented) +// @public export interface FaceClientOptions extends ClientOptions { - // (undocumented) apiVersion?: Versions; } @@ -1888,7 +1932,12 @@ export interface FaceRectangleOutput { } // @public -export type FaceSessionStatusOutput = string | "NotStarted" | "Started" | "ResultAvailable"; +export type FaceSessionStatusOutput = string; + +// @public +export interface FaceUserData { + userData?: string; +} // @public export interface FacialHairOutput { @@ -1899,9 +1948,9 @@ export interface FacialHairOutput { // @public (undocumented) export interface FindSimilar { - post(options?: FindSimilarParameters): StreamableMethod; - post(options?: FindSimilarFromFaceListParameters): StreamableMethod; - post(options?: FindSimilarFromLargeFaceListParameters): StreamableMethod; + post(options: FindSimilarParameters): StreamableMethod; + post(options: FindSimilarFromFaceListParameters): StreamableMethod; + post(options: FindSimilarFromLargeFaceListParameters): StreamableMethod; } // @public @@ -1915,7 +1964,7 @@ export interface FindSimilar200Response extends HttpResponse { // @public (undocumented) export interface FindSimilarBodyParam { // (undocumented) - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -1949,7 +1998,7 @@ export interface FindSimilarFromFaceList200Response extends HttpResponse { // @public (undocumented) export interface FindSimilarFromFaceListBodyParam { // (undocumented) - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -1986,7 +2035,7 @@ export interface FindSimilarFromLargeFaceList200Response extends HttpResponse { // @public (undocumented) export interface FindSimilarFromLargeFaceListBodyParam { // (undocumented) - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -2013,7 +2062,7 @@ export interface FindSimilarFromLargeFaceListDefaultResponse extends HttpRespons export type FindSimilarFromLargeFaceListParameters = FindSimilarFromLargeFaceListBodyParam & RequestParameters; // @public -export type FindSimilarMatchMode = string | "matchPerson" | "matchFace"; +export type FindSimilarMatchMode = string; // @public (undocumented) export type FindSimilarParameters = FindSimilarBodyParam & RequestParameters; @@ -3230,12 +3279,49 @@ export interface GetPersonsQueryParamProperties { top?: number; } +// @public (undocumented) +export interface GetSessionImage { + get(options?: GetSessionImageParameters): StreamableMethod; +} + +// @public (undocumented) +export interface GetSessionImage200Headers { + "content-type": "application/octet-stream"; +} + +// @public +export interface GetSessionImage200Response extends HttpResponse { + body: Uint8Array; + // (undocumented) + headers: RawHttpHeaders & GetSessionImage200Headers; + // (undocumented) + status: "200"; +} + +// @public (undocumented) +export interface GetSessionImageDefaultHeaders { + "x-ms-error-code"?: string; +} + +// @public (undocumented) +export interface GetSessionImageDefaultResponse extends HttpResponse { + // (undocumented) + body: FaceErrorResponseOutput; + // (undocumented) + headers: RawHttpHeaders & GetSessionImageDefaultHeaders; + // (undocumented) + status: string; +} + +// @public (undocumented) +export type GetSessionImageParameters = RequestParameters; + // @public -export type GlassesTypeOutput = string | "noGlasses" | "readingGlasses" | "sunglasses" | "swimmingGoggles"; +export type GlassesTypeOutput = string; // @public (undocumented) export interface Group { - post(options?: GroupParameters): StreamableMethod; + post(options: GroupParameters): StreamableMethod; } // @public @@ -3249,7 +3335,7 @@ export interface Group200Response extends HttpResponse { // @public (undocumented) export interface GroupBodyParam { // (undocumented) - body?: { + body: { faceIds: string[]; }; } @@ -3285,7 +3371,7 @@ export interface HairColorOutput { } // @public -export type HairColorTypeOutput = string | "unknown" | "white" | "gray" | "blond" | "brown" | "red" | "black" | "other"; +export type HairColorTypeOutput = string; // @public export interface HairPropertiesOutput { @@ -3324,7 +3410,7 @@ export interface IdentifyFromDynamicPersonGroup200Response extends HttpResponse // @public (undocumented) export interface IdentifyFromDynamicPersonGroupBodyParam { // (undocumented) - body?: { + body: { faceIds: string[]; dynamicPersonGroupId: string; maxNumOfCandidatesReturned?: number; @@ -3361,7 +3447,7 @@ export interface IdentifyFromLargePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface IdentifyFromLargePersonGroupBodyParam { // (undocumented) - body?: { + body: { faceIds: string[]; largePersonGroupId: string; maxNumOfCandidatesReturned?: number; @@ -3398,7 +3484,7 @@ export interface IdentifyFromPersonDirectory200Response extends HttpResponse { // @public (undocumented) export interface IdentifyFromPersonDirectoryBodyParam { // (undocumented) - body?: { + body: { faceIds: string[]; personIds: string[]; maxNumOfCandidatesReturned?: number; @@ -3426,10 +3512,10 @@ export type IdentifyFromPersonDirectoryParameters = IdentifyFromPersonDirectoryB // @public (undocumented) export interface IdentifyFromPersonGroup { - post(options?: IdentifyFromPersonGroupParameters): StreamableMethod; - post(options?: IdentifyFromLargePersonGroupParameters): StreamableMethod; - post(options?: IdentifyFromPersonDirectoryParameters): StreamableMethod; - post(options?: IdentifyFromDynamicPersonGroupParameters): StreamableMethod; + post(options: IdentifyFromPersonGroupParameters): StreamableMethod; + post(options: IdentifyFromLargePersonGroupParameters): StreamableMethod; + post(options: IdentifyFromPersonDirectoryParameters): StreamableMethod; + post(options: IdentifyFromDynamicPersonGroupParameters): StreamableMethod; } // @public @@ -3443,7 +3529,7 @@ export interface IdentifyFromPersonGroup200Response extends HttpResponse { // @public (undocumented) export interface IdentifyFromPersonGroupBodyParam { // (undocumented) - body?: { + body: { faceIds: string[]; personGroupId: string; maxNumOfCandidatesReturned?: number; @@ -3470,7 +3556,7 @@ export interface IdentifyFromPersonGroupDefaultResponse extends HttpResponse { export type IdentifyFromPersonGroupParameters = IdentifyFromPersonGroupBodyParam & RequestParameters; // @public -export type ImageTypeOutput = string | "Color" | "Infrared" | "Depth"; +export type ImageTypeOutput = string; // @public (undocumented) export function isUnexpected(response: GetOperationResult200Response | GetOperationResultDefaultResponse): response is GetOperationResultDefaultResponse; @@ -3481,6 +3567,9 @@ export function isUnexpected(response: DetectFromUrl200Response | DetectFromUrlD // @public (undocumented) export function isUnexpected(response: Detect200Response | DetectDefaultResponse): response is DetectDefaultResponse; +// @public (undocumented) +export function isUnexpected(response: DetectFromSessionImageId200Response | DetectFromSessionImageIdDefaultResponse): response is DetectFromSessionImageIdDefaultResponse; + // @public (undocumented) export function isUnexpected(response: FindSimilar200Response | FindSimilarDefaultResponse): response is FindSimilarDefaultResponse; @@ -3518,262 +3607,265 @@ export function isUnexpected(response: VerifyFromPersonDirectory200Response | Ve export function isUnexpected(response: Group200Response | GroupDefaultResponse): response is GroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLivenessSession200Response | CreateLivenessSessionDefaultResponse): response is CreateLivenessSessionDefaultResponse; +export function isUnexpected(response: CreateFaceList200Response | CreateFaceListDefaultResponse): response is CreateFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessSessions200Response | GetLivenessSessionsDefaultResponse): response is GetLivenessSessionsDefaultResponse; +export function isUnexpected(response: DeleteFaceList200Response | DeleteFaceListDefaultResponse): response is DeleteFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLivenessSession200Response | DeleteLivenessSessionDefaultResponse): response is DeleteLivenessSessionDefaultResponse; +export function isUnexpected(response: GetFaceList200Response | GetFaceListDefaultResponse): response is GetFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessSessionResult200Response | GetLivenessSessionResultDefaultResponse): response is GetLivenessSessionResultDefaultResponse; +export function isUnexpected(response: UpdateFaceList200Response | UpdateFaceListDefaultResponse): response is UpdateFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessSessionAuditEntries200Response | GetLivenessSessionAuditEntriesDefaultResponse): response is GetLivenessSessionAuditEntriesDefaultResponse; +export function isUnexpected(response: GetFaceLists200Response | GetFaceListsDefaultResponse): response is GetFaceListsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLivenessWithVerifySessionWithVerifyImage200Response | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse): response is CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse; +export function isUnexpected(response: AddFaceListFaceFromUrl200Response | AddFaceListFaceFromUrlDefaultResponse): response is AddFaceListFaceFromUrlDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLivenessWithVerifySession200Response | CreateLivenessWithVerifySessionDefaultResponse): response is CreateLivenessWithVerifySessionDefaultResponse; +export function isUnexpected(response: AddFaceListFace200Response | AddFaceListFaceDefaultResponse): response is AddFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessWithVerifySessions200Response | GetLivenessWithVerifySessionsDefaultResponse): response is GetLivenessWithVerifySessionsDefaultResponse; +export function isUnexpected(response: DeleteFaceListFace200Response | DeleteFaceListFaceDefaultResponse): response is DeleteFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLivenessWithVerifySession200Response | DeleteLivenessWithVerifySessionDefaultResponse): response is DeleteLivenessWithVerifySessionDefaultResponse; +export function isUnexpected(response: CreateLargeFaceList200Response | CreateLargeFaceListDefaultResponse): response is CreateLargeFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessWithVerifySessionResult200Response | GetLivenessWithVerifySessionResultDefaultResponse): response is GetLivenessWithVerifySessionResultDefaultResponse; +export function isUnexpected(response: DeleteLargeFaceList200Response | DeleteLargeFaceListDefaultResponse): response is DeleteLargeFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLivenessWithVerifySessionAuditEntries200Response | GetLivenessWithVerifySessionAuditEntriesDefaultResponse): response is GetLivenessWithVerifySessionAuditEntriesDefaultResponse; +export function isUnexpected(response: GetLargeFaceList200Response | GetLargeFaceListDefaultResponse): response is GetLargeFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateFaceList200Response | CreateFaceListDefaultResponse): response is CreateFaceListDefaultResponse; +export function isUnexpected(response: UpdateLargeFaceList200Response | UpdateLargeFaceListDefaultResponse): response is UpdateLargeFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteFaceList200Response | DeleteFaceListDefaultResponse): response is DeleteFaceListDefaultResponse; +export function isUnexpected(response: GetLargeFaceLists200Response | GetLargeFaceListsDefaultResponse): response is GetLargeFaceListsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetFaceList200Response | GetFaceListDefaultResponse): response is GetFaceListDefaultResponse; +export function isUnexpected(response: GetLargeFaceListTrainingStatus200Response | GetLargeFaceListTrainingStatusDefaultResponse): response is GetLargeFaceListTrainingStatusDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateFaceList200Response | UpdateFaceListDefaultResponse): response is UpdateFaceListDefaultResponse; +export function isUnexpected(response: TrainLargeFaceList202Response | TrainLargeFaceListLogicalResponse | TrainLargeFaceListDefaultResponse): response is TrainLargeFaceListDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetFaceLists200Response | GetFaceListsDefaultResponse): response is GetFaceListsDefaultResponse; +export function isUnexpected(response: AddLargeFaceListFaceFromUrl200Response | AddLargeFaceListFaceFromUrlDefaultResponse): response is AddLargeFaceListFaceFromUrlDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddFaceListFaceFromUrl200Response | AddFaceListFaceFromUrlDefaultResponse): response is AddFaceListFaceFromUrlDefaultResponse; +export function isUnexpected(response: AddLargeFaceListFace200Response | AddLargeFaceListFaceDefaultResponse): response is AddLargeFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddFaceListFace200Response | AddFaceListFaceDefaultResponse): response is AddFaceListFaceDefaultResponse; +export function isUnexpected(response: GetLargeFaceListFaces200Response | GetLargeFaceListFacesDefaultResponse): response is GetLargeFaceListFacesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteFaceListFace200Response | DeleteFaceListFaceDefaultResponse): response is DeleteFaceListFaceDefaultResponse; +export function isUnexpected(response: DeleteLargeFaceListFace200Response | DeleteLargeFaceListFaceDefaultResponse): response is DeleteLargeFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLargeFaceList200Response | CreateLargeFaceListDefaultResponse): response is CreateLargeFaceListDefaultResponse; +export function isUnexpected(response: GetLargeFaceListFace200Response | GetLargeFaceListFaceDefaultResponse): response is GetLargeFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLargeFaceList200Response | DeleteLargeFaceListDefaultResponse): response is DeleteLargeFaceListDefaultResponse; +export function isUnexpected(response: UpdateLargeFaceListFace200Response | UpdateLargeFaceListFaceDefaultResponse): response is UpdateLargeFaceListFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargeFaceList200Response | GetLargeFaceListDefaultResponse): response is GetLargeFaceListDefaultResponse; +export function isUnexpected(response: CreatePersonGroup200Response | CreatePersonGroupDefaultResponse): response is CreatePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateLargeFaceList200Response | UpdateLargeFaceListDefaultResponse): response is UpdateLargeFaceListDefaultResponse; +export function isUnexpected(response: DeletePersonGroup200Response | DeletePersonGroupDefaultResponse): response is DeletePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargeFaceLists200Response | GetLargeFaceListsDefaultResponse): response is GetLargeFaceListsDefaultResponse; +export function isUnexpected(response: GetPersonGroup200Response | GetPersonGroupDefaultResponse): response is GetPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargeFaceListTrainingStatus200Response | GetLargeFaceListTrainingStatusDefaultResponse): response is GetLargeFaceListTrainingStatusDefaultResponse; +export function isUnexpected(response: UpdatePersonGroup200Response | UpdatePersonGroupDefaultResponse): response is UpdatePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: TrainLargeFaceList202Response | TrainLargeFaceListLogicalResponse | TrainLargeFaceListDefaultResponse): response is TrainLargeFaceListDefaultResponse; +export function isUnexpected(response: GetPersonGroups200Response | GetPersonGroupsDefaultResponse): response is GetPersonGroupsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddLargeFaceListFaceFromUrl200Response | AddLargeFaceListFaceFromUrlDefaultResponse): response is AddLargeFaceListFaceFromUrlDefaultResponse; +export function isUnexpected(response: GetPersonGroupTrainingStatus200Response | GetPersonGroupTrainingStatusDefaultResponse): response is GetPersonGroupTrainingStatusDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddLargeFaceListFace200Response | AddLargeFaceListFaceDefaultResponse): response is AddLargeFaceListFaceDefaultResponse; +export function isUnexpected(response: TrainPersonGroup202Response | TrainPersonGroupLogicalResponse | TrainPersonGroupDefaultResponse): response is TrainPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargeFaceListFaces200Response | GetLargeFaceListFacesDefaultResponse): response is GetLargeFaceListFacesDefaultResponse; +export function isUnexpected(response: CreatePersonGroupPerson200Response | CreatePersonGroupPersonDefaultResponse): response is CreatePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLargeFaceListFace200Response | DeleteLargeFaceListFaceDefaultResponse): response is DeleteLargeFaceListFaceDefaultResponse; +export function isUnexpected(response: GetPersonGroupPersons200Response | GetPersonGroupPersonsDefaultResponse): response is GetPersonGroupPersonsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargeFaceListFace200Response | GetLargeFaceListFaceDefaultResponse): response is GetLargeFaceListFaceDefaultResponse; +export function isUnexpected(response: DeletePersonGroupPerson200Response | DeletePersonGroupPersonDefaultResponse): response is DeletePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateLargeFaceListFace200Response | UpdateLargeFaceListFaceDefaultResponse): response is UpdateLargeFaceListFaceDefaultResponse; +export function isUnexpected(response: GetPersonGroupPerson200Response | GetPersonGroupPersonDefaultResponse): response is GetPersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreatePerson202Response | CreatePersonLogicalResponse | CreatePersonDefaultResponse): response is CreatePersonDefaultResponse; +export function isUnexpected(response: UpdatePersonGroupPerson200Response | UpdatePersonGroupPersonDefaultResponse): response is UpdatePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersons200Response | GetPersonsDefaultResponse): response is GetPersonsDefaultResponse; +export function isUnexpected(response: AddPersonGroupPersonFaceFromUrl200Response | AddPersonGroupPersonFaceFromUrlDefaultResponse): response is AddPersonGroupPersonFaceFromUrlDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeletePerson202Response | DeletePersonLogicalResponse | DeletePersonDefaultResponse): response is DeletePersonDefaultResponse; +export function isUnexpected(response: AddPersonGroupPersonFace200Response | AddPersonGroupPersonFaceDefaultResponse): response is AddPersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPerson200Response | GetPersonDefaultResponse): response is GetPersonDefaultResponse; +export function isUnexpected(response: DeletePersonGroupPersonFace200Response | DeletePersonGroupPersonFaceDefaultResponse): response is DeletePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdatePerson200Response | UpdatePersonDefaultResponse): response is UpdatePersonDefaultResponse; +export function isUnexpected(response: GetPersonGroupPersonFace200Response | GetPersonGroupPersonFaceDefaultResponse): response is GetPersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetDynamicPersonGroupReferences200Response | GetDynamicPersonGroupReferencesDefaultResponse): response is GetDynamicPersonGroupReferencesDefaultResponse; +export function isUnexpected(response: UpdatePersonGroupPersonFace200Response | UpdatePersonGroupPersonFaceDefaultResponse): response is UpdatePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddPersonFace202Response | AddPersonFaceLogicalResponse | AddPersonFaceDefaultResponse): response is AddPersonFaceDefaultResponse; +export function isUnexpected(response: CreateLargePersonGroup200Response | CreateLargePersonGroupDefaultResponse): response is CreateLargePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddPersonFaceFromUrl202Response | AddPersonFaceFromUrlLogicalResponse | AddPersonFaceFromUrlDefaultResponse): response is AddPersonFaceFromUrlDefaultResponse; +export function isUnexpected(response: DeleteLargePersonGroup200Response | DeleteLargePersonGroupDefaultResponse): response is DeleteLargePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonFaces200Response | GetPersonFacesDefaultResponse): response is GetPersonFacesDefaultResponse; +export function isUnexpected(response: GetLargePersonGroup200Response | GetLargePersonGroupDefaultResponse): response is GetLargePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeletePersonFace202Response | DeletePersonFaceLogicalResponse | DeletePersonFaceDefaultResponse): response is DeletePersonFaceDefaultResponse; +export function isUnexpected(response: UpdateLargePersonGroup200Response | UpdateLargePersonGroupDefaultResponse): response is UpdateLargePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonFace200Response | GetPersonFaceDefaultResponse): response is GetPersonFaceDefaultResponse; +export function isUnexpected(response: GetLargePersonGroups200Response | GetLargePersonGroupsDefaultResponse): response is GetLargePersonGroupsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdatePersonFace200Response | UpdatePersonFaceDefaultResponse): response is UpdatePersonFaceDefaultResponse; +export function isUnexpected(response: GetLargePersonGroupTrainingStatus200Response | GetLargePersonGroupTrainingStatusDefaultResponse): response is GetLargePersonGroupTrainingStatusDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateDynamicPersonGroupWithPerson202Response | CreateDynamicPersonGroupWithPersonLogicalResponse | CreateDynamicPersonGroupWithPersonDefaultResponse): response is CreateDynamicPersonGroupWithPersonDefaultResponse; +export function isUnexpected(response: TrainLargePersonGroup202Response | TrainLargePersonGroupLogicalResponse | TrainLargePersonGroupDefaultResponse): response is TrainLargePersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateDynamicPersonGroup200Response | CreateDynamicPersonGroupDefaultResponse): response is CreateDynamicPersonGroupDefaultResponse; +export function isUnexpected(response: CreateLargePersonGroupPerson200Response | CreateLargePersonGroupPersonDefaultResponse): response is CreateLargePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteDynamicPersonGroup202Response | DeleteDynamicPersonGroupLogicalResponse | DeleteDynamicPersonGroupDefaultResponse): response is DeleteDynamicPersonGroupDefaultResponse; +export function isUnexpected(response: GetLargePersonGroupPersons200Response | GetLargePersonGroupPersonsDefaultResponse): response is GetLargePersonGroupPersonsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetDynamicPersonGroup200Response | GetDynamicPersonGroupDefaultResponse): response is GetDynamicPersonGroupDefaultResponse; +export function isUnexpected(response: DeleteLargePersonGroupPerson200Response | DeleteLargePersonGroupPersonDefaultResponse): response is DeleteLargePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateDynamicPersonGroupWithPersonChanges202Response | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse): response is UpdateDynamicPersonGroupWithPersonChangesDefaultResponse; +export function isUnexpected(response: GetLargePersonGroupPerson200Response | GetLargePersonGroupPersonDefaultResponse): response is GetLargePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateDynamicPersonGroup200Response | UpdateDynamicPersonGroupDefaultResponse): response is UpdateDynamicPersonGroupDefaultResponse; +export function isUnexpected(response: UpdateLargePersonGroupPerson200Response | UpdateLargePersonGroupPersonDefaultResponse): response is UpdateLargePersonGroupPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetDynamicPersonGroups200Response | GetDynamicPersonGroupsDefaultResponse): response is GetDynamicPersonGroupsDefaultResponse; +export function isUnexpected(response: AddLargePersonGroupPersonFaceFromUrl200Response | AddLargePersonGroupPersonFaceFromUrlDefaultResponse): response is AddLargePersonGroupPersonFaceFromUrlDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetDynamicPersonGroupPersons200Response | GetDynamicPersonGroupPersonsDefaultResponse): response is GetDynamicPersonGroupPersonsDefaultResponse; +export function isUnexpected(response: AddLargePersonGroupPersonFace200Response | AddLargePersonGroupPersonFaceDefaultResponse): response is AddLargePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreatePersonGroup200Response | CreatePersonGroupDefaultResponse): response is CreatePersonGroupDefaultResponse; +export function isUnexpected(response: DeleteLargePersonGroupPersonFace200Response | DeleteLargePersonGroupPersonFaceDefaultResponse): response is DeleteLargePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeletePersonGroup200Response | DeletePersonGroupDefaultResponse): response is DeletePersonGroupDefaultResponse; +export function isUnexpected(response: GetLargePersonGroupPersonFace200Response | GetLargePersonGroupPersonFaceDefaultResponse): response is GetLargePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroup200Response | GetPersonGroupDefaultResponse): response is GetPersonGroupDefaultResponse; +export function isUnexpected(response: UpdateLargePersonGroupPersonFace200Response | UpdateLargePersonGroupPersonFaceDefaultResponse): response is UpdateLargePersonGroupPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdatePersonGroup200Response | UpdatePersonGroupDefaultResponse): response is UpdatePersonGroupDefaultResponse; +export function isUnexpected(response: CreateLivenessSession200Response | CreateLivenessSessionDefaultResponse): response is CreateLivenessSessionDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroups200Response | GetPersonGroupsDefaultResponse): response is GetPersonGroupsDefaultResponse; +export function isUnexpected(response: GetLivenessSessions200Response | GetLivenessSessionsDefaultResponse): response is GetLivenessSessionsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroupTrainingStatus200Response | GetPersonGroupTrainingStatusDefaultResponse): response is GetPersonGroupTrainingStatusDefaultResponse; +export function isUnexpected(response: DeleteLivenessSession200Response | DeleteLivenessSessionDefaultResponse): response is DeleteLivenessSessionDefaultResponse; // @public (undocumented) -export function isUnexpected(response: TrainPersonGroup202Response | TrainPersonGroupLogicalResponse | TrainPersonGroupDefaultResponse): response is TrainPersonGroupDefaultResponse; +export function isUnexpected(response: GetLivenessSessionResult200Response | GetLivenessSessionResultDefaultResponse): response is GetLivenessSessionResultDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreatePersonGroupPerson200Response | CreatePersonGroupPersonDefaultResponse): response is CreatePersonGroupPersonDefaultResponse; +export function isUnexpected(response: GetLivenessSessionAuditEntries200Response | GetLivenessSessionAuditEntriesDefaultResponse): response is GetLivenessSessionAuditEntriesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroupPersons200Response | GetPersonGroupPersonsDefaultResponse): response is GetPersonGroupPersonsDefaultResponse; +export function isUnexpected(response: CreateLivenessWithVerifySessionWithVerifyImage200Response | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse): response is CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeletePersonGroupPerson200Response | DeletePersonGroupPersonDefaultResponse): response is DeletePersonGroupPersonDefaultResponse; +export function isUnexpected(response: CreateLivenessWithVerifySession200Response | CreateLivenessWithVerifySessionDefaultResponse): response is CreateLivenessWithVerifySessionDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroupPerson200Response | GetPersonGroupPersonDefaultResponse): response is GetPersonGroupPersonDefaultResponse; +export function isUnexpected(response: GetLivenessWithVerifySessions200Response | GetLivenessWithVerifySessionsDefaultResponse): response is GetLivenessWithVerifySessionsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdatePersonGroupPerson200Response | UpdatePersonGroupPersonDefaultResponse): response is UpdatePersonGroupPersonDefaultResponse; +export function isUnexpected(response: DeleteLivenessWithVerifySession200Response | DeleteLivenessWithVerifySessionDefaultResponse): response is DeleteLivenessWithVerifySessionDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddPersonGroupPersonFaceFromUrl200Response | AddPersonGroupPersonFaceFromUrlDefaultResponse): response is AddPersonGroupPersonFaceFromUrlDefaultResponse; +export function isUnexpected(response: GetLivenessWithVerifySessionResult200Response | GetLivenessWithVerifySessionResultDefaultResponse): response is GetLivenessWithVerifySessionResultDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddPersonGroupPersonFace200Response | AddPersonGroupPersonFaceDefaultResponse): response is AddPersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: GetLivenessWithVerifySessionAuditEntries200Response | GetLivenessWithVerifySessionAuditEntriesDefaultResponse): response is GetLivenessWithVerifySessionAuditEntriesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeletePersonGroupPersonFace200Response | DeletePersonGroupPersonFaceDefaultResponse): response is DeletePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: GetSessionImage200Response | GetSessionImageDefaultResponse): response is GetSessionImageDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetPersonGroupPersonFace200Response | GetPersonGroupPersonFaceDefaultResponse): response is GetPersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: CreatePerson202Response | CreatePersonLogicalResponse | CreatePersonDefaultResponse): response is CreatePersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdatePersonGroupPersonFace200Response | UpdatePersonGroupPersonFaceDefaultResponse): response is UpdatePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: GetPersons200Response | GetPersonsDefaultResponse): response is GetPersonsDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLargePersonGroup200Response | CreateLargePersonGroupDefaultResponse): response is CreateLargePersonGroupDefaultResponse; +export function isUnexpected(response: DeletePerson202Response | DeletePersonLogicalResponse | DeletePersonDefaultResponse): response is DeletePersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLargePersonGroup200Response | DeleteLargePersonGroupDefaultResponse): response is DeleteLargePersonGroupDefaultResponse; +export function isUnexpected(response: GetPerson200Response | GetPersonDefaultResponse): response is GetPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroup200Response | GetLargePersonGroupDefaultResponse): response is GetLargePersonGroupDefaultResponse; +export function isUnexpected(response: UpdatePerson200Response | UpdatePersonDefaultResponse): response is UpdatePersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateLargePersonGroup200Response | UpdateLargePersonGroupDefaultResponse): response is UpdateLargePersonGroupDefaultResponse; +export function isUnexpected(response: GetDynamicPersonGroupReferences200Response | GetDynamicPersonGroupReferencesDefaultResponse): response is GetDynamicPersonGroupReferencesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroups200Response | GetLargePersonGroupsDefaultResponse): response is GetLargePersonGroupsDefaultResponse; +export function isUnexpected(response: AddPersonFace202Response | AddPersonFaceLogicalResponse | AddPersonFaceDefaultResponse): response is AddPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroupTrainingStatus200Response | GetLargePersonGroupTrainingStatusDefaultResponse): response is GetLargePersonGroupTrainingStatusDefaultResponse; +export function isUnexpected(response: AddPersonFaceFromUrl202Response | AddPersonFaceFromUrlLogicalResponse | AddPersonFaceFromUrlDefaultResponse): response is AddPersonFaceFromUrlDefaultResponse; // @public (undocumented) -export function isUnexpected(response: TrainLargePersonGroup202Response | TrainLargePersonGroupLogicalResponse | TrainLargePersonGroupDefaultResponse): response is TrainLargePersonGroupDefaultResponse; +export function isUnexpected(response: GetPersonFaces200Response | GetPersonFacesDefaultResponse): response is GetPersonFacesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: CreateLargePersonGroupPerson200Response | CreateLargePersonGroupPersonDefaultResponse): response is CreateLargePersonGroupPersonDefaultResponse; +export function isUnexpected(response: DeletePersonFace202Response | DeletePersonFaceLogicalResponse | DeletePersonFaceDefaultResponse): response is DeletePersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroupPersons200Response | GetLargePersonGroupPersonsDefaultResponse): response is GetLargePersonGroupPersonsDefaultResponse; +export function isUnexpected(response: GetPersonFace200Response | GetPersonFaceDefaultResponse): response is GetPersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLargePersonGroupPerson200Response | DeleteLargePersonGroupPersonDefaultResponse): response is DeleteLargePersonGroupPersonDefaultResponse; +export function isUnexpected(response: UpdatePersonFace200Response | UpdatePersonFaceDefaultResponse): response is UpdatePersonFaceDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroupPerson200Response | GetLargePersonGroupPersonDefaultResponse): response is GetLargePersonGroupPersonDefaultResponse; +export function isUnexpected(response: CreateDynamicPersonGroupWithPerson202Response | CreateDynamicPersonGroupWithPersonLogicalResponse | CreateDynamicPersonGroupWithPersonDefaultResponse): response is CreateDynamicPersonGroupWithPersonDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateLargePersonGroupPerson200Response | UpdateLargePersonGroupPersonDefaultResponse): response is UpdateLargePersonGroupPersonDefaultResponse; +export function isUnexpected(response: CreateDynamicPersonGroup200Response | CreateDynamicPersonGroupDefaultResponse): response is CreateDynamicPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddLargePersonGroupPersonFaceFromUrl200Response | AddLargePersonGroupPersonFaceFromUrlDefaultResponse): response is AddLargePersonGroupPersonFaceFromUrlDefaultResponse; +export function isUnexpected(response: DeleteDynamicPersonGroup202Response | DeleteDynamicPersonGroupLogicalResponse | DeleteDynamicPersonGroupDefaultResponse): response is DeleteDynamicPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: AddLargePersonGroupPersonFace200Response | AddLargePersonGroupPersonFaceDefaultResponse): response is AddLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: GetDynamicPersonGroup200Response | GetDynamicPersonGroupDefaultResponse): response is GetDynamicPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: DeleteLargePersonGroupPersonFace200Response | DeleteLargePersonGroupPersonFaceDefaultResponse): response is DeleteLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: UpdateDynamicPersonGroupWithPersonChanges202Response | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse): response is UpdateDynamicPersonGroupWithPersonChangesDefaultResponse; // @public (undocumented) -export function isUnexpected(response: GetLargePersonGroupPersonFace200Response | GetLargePersonGroupPersonFaceDefaultResponse): response is GetLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: UpdateDynamicPersonGroup200Response | UpdateDynamicPersonGroupDefaultResponse): response is UpdateDynamicPersonGroupDefaultResponse; // @public (undocumented) -export function isUnexpected(response: UpdateLargePersonGroupPersonFace200Response | UpdateLargePersonGroupPersonFaceDefaultResponse): response is UpdateLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected(response: GetDynamicPersonGroups200Response | GetDynamicPersonGroupsDefaultResponse): response is GetDynamicPersonGroupsDefaultResponse; + +// @public (undocumented) +export function isUnexpected(response: GetDynamicPersonGroupPersons200Response | GetDynamicPersonGroupPersonsDefaultResponse): response is GetDynamicPersonGroupPersonsDefaultResponse; // @public export interface LandmarkCoordinateOutput { @@ -3834,13 +3926,16 @@ export interface ListPersonResultOutput { } // @public -export type LivenessDecisionOutput = string | "uncertain" | "realface" | "spoofface"; +export type LivenessDecisionOutput = string; // @public -export type LivenessModelOutput = string | "2020-02-15-preview.01" | "2021-11-12-preview.03" | "2022-10-15-preview.04" | "2023-03-02-preview.05"; +export type LivenessModel = string; // @public -export type LivenessOperationMode = string | "Passive" | "PassiveActive"; +export type LivenessModelOutput = string; + +// @public +export type LivenessOperationMode = string; // @public export interface LivenessOutputsTargetOutput { @@ -3868,6 +3963,8 @@ export interface LivenessSessionAuditEntryOutput { requestId: string; response: AuditLivenessResponseInfoOutput; sessionId: string; + sessionImageId?: string; + verifyImageHash?: string; } // @public @@ -3924,10 +4021,10 @@ export interface MaskPropertiesOutput { } // @public -export type MaskTypeOutput = string | "faceMask" | "noMask" | "otherMaskOrOcclusion" | "uncertain"; +export type MaskTypeOutput = string; // @public -export type NoiseLevelOutput = string | "low" | "medium" | "high"; +export type NoiseLevelOutput = string; // @public export interface NoisePropertiesOutput { @@ -3953,7 +4050,7 @@ export interface OperationResultOutput { } // @public -export type OperationStatusOutput = string | "notStarted" | "running" | "succeeded" | "failed"; +export type OperationStatusOutput = string; // @public export interface PersonDirectoryFaceOutput { @@ -3991,13 +4088,13 @@ export interface PersonGroupPersonOutput { } // @public -export type QualityForRecognitionOutput = string | "low" | "medium" | "high"; +export type QualityForRecognitionOutput = string; // @public -export type RecognitionModel = string | "recognition_01" | "recognition_02" | "recognition_03" | "recognition_04"; +export type RecognitionModel = string; // @public -export type RecognitionModelOutput = string | "recognition_01" | "recognition_02" | "recognition_03" | "recognition_04"; +export type RecognitionModelOutput = string; // @public (undocumented) export interface Routes { @@ -4007,12 +4104,6 @@ export interface Routes { (path: "/identify"): IdentifyFromPersonGroup; (path: "/verify"): VerifyFaceToFace; (path: "/group"): Group; - (path: "/detectLiveness/singleModal/sessions"): CreateLivenessSession; - (path: "/detectLiveness/singleModal/sessions/{sessionId}", sessionId: string): DeleteLivenessSession; - (path: "/detectLiveness/singleModal/sessions/{sessionId}/audit", sessionId: string): GetLivenessSessionAuditEntries; - (path: "/detectLivenessWithVerify/singleModal/sessions"): CreateLivenessWithVerifySessionWithVerifyImage; - (path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId: string): DeleteLivenessWithVerifySession; - (path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", sessionId: string): GetLivenessWithVerifySessionAuditEntries; (path: "/facelists/{faceListId}", faceListId: string): CreateFaceList; (path: "/facelists"): GetFaceLists; (path: "/facelists/{faceListId}/persistedfaces", faceListId: string): AddFaceListFaceFromUrl; @@ -4023,14 +4114,6 @@ export interface Routes { (path: "/largefacelists/{largeFaceListId}/train", largeFaceListId: string): TrainLargeFaceList; (path: "/largefacelists/{largeFaceListId}/persistedfaces", largeFaceListId: string): AddLargeFaceListFaceFromUrl; (path: "/largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}", largeFaceListId: string, persistedFaceId: string): DeleteLargeFaceListFace; - (path: "/persons"): CreatePerson; - (path: "/persons/{personId}", personId: string): DeletePerson; - (path: "/persons/{personId}/dynamicPersonGroupReferences", personId: string): GetDynamicPersonGroupReferences; - (path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces", personId: string, recognitionModel: RecognitionModel): AddPersonFace; - (path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}", personId: string, recognitionModel: RecognitionModel, persistedFaceId: string): DeletePersonFace; - (path: "/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId: string): CreateDynamicPersonGroupWithPerson; - (path: "/dynamicpersongroups"): GetDynamicPersonGroups; - (path: "/dynamicpersongroups/{dynamicPersonGroupId}/persons", dynamicPersonGroupId: string): GetDynamicPersonGroupPersons; (path: "/persongroups/{personGroupId}", personGroupId: string): CreatePersonGroup; (path: "/persongroups"): GetPersonGroups; (path: "/persongroups/{personGroupId}/training", personGroupId: string): GetPersonGroupTrainingStatus; @@ -4047,6 +4130,21 @@ export interface Routes { (path: "/largepersongroups/{largePersonGroupId}/persons/{personId}", largePersonGroupId: string, personId: string): DeleteLargePersonGroupPerson; (path: "/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces", largePersonGroupId: string, personId: string): AddLargePersonGroupPersonFaceFromUrl; (path: "/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}", largePersonGroupId: string, personId: string, persistedFaceId: string): DeleteLargePersonGroupPersonFace; + (path: "/detectLiveness/singleModal/sessions"): CreateLivenessSession; + (path: "/detectLiveness/singleModal/sessions/{sessionId}", sessionId: string): DeleteLivenessSession; + (path: "/detectLiveness/singleModal/sessions/{sessionId}/audit", sessionId: string): GetLivenessSessionAuditEntries; + (path: "/detectLivenessWithVerify/singleModal/sessions"): CreateLivenessWithVerifySessionWithVerifyImage; + (path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId: string): DeleteLivenessWithVerifySession; + (path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", sessionId: string): GetLivenessWithVerifySessionAuditEntries; + (path: "/session/sessionImages/{sessionImageId}", sessionImageId: string): GetSessionImage; + (path: "/persons"): CreatePerson; + (path: "/persons/{personId}", personId: string): DeletePerson; + (path: "/persons/{personId}/dynamicPersonGroupReferences", personId: string): GetDynamicPersonGroupReferences; + (path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces", personId: string, recognitionModel: RecognitionModel): AddPersonFace; + (path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}", personId: string, recognitionModel: RecognitionModel, persistedFaceId: string): DeletePersonFace; + (path: "/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId: string): CreateDynamicPersonGroupWithPerson; + (path: "/dynamicpersongroups"): GetDynamicPersonGroups; + (path: "/dynamicpersongroups/{dynamicPersonGroupId}/persons", dynamicPersonGroupId: string): GetDynamicPersonGroupPersons; } // @public @@ -4054,6 +4152,7 @@ export interface SimplePollerLike, TResul getOperationState(): TState; getResult(): TResult | undefined; isDone(): boolean; + // @deprecated isStopped(): boolean; onProgress(callback: (state: TState) => void): CancelOnProgress; poll(options?: { @@ -4217,10 +4316,7 @@ export interface UpdateDynamicPersonGroup200Response extends HttpResponse { // @public (undocumented) export interface UpdateDynamicPersonGroupBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4258,7 +4354,7 @@ export interface UpdateDynamicPersonGroupWithPersonChanges202Response extends Ht // @public (undocumented) export interface UpdateDynamicPersonGroupWithPersonChangesBodyParam { // (undocumented) - body?: { + body: { name?: string; userData?: string; addPersonIds?: string[]; @@ -4299,10 +4395,7 @@ export interface UpdateFaceList200Response extends HttpResponse { // @public (undocumented) export interface UpdateFaceListBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4332,10 +4425,7 @@ export interface UpdateLargeFaceList200Response extends HttpResponse { // @public (undocumented) export interface UpdateLargeFaceListBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4362,9 +4452,7 @@ export interface UpdateLargeFaceListFace200Response extends HttpResponse { // @public (undocumented) export interface UpdateLargeFaceListFaceBodyParam { // (undocumented) - body?: { - userData?: string; - }; + body: FaceUserData; } // @public (undocumented) @@ -4397,10 +4485,7 @@ export interface UpdateLargePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface UpdateLargePersonGroupBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4430,10 +4515,7 @@ export interface UpdateLargePersonGroupPerson200Response extends HttpResponse { // @public (undocumented) export interface UpdateLargePersonGroupPersonBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4460,9 +4542,7 @@ export interface UpdateLargePersonGroupPersonFace200Response extends HttpRespons // @public (undocumented) export interface UpdateLargePersonGroupPersonFaceBodyParam { // (undocumented) - body?: { - userData?: string; - }; + body: FaceUserData; } // @public (undocumented) @@ -4495,10 +4575,7 @@ export interface UpdatePerson200Response extends HttpResponse { // @public (undocumented) export interface UpdatePersonBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4525,9 +4602,7 @@ export interface UpdatePersonFace200Response extends HttpResponse { // @public (undocumented) export interface UpdatePersonFaceBodyParam { // (undocumented) - body?: { - userData?: string; - }; + body: FaceUserData; } // @public (undocumented) @@ -4557,10 +4632,7 @@ export interface UpdatePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface UpdatePersonGroupBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4590,10 +4662,7 @@ export interface UpdatePersonGroupPerson200Response extends HttpResponse { // @public (undocumented) export interface UpdatePersonGroupPersonBodyParam { // (undocumented) - body?: { - name?: string; - userData?: string; - }; + body: UserDefinedFieldsForUpdate; } // @public (undocumented) @@ -4620,9 +4689,7 @@ export interface UpdatePersonGroupPersonFace200Response extends HttpResponse { // @public (undocumented) export interface UpdatePersonGroupPersonFaceBodyParam { // (undocumented) - body?: { - userData?: string; - }; + body: FaceUserData; } // @public (undocumented) @@ -4649,6 +4716,18 @@ export type UpdatePersonGroupPersonParameters = UpdatePersonGroupPersonBodyParam // @public (undocumented) export type UpdatePersonParameters = UpdatePersonBodyParam & RequestParameters; +// @public +export interface UserDefinedFields { + name: string; + userData?: string; +} + +// @public +export interface UserDefinedFieldsForUpdate { + name?: string; + userData?: string; +} + // @public export interface VerificationResultOutput { confidence: number; @@ -4657,10 +4736,10 @@ export interface VerificationResultOutput { // @public (undocumented) export interface VerifyFaceToFace { - post(options?: VerifyFaceToFaceParameters): StreamableMethod; - post(options?: VerifyFromPersonGroupParameters): StreamableMethod; - post(options?: VerifyFromLargePersonGroupParameters): StreamableMethod; - post(options?: VerifyFromPersonDirectoryParameters): StreamableMethod; + post(options: VerifyFaceToFaceParameters): StreamableMethod; + post(options: VerifyFromPersonGroupParameters): StreamableMethod; + post(options: VerifyFromLargePersonGroupParameters): StreamableMethod; + post(options: VerifyFromPersonDirectoryParameters): StreamableMethod; } // @public @@ -4674,7 +4753,7 @@ export interface VerifyFaceToFace200Response extends HttpResponse { // @public (undocumented) export interface VerifyFaceToFaceBodyParam { // (undocumented) - body?: { + body: { faceId1: string; faceId2: string; }; @@ -4709,7 +4788,7 @@ export interface VerifyFromLargePersonGroup200Response extends HttpResponse { // @public (undocumented) export interface VerifyFromLargePersonGroupBodyParam { // (undocumented) - body?: { + body: { faceId: string; largePersonGroupId: string; personId: string; @@ -4745,7 +4824,7 @@ export interface VerifyFromPersonDirectory200Response extends HttpResponse { // @public (undocumented) export interface VerifyFromPersonDirectoryBodyParam { // (undocumented) - body?: { + body: { faceId: string; personId: string; }; @@ -4780,7 +4859,7 @@ export interface VerifyFromPersonGroup200Response extends HttpResponse { // @public (undocumented) export interface VerifyFromPersonGroupBodyParam { // (undocumented) - body?: { + body: { faceId: string; personGroupId: string; personId: string; @@ -4806,7 +4885,7 @@ export interface VerifyFromPersonGroupDefaultResponse extends HttpResponse { export type VerifyFromPersonGroupParameters = VerifyFromPersonGroupBodyParam & RequestParameters; // @public -export type Versions = "v1.1-preview.1"; +export type Versions = "v1.1-preview.1" | "v1.2-preview.1"; // (No @packageDocumentation comment for this package) diff --git a/sdk/face/ai-vision-face-rest/sample.env b/sdk/face/ai-vision-face-rest/sample.env deleted file mode 100644 index 07ea63f6c25d..000000000000 --- a/sdk/face/ai-vision-face-rest/sample.env +++ /dev/null @@ -1,2 +0,0 @@ -FACE_ENDPOINT="" -FACE_APIKEY="" diff --git a/sdk/face/ai-vision-face-rest/samples-dev/aadAuth.ts b/sdk/face/ai-vision-face-rest/samples-dev/aadAuth.ts deleted file mode 100644 index a62665ee7eb3..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/aadAuth.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { readFileSync } from 'fs'; -import { DefaultAzureCredential } from '@azure/identity'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to authenticate FaceClient using Microsoft Entra ID. - * - * @summary Microsoft Entra ID authentication. - */ - -const main = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const credential = new DefaultAzureCredential(); - const client = createFaceClient(endpoint, credential); - - const fileName = 'data/detection1.jpg'; - const detectResponse = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceId: false, - }, - body: readFileSync(fileName), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${fileName}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples-dev/data/detection1.jpg b/sdk/face/ai-vision-face-rest/samples-dev/data/detection1.jpg deleted file mode 100644 index 8e80a0b71fbc..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples-dev/data/detection1.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples-dev/data/detection5.jpg b/sdk/face/ai-vision-face-rest/samples-dev/data/detection5.jpg deleted file mode 100644 index 919d2ad3296c..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples-dev/data/detection5.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples-dev/data/nine-faces.png b/sdk/face/ai-vision-face-rest/samples-dev/data/nine-faces.png deleted file mode 100644 index 9ce0fc21d0d0..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples-dev/data/nine-faces.png and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples-dev/detect.ts b/sdk/face/ai-vision-face-rest/samples-dev/detect.ts deleted file mode 100644 index 47f7eb1f1621..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/detect.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to detect faces in an image through local file or URL. - * - * @summary Face detection. - */ - -const detectFromImage = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const filename = 'data/detection5.jpg'; - const response = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ['headPose', 'mask', 'qualityForRecognition'], - returnFaceId: false, - }, - body: readFileSync(filename), - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from image: ${filename}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const detectFromUrl = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const url = 'https://aka.ms/facesampleurl'; - const response = await client.path('/detect').post({ - contentType: 'application/json', - queryParameters: { - detectionModel: 'detection_01', - recognitionModel: 'recognition_04', - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ['accessories', 'glasses', 'exposure', 'noise'], - returnFaceId: false, - }, - body: { url }, - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from URL: ${url}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const main = async () => { - await detectFromImage(); - await detectFromUrl(); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples-dev/group.ts b/sdk/face/ai-vision-face-rest/samples-dev/group.ts deleted file mode 100644 index 3617bafa2c25..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/group.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to group similar faces. - * - * @summary Face grouping. - */ - -const main = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // Detect faces from image. - const filename = 'data/nine-faces.png'; - const detectResponse = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceId: true, - }, - body: readFileSync(filename), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${filename}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); - - // Group the faces. - const groupResponse = await client.path('/group').post({ - body: { - faceIds: detectResponse.body.map((face) => face.faceId as string), - } - }); - if (isUnexpected(groupResponse)) { - throw new Error(groupResponse.body.error.message); - } - console.log('Group:'); - console.log(JSON.stringify(groupResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples-dev/livenessSession.ts b/sdk/face/ai-vision-face-rest/samples-dev/livenessSession.ts deleted file mode 100644 index ce7a92b5a314..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/livenessSession.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to create a liveness detection session. - * - * @summary Liveness detection. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#orchestrate-the-liveness-solution to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions').post({ - body: { - livenessOperationMode: 'Passive', - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLiveness/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerify.ts b/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerify.ts deleted file mode 100644 index 398bcc784156..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerify.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to create a liveness detection with face verification session. - * - * @summary Liveness detection with face verification. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').post({ - body: { - livenessOperationMode: 'Passive', - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerifyWithVerifyImage.ts b/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerifyWithVerifyImage.ts deleted file mode 100644 index 7f17de144218..000000000000 --- a/sdk/face/ai-vision-face-rest/samples-dev/livenessSessionWithVerifyWithVerifyImage.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; -import { readFileSync } from 'fs'; - -/** - * This sample demonstrates how to create a liveness detection with face verification session with a verification image. - * - * @summary Liveness detection with face verification with verification image. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').post({ - contentType: 'multipart/form-data', - body: [ - { - name: 'VerifyImage', - body: readFileSync('samples-dev/data/detection1.jpg'), - }, - { - name: 'Parameters', - body: { - livenessOperationMode: 'Passive', - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - deviceCorrelationId: randomUUID(), - }, - }, - ], - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/README.md b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/README.md deleted file mode 100644 index 1cba8564eb6e..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Face API client library samples for JavaScript (Beta) - -These sample programs show how to use the JavaScript client libraries for Face API in some common scenarios. - -| **File Name** | **Description** | -| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | -| [aadAuth.js][aadauth] | Microsoft Entra ID authentication. | -| [detect.js][detect] | Face detection. | -| [group.js][group] | Face grouping. | -| [livenessSession.js][livenesssession] | Liveness detection. | -| [livenessSessionWithVerify.js][livenesssessionwithverify] | Liveness detection with face verification. | -| [livenessSessionWithVerifyWithVerifyImage.js][livenesssessionwithverifywithverifyimage] | Liveness detection with face verification with verification image. | - -## Prerequisites - -The sample programs are compatible with [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule). - -You need [an Azure subscription][freesub] to run these sample programs. - -Samples retrieve credentials to access the service endpoint from environment variables. Alternatively, edit the source code to include the appropriate credentials. See each individual sample for details on which environment variables/credentials it requires to function. - -Adapting the samples to run in the browser may require some additional consideration. For details, please see the [package README][package]. - -## Setup - -To run the samples using the published version of the package: - -1. Install the dependencies using `npm`: - -```bash -npm install -``` - -2. Edit the file `sample.env`, adding the correct credentials to access the Azure service and run the samples. Then rename the file from `sample.env` to just `.env`. The sample programs will read this file automatically. - -3. Run whichever samples you like (note that some samples may require additional setup, see the table above): - -```bash -node aadAuth.js -``` - -Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform): - -```bash -npx cross-env FACE_ENDPOINT="" node aadAuth.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[aadauth]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/aadAuth.js -[detect]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/detect.js -[group]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/group.js -[livenesssession]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSession.js -[livenesssessionwithverify]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerify.js -[livenesssessionwithverifywithverifyimage]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerifyWithVerifyImage.js -[apiref]: https://aka.ms/azsdk-javascript-face-ref -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/README.md diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/aadAuth.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/aadAuth.js deleted file mode 100644 index 9f1ad7abacee..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/aadAuth.js +++ /dev/null @@ -1,35 +0,0 @@ -const { readFileSync } = require("fs"); -const { DefaultAzureCredential } = require("@azure/identity"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); - -/** - * This sample demonstrates how to authenticate FaceClient using Microsoft Entra ID. - * - * @summary Microsoft Entra ID authentication. - */ - -const main = async () => { - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const credential = new DefaultAzureCredential(); - const client = createFaceClient(endpoint, credential); - - const fileName = "data/detection1.jpg"; - const detectResponse = await client.path("/detect").post({ - contentType: "application/octet-stream", - queryParameters: { - detectionModel: "detection_03", - recognitionModel: "recognition_04", - returnFaceId: false, - }, - body: readFileSync(fileName), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${fileName}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection1.jpg b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection1.jpg deleted file mode 100644 index 8e80a0b71fbc..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection1.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection5.jpg b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection5.jpg deleted file mode 100644 index 919d2ad3296c..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/detection5.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/nine-faces.png b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/nine-faces.png deleted file mode 100644 index 9ce0fc21d0d0..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/data/nine-faces.png and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/detect.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/detect.js deleted file mode 100644 index a6106ce1e03c..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/detect.js +++ /dev/null @@ -1,72 +0,0 @@ -const { readFileSync } = require("fs"); -const { AzureKeyCredential } = require("@azure/core-auth"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); - -/** - * This sample demonstrates how to detect faces in an image through local file or URL. - * - * @summary Face detection. - */ - -const detectFromImage = async () => { - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const filename = "data/detection5.jpg"; - const response = await client.path("/detect").post({ - contentType: "application/octet-stream", - queryParameters: { - detectionModel: "detection_03", - recognitionModel: "recognition_04", - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ["headPose", "mask", "qualityForRecognition"], - returnFaceId: false, - }, - body: readFileSync(filename), - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from image: ${filename}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const detectFromUrl = async () => { - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const url = "https://aka.ms/facesampleurl"; - const response = await client.path("/detect").post({ - contentType: "application/json", - queryParameters: { - detectionModel: "detection_01", - recognitionModel: "recognition_04", - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ["accessories", "glasses", "exposure", "noise"], - returnFaceId: false, - }, - body: { url }, - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from URL: ${url}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const main = async () => { - await detectFromImage(); - await detectFromUrl(); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/group.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/group.js deleted file mode 100644 index 4f42c135683b..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/group.js +++ /dev/null @@ -1,49 +0,0 @@ -const { readFileSync } = require("fs"); -const { AzureKeyCredential } = require("@azure/core-auth"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); - -/** - * This sample demonstrates how to group similar faces. - * - * @summary Face grouping. - */ - -const main = async () => { - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // Detect faces from image. - const filename = "data/nine-faces.png"; - const detectResponse = await client.path("/detect").post({ - contentType: "application/octet-stream", - queryParameters: { - detectionModel: "detection_03", - recognitionModel: "recognition_04", - returnFaceId: true, - }, - body: readFileSync(filename), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${filename}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); - - // Group the faces. - const groupResponse = await client.path("/group").post({ - body: { - faceIds: detectResponse.body.map((face) => face.faceId), - }, - }); - if (isUnexpected(groupResponse)) { - throw new Error(groupResponse.body.error.message); - } - console.log("Group:"); - console.log(JSON.stringify(groupResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSession.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSession.js deleted file mode 100644 index 30bda0da14e5..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSession.js +++ /dev/null @@ -1,125 +0,0 @@ -const { randomUUID } = require("crypto"); - -const { AzureKeyCredential } = require("@azure/core-auth"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); - -/** - * This sample demonstrates how to create a liveness detection session. - * - * @summary Liveness detection. - */ - -const pressAnyKeyToContinue = () => - new Promise((resolve) => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once("data", () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); - }); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log( - "Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.", - ); - console.log( - "Press any key to continue when you complete these steps to run sample to get session results...", - ); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#orchestrate-the-liveness-solution to demo the sample code in app server. - - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log("Create liveness session:"); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log("Get liveness detection results:"); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}/audit", sessionId) - .get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log("Get audit entries:"); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client - .path("/detectLiveness/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log("Get liveness sessions:"); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log("Delete liveness session:"); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerify.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerify.js deleted file mode 100644 index e3a44dc54151..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerify.js +++ /dev/null @@ -1,125 +0,0 @@ -const { randomUUID } = require("crypto"); - -const { AzureKeyCredential } = require("@azure/core-auth"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); - -/** - * This sample demonstrates how to create a liveness detection with face verification session. - * - * @summary Liveness detection with face verification. - */ - -const pressAnyKeyToContinue = () => - new Promise((resolve) => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once("data", () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); - }); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log( - "Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.", - ); - console.log( - "Press any key to continue when you complete these steps to run sample to get session results...", - ); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log("Create liveness session:"); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log("Get liveness detection results:"); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", sessionId) - .get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log("Get audit entries:"); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log("Get liveness sessions:"); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log("Delete liveness session:"); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerifyWithVerifyImage.js b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerifyWithVerifyImage.js deleted file mode 100644 index 0b6294407e9c..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/livenessSessionWithVerifyWithVerifyImage.js +++ /dev/null @@ -1,136 +0,0 @@ -const { randomUUID } = require("crypto"); - -const { AzureKeyCredential } = require("@azure/core-auth"); - -const createFaceClient = require("@azure-rest/ai-vision-face").default, - { isUnexpected } = require("@azure-rest/ai-vision-face"); -const { readFileSync } = require("fs"); - -/** - * This sample demonstrates how to create a liveness detection with face verification session with a verification image. - * - * @summary Liveness detection with face verification with verification image. - */ - -const pressAnyKeyToContinue = () => - new Promise((resolve) => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once("data", () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); - }); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log( - "Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.", - ); - console.log( - "Press any key to continue when you complete these steps to run sample to get session results...", - ); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env["FACE_ENDPOINT"] ?? ""; - const apikey = process.env["FACE_APIKEY"] ?? ""; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - contentType: "multipart/form-data", - body: [ - { - name: "VerifyImage", - body: readFileSync("samples-dev/data/detection1.jpg"), - }, - { - name: "Parameters", - body: { - livenessOperationMode: "Passive", - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - deviceCorrelationId: randomUUID(), - }, - }, - ], - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log("Create liveness session:"); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log("Get liveness detection results:"); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", sessionId) - .get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log("Get audit entries:"); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log("Get liveness sessions:"); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log("Delete liveness session:"); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/package.json b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/package.json deleted file mode 100644 index 75b060c342c8..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@azure-samples/ai-vision-face-js-beta", - "private": true, - "version": "1.0.0", - "description": "Face API client library samples for JavaScript (Beta)", - "engines": { - "node": ">=18.0.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure/azure-sdk-for-js.git", - "directory": "sdk/face/ai-vision-face-rest" - }, - "keywords": [ - "node", - "azure", - "cloud", - "typescript", - "browser", - "isomorphic" - ], - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest", - "dependencies": { - "@azure-rest/ai-vision-face": "next", - "dotenv": "latest", - "@azure/identity": "^4.2.1", - "@azure/core-auth": "^1.6.0" - } -} diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/sample.env b/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/sample.env deleted file mode 100644 index 07ea63f6c25d..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/javascript/sample.env +++ /dev/null @@ -1,2 +0,0 @@ -FACE_ENDPOINT="" -FACE_APIKEY="" diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/README.md b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/README.md deleted file mode 100644 index d530b5bd3437..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Face API client library samples for TypeScript (Beta) - -These sample programs show how to use the TypeScript client libraries for Face API in some common scenarios. - -| **File Name** | **Description** | -| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | -| [aadAuth.ts][aadauth] | Microsoft Entra ID authentication. | -| [detect.ts][detect] | Face detection. | -| [group.ts][group] | Face grouping. | -| [livenessSession.ts][livenesssession] | Liveness detection. | -| [livenessSessionWithVerify.ts][livenesssessionwithverify] | Liveness detection with face verification. | -| [livenessSessionWithVerifyWithVerifyImage.ts][livenesssessionwithverifywithverifyimage] | Liveness detection with face verification with verification image. | - -## Prerequisites - -The sample programs are compatible with [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule). - -Before running the samples in Node, they must be compiled to JavaScript using the TypeScript compiler. For more information on TypeScript, see the [TypeScript documentation][typescript]. Install the TypeScript compiler using: - -```bash -npm install -g typescript -``` - -You need [an Azure subscription][freesub] to run these sample programs. - -Samples retrieve credentials to access the service endpoint from environment variables. Alternatively, edit the source code to include the appropriate credentials. See each individual sample for details on which environment variables/credentials it requires to function. - -Adapting the samples to run in the browser may require some additional consideration. For details, please see the [package README][package]. - -## Setup - -To run the samples using the published version of the package: - -1. Install the dependencies using `npm`: - -```bash -npm install -``` - -2. Compile the samples: - -```bash -npm run build -``` - -3. Edit the file `sample.env`, adding the correct credentials to access the Azure service and run the samples. Then rename the file from `sample.env` to just `.env`. The sample programs will read this file automatically. - -4. Run whichever samples you like (note that some samples may require additional setup, see the table above): - -```bash -node dist/aadAuth.js -``` - -Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform): - -```bash -npx cross-env FACE_ENDPOINT="" node dist/aadAuth.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[aadauth]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/aadAuth.ts -[detect]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/detect.ts -[group]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/group.ts -[livenesssession]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSession.ts -[livenesssessionwithverify]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerify.ts -[livenesssessionwithverifywithverifyimage]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerifyWithVerifyImage.ts -[apiref]: https://aka.ms/azsdk-javascript-face-ref -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest/README.md -[typescript]: https://www.typescriptlang.org/docs/home.html diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/package.json b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/package.json deleted file mode 100644 index 0f1ed1a6b0d3..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@azure-samples/ai-vision-face-ts-beta", - "private": true, - "version": "1.0.0", - "description": "Face API client library samples for TypeScript (Beta)", - "engines": { - "node": ">=18.0.0" - }, - "scripts": { - "build": "tsc", - "prebuild": "rimraf dist/" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure/azure-sdk-for-js.git", - "directory": "sdk/face/ai-vision-face-rest" - }, - "keywords": [ - "node", - "azure", - "cloud", - "typescript", - "browser", - "isomorphic" - ], - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/face/ai-vision-face-rest", - "dependencies": { - "@azure-rest/ai-vision-face": "next", - "dotenv": "latest", - "@azure/identity": "^4.2.1", - "@azure/core-auth": "^1.6.0" - }, - "devDependencies": { - "@types/node": "^18.0.0", - "typescript": "~5.6.2", - "rimraf": "latest" - } -} diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/sample.env b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/sample.env deleted file mode 100644 index 07ea63f6c25d..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/sample.env +++ /dev/null @@ -1,2 +0,0 @@ -FACE_ENDPOINT="" -FACE_APIKEY="" diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/aadAuth.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/aadAuth.ts deleted file mode 100644 index a62665ee7eb3..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/aadAuth.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { readFileSync } from 'fs'; -import { DefaultAzureCredential } from '@azure/identity'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to authenticate FaceClient using Microsoft Entra ID. - * - * @summary Microsoft Entra ID authentication. - */ - -const main = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const credential = new DefaultAzureCredential(); - const client = createFaceClient(endpoint, credential); - - const fileName = 'data/detection1.jpg'; - const detectResponse = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceId: false, - }, - body: readFileSync(fileName), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${fileName}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection1.jpg b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection1.jpg deleted file mode 100644 index 8e80a0b71fbc..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection1.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection5.jpg b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection5.jpg deleted file mode 100644 index 919d2ad3296c..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/detection5.jpg and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/nine-faces.png b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/nine-faces.png deleted file mode 100644 index 9ce0fc21d0d0..000000000000 Binary files a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/data/nine-faces.png and /dev/null differ diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/detect.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/detect.ts deleted file mode 100644 index 47f7eb1f1621..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/detect.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to detect faces in an image through local file or URL. - * - * @summary Face detection. - */ - -const detectFromImage = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const filename = 'data/detection5.jpg'; - const response = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ['headPose', 'mask', 'qualityForRecognition'], - returnFaceId: false, - }, - body: readFileSync(filename), - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from image: ${filename}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const detectFromUrl = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - const url = 'https://aka.ms/facesampleurl'; - const response = await client.path('/detect').post({ - contentType: 'application/json', - queryParameters: { - detectionModel: 'detection_01', - recognitionModel: 'recognition_04', - returnFaceLandmarks: true, - returnRecognitionModel: true, - faceIdTimeToLive: 120, - returnFaceAttributes: ['accessories', 'glasses', 'exposure', 'noise'], - returnFaceId: false, - }, - body: { url }, - }); - if (isUnexpected(response)) { - throw new Error(response.body.error.message); - } - console.log(`Detect from URL: ${url}`); - console.log(JSON.stringify(response.body, null, 2)); -}; - -const main = async () => { - await detectFromImage(); - await detectFromUrl(); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/group.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/group.ts deleted file mode 100644 index 3617bafa2c25..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/group.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { readFileSync } from 'fs'; -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to group similar faces. - * - * @summary Face grouping. - */ - -const main = async () => { - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // Detect faces from image. - const filename = 'data/nine-faces.png'; - const detectResponse = await client.path('/detect').post({ - contentType: 'application/octet-stream', - queryParameters: { - detectionModel: 'detection_03', - recognitionModel: 'recognition_04', - returnFaceId: true, - }, - body: readFileSync(filename), - }); - if (isUnexpected(detectResponse)) { - throw new Error(detectResponse.body.error.message); - } - console.log(`Detect: ${filename}`); - console.log(JSON.stringify(detectResponse.body, null, 2)); - - // Group the faces. - const groupResponse = await client.path('/group').post({ - body: { - faceIds: detectResponse.body.map((face) => face.faceId as string), - } - }); - if (isUnexpected(groupResponse)) { - throw new Error(groupResponse.body.error.message); - } - console.log('Group:'); - console.log(JSON.stringify(groupResponse.body, null, 2)); -}; - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSession.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSession.ts deleted file mode 100644 index ce7a92b5a314..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSession.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to create a liveness detection session. - * - * @summary Liveness detection. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#orchestrate-the-liveness-solution to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions').post({ - body: { - livenessOperationMode: 'Passive', - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLiveness/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLiveness/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerify.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerify.ts deleted file mode 100644 index 398bcc784156..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerify.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; - -/** - * This sample demonstrates how to create a liveness detection with face verification session. - * - * @summary Liveness detection with face verification. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').post({ - body: { - livenessOperationMode: 'Passive', - deviceCorrelationId: randomUUID(), - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerifyWithVerifyImage.ts b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerifyWithVerifyImage.ts deleted file mode 100644 index 7f17de144218..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/src/livenessSessionWithVerifyWithVerifyImage.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { randomUUID } from 'crypto'; - -import { AzureKeyCredential } from '@azure/core-auth'; - -import createFaceClient, { - isUnexpected, -} from '@azure-rest/ai-vision-face'; -import { readFileSync } from 'fs'; - -/** - * This sample demonstrates how to create a liveness detection with face verification session with a verification image. - * - * @summary Liveness detection with face verification with verification image. - */ - -const pressAnyKeyToContinue = () => new Promise(resolve => { - const { stdin } = process; - const { isRaw } = stdin; - stdin.setRawMode(true); - stdin.resume(); - stdin.once('data', () => { - stdin.pause(); - stdin.setRawMode(isRaw); - resolve(); - }); -}); - -const waitForLivenessRequest = async () => { - // Wait for request from client device. -}; - -const sendTokenToClientDevices = async (token: string) => { - // Send the token to client devices. -}; - -const waitForLivenessSessionComplete = async () => { - console.log('Please refer to https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness and use the mobile client SDK to perform liveness detection on your mobile application.'); - console.log('Press any key to continue when you complete these steps to run sample to get session results...'); - await pressAnyKeyToContinue(); -}; - -async function main() { - // This sample follows the documentation: https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness - // We will follow the steps in https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/tutorials/liveness#perform-liveness-detection-with-face-verification to demo the sample code in app server. - - const endpoint = process.env['FACE_ENDPOINT'] ?? ''; - const apikey = process.env['FACE_APIKEY'] ?? ''; - const credential = new AzureKeyCredential(apikey); - const client = createFaceClient(endpoint, credential); - - // 1. A client device will send a request to start liveness check to us. - await waitForLivenessRequest(); - - // 2.Send a request to Face API to create a liveness detection session. - const createLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').post({ - contentType: 'multipart/form-data', - body: [ - { - name: 'VerifyImage', - body: readFileSync('samples-dev/data/detection1.jpg'), - }, - { - name: 'Parameters', - body: { - livenessOperationMode: 'Passive', - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - deviceCorrelationId: randomUUID(), - }, - }, - ], - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - console.log('Create liveness session:'); - console.log(JSON.stringify(createLivenessSessionResponse.body, null, 2)); - - const { sessionId, authToken } = createLivenessSessionResponse.body; - - // 3. Pass the AuthToken to client device. - // Client device will process the step 4, 5, 6 in the documentation 'Orchestrate the liveness solution' - await sendTokenToClientDevices(authToken); - - // 7. wait for client device notifyus us that liveness session completed. - await waitForLivenessSessionComplete(); - - // 8. After client devices perform the action, we can get the result from the following APIs. - // Get session results. - const getLivenessSessionResultResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - console.log('Get liveness detection results:'); - console.log(JSON.stringify(getLivenessSessionResultResponse.body, null, 2)); - - // Get audit entries. - const getAuditEntryResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit', sessionId).get(); - if (isUnexpected(getAuditEntryResponse)) { - throw new Error(getAuditEntryResponse.body.error.message); - } - console.log('Get audit entries:'); - console.log(JSON.stringify(getAuditEntryResponse.body, null, 2)); - - // We can also list all liveness sessions of this face account. - const getLivenessSessionsResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions').get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - console.log('Get liveness sessions:'); - console.log(JSON.stringify(getLivenessSessionsResponse.body, null, 2)); - - // Delete session. - const deleteLivenessSessionResponse = await client.path('/detectLivenessWithVerify/singleModal/sessions/{sessionId}', sessionId).delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - console.log('Delete liveness session:'); - console.log(JSON.stringify(deleteLivenessSessionResponse.body, null, 2)); -} - -main().catch(console.error); diff --git a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/tsconfig.json b/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/tsconfig.json deleted file mode 100644 index 984eed535aa8..000000000000 --- a/sdk/face/ai-vision-face-rest/samples/v1-beta/typescript/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "moduleResolution": "node", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "alwaysStrict": true, - "outDir": "dist", - "rootDir": "src" - }, - "include": [ - "src/**/*.ts" - ] -} diff --git a/sdk/face/ai-vision-face-rest/src/clientDefinitions.ts b/sdk/face/ai-vision-face-rest/src/clientDefinitions.ts index 947414400bde..d870b9fff21e 100644 --- a/sdk/face/ai-vision-face-rest/src/clientDefinitions.ts +++ b/sdk/face/ai-vision-face-rest/src/clientDefinitions.ts @@ -5,6 +5,7 @@ import { GetOperationResultParameters, DetectFromUrlParameters, DetectParameters, + DetectFromSessionImageIdParameters, FindSimilarParameters, FindSimilarFromFaceListParameters, FindSimilarFromLargeFaceListParameters, @@ -17,17 +18,6 @@ import { VerifyFromLargePersonGroupParameters, VerifyFromPersonDirectoryParameters, GroupParameters, - CreateLivenessSessionParameters, - GetLivenessSessionsParameters, - DeleteLivenessSessionParameters, - GetLivenessSessionResultParameters, - GetLivenessSessionAuditEntriesParameters, - CreateLivenessWithVerifySessionWithVerifyImageParameters, - CreateLivenessWithVerifySessionParameters, - GetLivenessWithVerifySessionsParameters, - DeleteLivenessWithVerifySessionParameters, - GetLivenessWithVerifySessionResultParameters, - GetLivenessWithVerifySessionAuditEntriesParameters, CreateFaceListParameters, DeleteFaceListParameters, GetFaceListParameters, @@ -49,26 +39,6 @@ import { DeleteLargeFaceListFaceParameters, GetLargeFaceListFaceParameters, UpdateLargeFaceListFaceParameters, - CreatePersonParameters, - GetPersonsParameters, - DeletePersonParameters, - GetPersonParameters, - UpdatePersonParameters, - GetDynamicPersonGroupReferencesParameters, - AddPersonFaceParameters, - AddPersonFaceFromUrlParameters, - GetPersonFacesParameters, - DeletePersonFaceParameters, - GetPersonFaceParameters, - UpdatePersonFaceParameters, - CreateDynamicPersonGroupWithPersonParameters, - CreateDynamicPersonGroupParameters, - DeleteDynamicPersonGroupParameters, - GetDynamicPersonGroupParameters, - UpdateDynamicPersonGroupWithPersonChangesParameters, - UpdateDynamicPersonGroupParameters, - GetDynamicPersonGroupsParameters, - GetDynamicPersonGroupPersonsParameters, CreatePersonGroupParameters, DeletePersonGroupParameters, GetPersonGroupParameters, @@ -103,6 +73,38 @@ import { DeleteLargePersonGroupPersonFaceParameters, GetLargePersonGroupPersonFaceParameters, UpdateLargePersonGroupPersonFaceParameters, + CreateLivenessSessionParameters, + GetLivenessSessionsParameters, + DeleteLivenessSessionParameters, + GetLivenessSessionResultParameters, + GetLivenessSessionAuditEntriesParameters, + CreateLivenessWithVerifySessionWithVerifyImageParameters, + CreateLivenessWithVerifySessionParameters, + GetLivenessWithVerifySessionsParameters, + DeleteLivenessWithVerifySessionParameters, + GetLivenessWithVerifySessionResultParameters, + GetLivenessWithVerifySessionAuditEntriesParameters, + GetSessionImageParameters, + CreatePersonParameters, + GetPersonsParameters, + DeletePersonParameters, + GetPersonParameters, + UpdatePersonParameters, + GetDynamicPersonGroupReferencesParameters, + AddPersonFaceParameters, + AddPersonFaceFromUrlParameters, + GetPersonFacesParameters, + DeletePersonFaceParameters, + GetPersonFaceParameters, + UpdatePersonFaceParameters, + CreateDynamicPersonGroupWithPersonParameters, + CreateDynamicPersonGroupParameters, + DeleteDynamicPersonGroupParameters, + GetDynamicPersonGroupParameters, + UpdateDynamicPersonGroupWithPersonChangesParameters, + UpdateDynamicPersonGroupParameters, + GetDynamicPersonGroupsParameters, + GetDynamicPersonGroupPersonsParameters, } from "./parameters.js"; import { GetOperationResult200Response, @@ -111,6 +113,8 @@ import { DetectFromUrlDefaultResponse, Detect200Response, DetectDefaultResponse, + DetectFromSessionImageId200Response, + DetectFromSessionImageIdDefaultResponse, FindSimilar200Response, FindSimilarDefaultResponse, FindSimilarFromFaceList200Response, @@ -135,28 +139,6 @@ import { VerifyFromPersonDirectoryDefaultResponse, Group200Response, GroupDefaultResponse, - CreateLivenessSession200Response, - CreateLivenessSessionDefaultResponse, - GetLivenessSessions200Response, - GetLivenessSessionsDefaultResponse, - DeleteLivenessSession200Response, - DeleteLivenessSessionDefaultResponse, - GetLivenessSessionResult200Response, - GetLivenessSessionResultDefaultResponse, - GetLivenessSessionAuditEntries200Response, - GetLivenessSessionAuditEntriesDefaultResponse, - CreateLivenessWithVerifySessionWithVerifyImage200Response, - CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, - CreateLivenessWithVerifySession200Response, - CreateLivenessWithVerifySessionDefaultResponse, - GetLivenessWithVerifySessions200Response, - GetLivenessWithVerifySessionsDefaultResponse, - DeleteLivenessWithVerifySession200Response, - DeleteLivenessWithVerifySessionDefaultResponse, - GetLivenessWithVerifySessionResult200Response, - GetLivenessWithVerifySessionResultDefaultResponse, - GetLivenessWithVerifySessionAuditEntries200Response, - GetLivenessWithVerifySessionAuditEntriesDefaultResponse, CreateFaceList200Response, CreateFaceListDefaultResponse, DeleteFaceList200Response, @@ -199,46 +181,6 @@ import { GetLargeFaceListFaceDefaultResponse, UpdateLargeFaceListFace200Response, UpdateLargeFaceListFaceDefaultResponse, - CreatePerson202Response, - CreatePersonDefaultResponse, - GetPersons200Response, - GetPersonsDefaultResponse, - DeletePerson202Response, - DeletePersonDefaultResponse, - GetPerson200Response, - GetPersonDefaultResponse, - UpdatePerson200Response, - UpdatePersonDefaultResponse, - GetDynamicPersonGroupReferences200Response, - GetDynamicPersonGroupReferencesDefaultResponse, - AddPersonFace202Response, - AddPersonFaceDefaultResponse, - AddPersonFaceFromUrl202Response, - AddPersonFaceFromUrlDefaultResponse, - GetPersonFaces200Response, - GetPersonFacesDefaultResponse, - DeletePersonFace202Response, - DeletePersonFaceDefaultResponse, - GetPersonFace200Response, - GetPersonFaceDefaultResponse, - UpdatePersonFace200Response, - UpdatePersonFaceDefaultResponse, - CreateDynamicPersonGroupWithPerson202Response, - CreateDynamicPersonGroupWithPersonDefaultResponse, - CreateDynamicPersonGroup200Response, - CreateDynamicPersonGroupDefaultResponse, - DeleteDynamicPersonGroup202Response, - DeleteDynamicPersonGroupDefaultResponse, - GetDynamicPersonGroup200Response, - GetDynamicPersonGroupDefaultResponse, - UpdateDynamicPersonGroupWithPersonChanges202Response, - UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, - UpdateDynamicPersonGroup200Response, - UpdateDynamicPersonGroupDefaultResponse, - GetDynamicPersonGroups200Response, - GetDynamicPersonGroupsDefaultResponse, - GetDynamicPersonGroupPersons200Response, - GetDynamicPersonGroupPersonsDefaultResponse, CreatePersonGroup200Response, CreatePersonGroupDefaultResponse, DeletePersonGroup200Response, @@ -307,6 +249,70 @@ import { GetLargePersonGroupPersonFaceDefaultResponse, UpdateLargePersonGroupPersonFace200Response, UpdateLargePersonGroupPersonFaceDefaultResponse, + CreateLivenessSession200Response, + CreateLivenessSessionDefaultResponse, + GetLivenessSessions200Response, + GetLivenessSessionsDefaultResponse, + DeleteLivenessSession200Response, + DeleteLivenessSessionDefaultResponse, + GetLivenessSessionResult200Response, + GetLivenessSessionResultDefaultResponse, + GetLivenessSessionAuditEntries200Response, + GetLivenessSessionAuditEntriesDefaultResponse, + CreateLivenessWithVerifySessionWithVerifyImage200Response, + CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, + CreateLivenessWithVerifySession200Response, + CreateLivenessWithVerifySessionDefaultResponse, + GetLivenessWithVerifySessions200Response, + GetLivenessWithVerifySessionsDefaultResponse, + DeleteLivenessWithVerifySession200Response, + DeleteLivenessWithVerifySessionDefaultResponse, + GetLivenessWithVerifySessionResult200Response, + GetLivenessWithVerifySessionResultDefaultResponse, + GetLivenessWithVerifySessionAuditEntries200Response, + GetLivenessWithVerifySessionAuditEntriesDefaultResponse, + GetSessionImage200Response, + GetSessionImageDefaultResponse, + CreatePerson202Response, + CreatePersonDefaultResponse, + GetPersons200Response, + GetPersonsDefaultResponse, + DeletePerson202Response, + DeletePersonDefaultResponse, + GetPerson200Response, + GetPersonDefaultResponse, + UpdatePerson200Response, + UpdatePersonDefaultResponse, + GetDynamicPersonGroupReferences200Response, + GetDynamicPersonGroupReferencesDefaultResponse, + AddPersonFace202Response, + AddPersonFaceDefaultResponse, + AddPersonFaceFromUrl202Response, + AddPersonFaceFromUrlDefaultResponse, + GetPersonFaces200Response, + GetPersonFacesDefaultResponse, + DeletePersonFace202Response, + DeletePersonFaceDefaultResponse, + GetPersonFace200Response, + GetPersonFaceDefaultResponse, + UpdatePersonFace200Response, + UpdatePersonFaceDefaultResponse, + CreateDynamicPersonGroupWithPerson202Response, + CreateDynamicPersonGroupWithPersonDefaultResponse, + CreateDynamicPersonGroup200Response, + CreateDynamicPersonGroupDefaultResponse, + DeleteDynamicPersonGroup202Response, + DeleteDynamicPersonGroupDefaultResponse, + GetDynamicPersonGroup200Response, + GetDynamicPersonGroupDefaultResponse, + UpdateDynamicPersonGroupWithPersonChanges202Response, + UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, + UpdateDynamicPersonGroup200Response, + UpdateDynamicPersonGroupDefaultResponse, + GetDynamicPersonGroups200Response, + GetDynamicPersonGroupsDefaultResponse, + GetDynamicPersonGroupPersons200Response, + GetDynamicPersonGroupPersonsDefaultResponse, } from "./responses.js"; import { RecognitionModel } from "./models.js"; import { Client, StreamableMethod } from "@azure-rest/core-client"; @@ -315,13 +321,15 @@ export interface GetOperationResult { /** Get status of a long running operation. */ get( options?: GetOperationResultParameters, - ): StreamableMethod; + ): StreamableMethod< + GetOperationResult200Response | GetOperationResultDefaultResponse + >; } export interface DetectFromUrl { /** * > [!IMPORTANT] - * > To mitigate potential misuse that can subject people to stereotyping, discrimination, or unfair denial of services, we are retiring Face API attributes that predict emotion, gender, age, smile, facial hair, hair, and makeup. Read more about this decision https://azure.microsoft.com/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/. + * > Microsoft has retired or limited facial recognition capabilities that can be used to try to infer emotional states and identity attributes which, if misused, can subject people to stereotyping, discrimination or unfair denial of services. The retired capabilities are emotion and gender. The limited capabilities are age, smile, facial hair, hair and makeup. Email [Azure Face API](mailto:azureface@microsoft.com) if you have a responsible use case that would benefit from the use of any of the limited capabilities. Read more about this decision [here](https://azure.microsoft.com/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/). * * * * * No image will be stored. Only the extracted face feature(s) will be stored on server. The faceId is an identifier of the face feature and will be used in "Identify", "Verify", and "Find Similar". The stored face features will expire and be deleted at the time specified by faceIdTimeToLive after the original detection call. @@ -330,17 +338,32 @@ export interface DetectFromUrl { * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. * * Up to 100 faces can be returned for an image. Faces are ranked by face rectangle size from large to small. * * For optimal results when querying "Identify", "Verify", and "Find Similar" ('returnFaceId' is true), please use faces that are: frontal, clear, and with a minimum size of 200x200 pixels (100 pixels between eyes). - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model - * * 'detection_02': Face attributes and landmarks are disabled if you choose this detection model. - * * 'detection_03': Face attributes (mask, blur, and headPose) and landmarks are supported if you choose this detection model. - * * Different 'recognitionModel' values are provided. If follow-up operations like "Verify", "Identify", "Find Similar" are needed, please specify the recognition model with 'recognitionModel' parameter. The default value for 'recognitionModel' is 'recognition_01', if latest model needed, please explicitly specify the model you need in this parameter. Once specified, the detected faceIds will be associated with the specified recognition model. More details, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-recognition-model. + * * Different 'detectionModel' values can be provided. The availability of landmarks and supported attributes depends on the detection model specified. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). + * * Different 'recognitionModel' values are provided. If follow-up operations like "Verify", "Identify", "Find Similar" are needed, please specify the recognition model with 'recognitionModel' parameter. The default value for 'recognitionModel' is 'recognition_01', if latest model needed, please explicitly specify the model you need in this parameter. Once specified, the detected faceIds will be associated with the specified recognition model. More details, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-recognition-model). */ post( options: DetectFromUrlParameters, ): StreamableMethod; /** * > [!IMPORTANT] - * > To mitigate potential misuse that can subject people to stereotyping, discrimination, or unfair denial of services, we are retiring Face API attributes that predict emotion, gender, age, smile, facial hair, hair, and makeup. Read more about this decision https://azure.microsoft.com/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/. + * > Microsoft has retired or limited facial recognition capabilities that can be used to try to infer emotional states and identity attributes which, if misused, can subject people to stereotyping, discrimination or unfair denial of services. The retired capabilities are emotion and gender. The limited capabilities are age, smile, facial hair, hair and makeup. Email [Azure Face API](mailto:azureface@microsoft.com) if you have a responsible use case that would benefit from the use of any of the limited capabilities. Read more about this decision [here](https://azure.microsoft.com/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/). + * + * * + * * No image will be stored. Only the extracted face feature(s) will be stored on server. The faceId is an identifier of the face feature and will be used in "Identify", "Verify", and "Find Similar". The stored face features will expire and be deleted at the time specified by faceIdTimeToLive after the original detection call. + * * Optional parameters include faceId, landmarks, and attributes. Attributes include headPose, glasses, occlusion, accessories, blur, exposure, noise, mask, and qualityForRecognition. Some of the results returned for specific attributes may not be highly accurate. + * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. + * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. + * * Up to 100 faces can be returned for an image. Faces are ranked by face rectangle size from large to small. + * * For optimal results when querying "Identify", "Verify", and "Find Similar" ('returnFaceId' is true), please use faces that are: frontal, clear, and with a minimum size of 200x200 pixels (100 pixels between eyes). + * * Different 'detectionModel' values can be provided. The availability of landmarks and supported attributes depends on the detection model specified. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). + * * Different 'recognitionModel' values are provided. If follow-up operations like "Verify", "Identify", "Find Similar" are needed, please specify the recognition model with 'recognitionModel' parameter. The default value for 'recognitionModel' is 'recognition_01', if latest model needed, please explicitly specify the model you need in this parameter. Once specified, the detected faceIds will be associated with the specified recognition model. More details, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-recognition-model). + */ + post( + options: DetectParameters, + ): StreamableMethod; + /** + * > [!IMPORTANT] + * > Microsoft has retired or limited facial recognition capabilities that can be used to try to infer emotional states and identity attributes which, if misused, can subject people to stereotyping, discrimination or unfair denial of services. The retired capabilities are emotion and gender. The limited capabilities are age, smile, facial hair, hair and makeup. Email [Azure Face API](mailto:azureface@microsoft.com) if you have a responsible use case that would benefit from the use of any of the limited capabilities. Read more about this decision [here](https://azure.microsoft.com/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/). * * * * * No image will be stored. Only the extracted face feature(s) will be stored on server. The faceId is an identifier of the face feature and will be used in "Identify", "Verify", and "Find Similar". The stored face features will expire and be deleted at the time specified by faceIdTimeToLive after the original detection call. @@ -349,12 +372,15 @@ export interface DetectFromUrl { * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. * * Up to 100 faces can be returned for an image. Faces are ranked by face rectangle size from large to small. * * For optimal results when querying "Identify", "Verify", and "Find Similar" ('returnFaceId' is true), please use faces that are: frontal, clear, and with a minimum size of 200x200 pixels (100 pixels between eyes). - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model - * * 'detection_02': Face attributes and landmarks are disabled if you choose this detection model. - * * 'detection_03': Face attributes (mask, blur, and headPose) and landmarks are supported if you choose this detection model. - * * Different 'recognitionModel' values are provided. If follow-up operations like "Verify", "Identify", "Find Similar" are needed, please specify the recognition model with 'recognitionModel' parameter. The default value for 'recognitionModel' is 'recognition_01', if latest model needed, please explicitly specify the model you need in this parameter. Once specified, the detected faceIds will be associated with the specified recognition model. More details, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-recognition-model. + * * Different 'detectionModel' values can be provided. The availability of landmarks and supported attributes depends on the detection model specified. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). + * * Different 'recognitionModel' values are provided. If follow-up operations like "Verify", "Identify", "Find Similar" are needed, please specify the recognition model with 'recognitionModel' parameter. The default value for 'recognitionModel' is 'recognition_01', if latest model needed, please explicitly specify the model you need in this parameter. Once specified, the detected faceIds will be associated with the specified recognition model. More details, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-recognition-model). */ - post(options: DetectParameters): StreamableMethod; + post( + options: DetectFromSessionImageIdParameters, + ): StreamableMethod< + | DetectFromSessionImageId200Response + | DetectFromSessionImageIdDefaultResponse + >; } export interface FindSimilar { @@ -366,7 +392,7 @@ export interface FindSimilar { * The 'recognitionModel' associated with the query faceId should be the same as the 'recognitionModel' used by the target faceId array. */ post( - options?: FindSimilarParameters, + options: FindSimilarParameters, ): StreamableMethod; /** * Depending on the input the returned similar faces list contains faceIds or persistedFaceIds ranked by similarity. @@ -376,8 +402,10 @@ export interface FindSimilar { * The 'recognitionModel' associated with the query faceId should be the same as the 'recognitionModel' used by the target Face List. */ post( - options?: FindSimilarFromFaceListParameters, - ): StreamableMethod; + options: FindSimilarFromFaceListParameters, + ): StreamableMethod< + FindSimilarFromFaceList200Response | FindSimilarFromFaceListDefaultResponse + >; /** * Depending on the input the returned similar faces list contains faceIds or persistedFaceIds ranked by similarity. * @@ -386,9 +414,10 @@ export interface FindSimilar { * The 'recognitionModel' associated with the query faceId should be the same as the 'recognitionModel' used by the target Large Face List. */ post( - options?: FindSimilarFromLargeFaceListParameters, + options: FindSimilarFromLargeFaceListParameters, ): StreamableMethod< - FindSimilarFromLargeFaceList200Response | FindSimilarFromLargeFaceListDefaultResponse + | FindSimilarFromLargeFaceList200Response + | FindSimilarFromLargeFaceListDefaultResponse >; } @@ -406,8 +435,10 @@ export interface IdentifyFromPersonGroup { * > * The 'recognitionModel' associated with the query faces' faceIds should be the same as the 'recognitionModel' used by the target Person Group. */ post( - options?: IdentifyFromPersonGroupParameters, - ): StreamableMethod; + options: IdentifyFromPersonGroupParameters, + ): StreamableMethod< + IdentifyFromPersonGroup200Response | IdentifyFromPersonGroupDefaultResponse + >; /** * For each face in the faceIds array, Face Identify will compute similarities between the query face and all the faces in the Large Person Group (given by largePersonGroupId), and return candidate person(s) for that face ranked by similarity confidence. The Large Person Group should be trained to make it ready for identification. See more in "Train Large Person Group". * > [!NOTE] @@ -421,9 +452,10 @@ export interface IdentifyFromPersonGroup { * > * The 'recognitionModel' associated with the query faces' faceIds should be the same as the 'recognitionModel' used by the target Person Group or Large Person Group. */ post( - options?: IdentifyFromLargePersonGroupParameters, + options: IdentifyFromLargePersonGroupParameters, ): StreamableMethod< - IdentifyFromLargePersonGroup200Response | IdentifyFromLargePersonGroupDefaultResponse + | IdentifyFromLargePersonGroup200Response + | IdentifyFromLargePersonGroupDefaultResponse >; /** * For each face in the faceIds array, Face Identify will compute similarities between the query face and all the faces in the Person Directory Persons (given by personIds), and return candidate person(s) for that face ranked by similarity confidence. @@ -438,9 +470,10 @@ export interface IdentifyFromPersonGroup { * > * The Identify operation can only match faces obtained with the same recognition model, that is associated with the query faces. */ post( - options?: IdentifyFromPersonDirectoryParameters, + options: IdentifyFromPersonDirectoryParameters, ): StreamableMethod< - IdentifyFromPersonDirectory200Response | IdentifyFromPersonDirectoryDefaultResponse + | IdentifyFromPersonDirectory200Response + | IdentifyFromPersonDirectoryDefaultResponse >; /** * For each face in the faceIds array, Face Identify will compute similarities between the query face and all the faces in the Dynamic Person Group (given by dynamicPersonGroupId), and return candidate person(s) for that face ranked by similarity confidence. @@ -454,9 +487,10 @@ export interface IdentifyFromPersonGroup { * > * The Identify operation can only match faces obtained with the same recognition model, that is associated with the query faces. */ post( - options?: IdentifyFromDynamicPersonGroupParameters, + options: IdentifyFromDynamicPersonGroupParameters, ): StreamableMethod< - IdentifyFromDynamicPersonGroup200Response | IdentifyFromDynamicPersonGroupDefaultResponse + | IdentifyFromDynamicPersonGroup200Response + | IdentifyFromDynamicPersonGroupDefaultResponse >; } @@ -470,8 +504,10 @@ export interface VerifyFaceToFace { * > * The 'recognitionModel' associated with the both faces should be the same. */ post( - options?: VerifyFaceToFaceParameters, - ): StreamableMethod; + options: VerifyFaceToFaceParameters, + ): StreamableMethod< + VerifyFaceToFace200Response | VerifyFaceToFaceDefaultResponse + >; /** * > [!NOTE] * > @@ -481,8 +517,10 @@ export interface VerifyFaceToFace { * > * The 'recognitionModel' associated with the query face should be the same as the 'recognitionModel' used by the Person Group. */ post( - options?: VerifyFromPersonGroupParameters, - ): StreamableMethod; + options: VerifyFromPersonGroupParameters, + ): StreamableMethod< + VerifyFromPersonGroup200Response | VerifyFromPersonGroupDefaultResponse + >; /** * > [!NOTE] * > @@ -492,9 +530,10 @@ export interface VerifyFaceToFace { * > * The 'recognitionModel' associated with the query face should be the same as the 'recognitionModel' used by the Large Person Group. */ post( - options?: VerifyFromLargePersonGroupParameters, + options: VerifyFromLargePersonGroupParameters, ): StreamableMethod< - VerifyFromLargePersonGroup200Response | VerifyFromLargePersonGroupDefaultResponse + | VerifyFromLargePersonGroup200Response + | VerifyFromLargePersonGroupDefaultResponse >; /** * > [!NOTE] @@ -505,9 +544,10 @@ export interface VerifyFaceToFace { * > * The Verify operation can only match faces obtained with the same recognition model, that is associated with the query face. */ post( - options?: VerifyFromPersonDirectoryParameters, + options: VerifyFromPersonDirectoryParameters, ): StreamableMethod< - VerifyFromPersonDirectory200Response | VerifyFromPersonDirectoryDefaultResponse + | VerifyFromPersonDirectory200Response + | VerifyFromPersonDirectoryDefaultResponse >; } @@ -520,185 +560,51 @@ export interface Group { * * Group API needs at least 2 candidate faces and 1000 at most. We suggest to try "Verify Face To Face" when you only have 2 candidate faces. * * The 'recognitionModel' associated with the query faces' faceIds should be the same. */ - post(options?: GroupParameters): StreamableMethod; + post( + options: GroupParameters, + ): StreamableMethod; } -export interface CreateLivenessSession { +export interface CreateFaceList { /** - * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. + * Up to 64 Face Lists are allowed in one subscription. * - * Permissions includes... - * > - * * - * * Ability to call /detectLiveness/singleModal for up to 3 retries. - * * A token lifetime of 10 minutes. + * Face List is a list of faces, up to 1,000 faces, and used by "Find Similar From Face List". * - * > [!NOTE] - * > Client access can be revoked by deleting the session using the Delete Liveness Session operation. To retrieve a result, use the Get Liveness Session. To audit the individual requests that a client has made to your resource, use the List Liveness Session Audit Entries. - */ - post( - options?: CreateLivenessSessionParameters, - ): StreamableMethod; - /** - * List sessions from the last sessionId greater than the 'start'. + * After creation, user should use "Add Face List Face" to import the faces. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Face List" is called. * - * The result should be ordered by sessionId in ascending order. + * "Find Similar" is used for scenario like finding celebrity-like faces, similar face filtering, or as a light way face identification. But if the actual use is to identify person, please use Person Group / Large Person Group and "Identify". + * + * Please consider Large Face List when the face number is large. It can support up to 1,000,000 faces. */ + put( + options: CreateFaceListParameters, + ): StreamableMethod< + CreateFaceList200Response | CreateFaceListDefaultResponse + >; + /** Delete a specified Face List. */ + delete( + options?: DeleteFaceListParameters, + ): StreamableMethod< + DeleteFaceList200Response | DeleteFaceListDefaultResponse + >; + /** Retrieve a Face List's faceListId, name, userData, recognitionModel and faces in the Face List. */ get( - options?: GetLivenessSessionsParameters, - ): StreamableMethod; + options?: GetFaceListParameters, + ): StreamableMethod; + /** Update information of a Face List, including name and userData. */ + patch( + options: UpdateFaceListParameters, + ): StreamableMethod< + UpdateFaceList200Response | UpdateFaceListDefaultResponse + >; } -export interface DeleteLivenessSession { +export interface GetFaceLists { /** - * > [!NOTE] - * > Deleting a session deactivates the Session Auth Token by blocking future API calls made with that Auth Token. While this can be used to remove any access for that token, those requests will still count towards overall resource rate limits. It's best to leverage TokenTTL to limit length of tokens in the case that it is misused. - */ - delete( - options?: DeleteLivenessSessionParameters, - ): StreamableMethod; - /** Get session result of detectLiveness/singleModal call. */ - get( - options?: GetLivenessSessionResultParameters, - ): StreamableMethod< - GetLivenessSessionResult200Response | GetLivenessSessionResultDefaultResponse - >; -} - -export interface GetLivenessSessionAuditEntries { - /** Gets session requests and response body for the session. */ - get( - options?: GetLivenessSessionAuditEntriesParameters, - ): StreamableMethod< - GetLivenessSessionAuditEntries200Response | GetLivenessSessionAuditEntriesDefaultResponse - >; -} - -export interface CreateLivenessWithVerifySessionWithVerifyImage { - /** - * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. - * - * Permissions includes... - * > - * * - * * Ability to call /detectLivenessWithVerify/singleModal for up to 3 retries. - * * A token lifetime of 10 minutes. - * - * > [!NOTE] - * > - * > * - * > * Client access can be revoked by deleting the session using the Delete Liveness With Verify Session operation. - * > * To retrieve a result, use the Get Liveness With Verify Session. - * > * To audit the individual requests that a client has made to your resource, use the List Liveness With Verify Session Audit Entries. - * - * Recommended Option: VerifyImage is provided during session creation. - */ - post( - options: CreateLivenessWithVerifySessionWithVerifyImageParameters, - ): StreamableMethod< - | CreateLivenessWithVerifySessionWithVerifyImage200Response - | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse - >; - /** - * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. - * - * Permissions includes... - * > - * * - * * Ability to call /detectLivenessWithVerify/singleModal for up to 3 retries. - * * A token lifetime of 10 minutes. - * - * > [!NOTE] - * > - * > * - * > * Client access can be revoked by deleting the session using the Delete Liveness With Verify Session operation. - * > * To retrieve a result, use the Get Liveness With Verify Session. - * > * To audit the individual requests that a client has made to your resource, use the List Liveness With Verify Session Audit Entries. - * - * Alternative Option: Client device submits VerifyImage during the /detectLivenessWithVerify/singleModal call. - * > [!NOTE] - * > Extra measures should be taken to validate that the client is sending the expected VerifyImage. - */ - post( - options?: CreateLivenessWithVerifySessionParameters, - ): StreamableMethod< - CreateLivenessWithVerifySession200Response | CreateLivenessWithVerifySessionDefaultResponse - >; - /** - * List sessions from the last sessionId greater than the "start". - * - * The result should be ordered by sessionId in ascending order. - */ - get( - options?: GetLivenessWithVerifySessionsParameters, - ): StreamableMethod< - GetLivenessWithVerifySessions200Response | GetLivenessWithVerifySessionsDefaultResponse - >; -} - -export interface DeleteLivenessWithVerifySession { - /** - * > [!NOTE] - * > Deleting a session deactivates the Session Auth Token by blocking future API calls made with that Auth Token. While this can be used to remove any access for that token, those requests will still count towards overall resource rate limits. It's best to leverage TokenTTL to limit length of tokens in the case that it is misused. - */ - delete( - options?: DeleteLivenessWithVerifySessionParameters, - ): StreamableMethod< - DeleteLivenessWithVerifySession200Response | DeleteLivenessWithVerifySessionDefaultResponse - >; - /** Get session result of detectLivenessWithVerify/singleModal call. */ - get( - options?: GetLivenessWithVerifySessionResultParameters, - ): StreamableMethod< - | GetLivenessWithVerifySessionResult200Response - | GetLivenessWithVerifySessionResultDefaultResponse - >; -} - -export interface GetLivenessWithVerifySessionAuditEntries { - /** Gets session requests and response body for the session. */ - get( - options?: GetLivenessWithVerifySessionAuditEntriesParameters, - ): StreamableMethod< - | GetLivenessWithVerifySessionAuditEntries200Response - | GetLivenessWithVerifySessionAuditEntriesDefaultResponse - >; -} - -export interface CreateFaceList { - /** - * Up to 64 Face Lists are allowed in one subscription. - * - * Face List is a list of faces, up to 1,000 faces, and used by "Find Similar From Face List". - * - * After creation, user should use "Add Face List Face" to import the faces. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Face List" is called. - * - * "Find Similar" is used for scenario like finding celebrity-like faces, similar face filtering, or as a light way face identification. But if the actual use is to identify person, please use Person Group / Large Person Group and "Identify". - * - * Please consider Large Face List when the face number is large. It can support up to 1,000,000 faces. - */ - put( - options?: CreateFaceListParameters, - ): StreamableMethod; - /** Delete a specified Face List. */ - delete( - options?: DeleteFaceListParameters, - ): StreamableMethod; - /** Retrieve a Face List's faceListId, name, userData, recognitionModel and faces in the Face List. */ - get( - options?: GetFaceListParameters, - ): StreamableMethod; - /** Update information of a Face List, including name and userData. */ - patch( - options?: UpdateFaceListParameters, - ): StreamableMethod; -} - -export interface GetFaceLists { - /** - * List Face Lists' faceListId, name, userData and recognitionModel. - * - * To get face information inside Face List use "Get Face List". + * List Face Lists' faceListId, name, userData and recognitionModel. + * + * To get face information inside Face List use "Get Face List". */ get( options?: GetFaceListsParameters, @@ -710,43 +616,49 @@ export interface AddFaceListFaceFromUrl { * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Face List Face" or "Delete Face List" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( - options?: AddFaceListFaceFromUrlParameters, - ): StreamableMethod; + options: AddFaceListFaceFromUrlParameters, + ): StreamableMethod< + AddFaceListFaceFromUrl200Response | AddFaceListFaceFromUrlDefaultResponse + >; /** * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Face List Face" or "Delete Face List" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( options: AddFaceListFaceParameters, - ): StreamableMethod; + ): StreamableMethod< + AddFaceListFace200Response | AddFaceListFaceDefaultResponse + >; } export interface DeleteFaceListFace { /** Adding/deleting faces to/from a same Face List are processed sequentially and to/from different Face Lists are in parallel. */ delete( options?: DeleteFaceListFaceParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteFaceListFace200Response | DeleteFaceListFaceDefaultResponse + >; } export interface CreateLargeFaceList { @@ -764,20 +676,28 @@ export interface CreateLargeFaceList { * > * S0-tier subscription quota: 1,000,000 Large Face Lists. */ put( - options?: CreateLargeFaceListParameters, - ): StreamableMethod; + options: CreateLargeFaceListParameters, + ): StreamableMethod< + CreateLargeFaceList200Response | CreateLargeFaceListDefaultResponse + >; /** Adding/deleting faces to/from a same Large Face List are processed sequentially and to/from different Large Face Lists are in parallel. */ delete( options?: DeleteLargeFaceListParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteLargeFaceList200Response | DeleteLargeFaceListDefaultResponse + >; /** Retrieve a Large Face List's largeFaceListId, name, userData and recognitionModel. */ get( options?: GetLargeFaceListParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargeFaceList200Response | GetLargeFaceListDefaultResponse + >; /** Update information of a Large Face List, including name and userData. */ patch( - options?: UpdateLargeFaceListParameters, - ): StreamableMethod; + options: UpdateLargeFaceListParameters, + ): StreamableMethod< + UpdateLargeFaceList200Response | UpdateLargeFaceListDefaultResponse + >; } export interface GetLargeFaceLists { @@ -799,7 +719,9 @@ export interface GetLargeFaceLists { */ get( options?: GetLargeFaceListsParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargeFaceLists200Response | GetLargeFaceListsDefaultResponse + >; } export interface GetLargeFaceListTrainingStatus { @@ -811,7 +733,8 @@ export interface GetLargeFaceListTrainingStatus { get( options?: GetLargeFaceListTrainingStatusParameters, ): StreamableMethod< - GetLargeFaceListTrainingStatus200Response | GetLargeFaceListTrainingStatusDefaultResponse + | GetLargeFaceListTrainingStatus200Response + | GetLargeFaceListTrainingStatusDefaultResponse >; } @@ -823,7 +746,9 @@ export interface TrainLargeFaceList { */ post( options?: TrainLargeFaceListParameters, - ): StreamableMethod; + ): StreamableMethod< + TrainLargeFaceList202Response | TrainLargeFaceListDefaultResponse + >; } export interface AddLargeFaceListFaceFromUrl { @@ -831,15 +756,15 @@ export interface AddLargeFaceListFaceFromUrl { * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Large Face List Face" or "Delete Large Face List" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). * * > [!NOTE] * > @@ -848,23 +773,24 @@ export interface AddLargeFaceListFaceFromUrl { * > * S0-tier subscription quota: 1,000,000 faces per Large Face List. */ post( - options?: AddLargeFaceListFaceFromUrlParameters, + options: AddLargeFaceListFaceFromUrlParameters, ): StreamableMethod< - AddLargeFaceListFaceFromUrl200Response | AddLargeFaceListFaceFromUrlDefaultResponse + | AddLargeFaceListFaceFromUrl200Response + | AddLargeFaceListFaceFromUrlDefaultResponse >; /** * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Large Face List Face" or "Delete Large Face List" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). * * > [!NOTE] * > @@ -874,7 +800,9 @@ export interface AddLargeFaceListFaceFromUrl { */ post( options: AddLargeFaceListFaceParameters, - ): StreamableMethod; + ): StreamableMethod< + AddLargeFaceListFace200Response | AddLargeFaceListFaceDefaultResponse + >; /** * Faces are stored in alphabetical order of persistedFaceId created in "Add Large Face List Face". * > @@ -891,66 +819,77 @@ export interface AddLargeFaceListFaceFromUrl { */ get( options?: GetLargeFaceListFacesParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargeFaceListFaces200Response | GetLargeFaceListFacesDefaultResponse + >; } export interface DeleteLargeFaceListFace { /** Delete a face from a Large Face List by specified largeFaceListId and persistedFaceId. */ delete( options?: DeleteLargeFaceListFaceParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteLargeFaceListFace200Response | DeleteLargeFaceListFaceDefaultResponse + >; /** Retrieve persisted face in Large Face List by largeFaceListId and persistedFaceId. */ get( options?: GetLargeFaceListFaceParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargeFaceListFace200Response | GetLargeFaceListFaceDefaultResponse + >; /** Update a specified face's userData field in a Large Face List by its persistedFaceId. */ patch( - options?: UpdateLargeFaceListFaceParameters, - ): StreamableMethod; + options: UpdateLargeFaceListFaceParameters, + ): StreamableMethod< + UpdateLargeFaceListFace200Response | UpdateLargeFaceListFaceDefaultResponse + >; } -export interface CreatePerson { - /** Creates a new person in a Person Directory. To add face to this person, please call Person Directory "Add Person Face". */ - post( - options?: CreatePersonParameters, - ): StreamableMethod; +export interface CreatePersonGroup { /** - * Persons are stored in alphabetical order of personId created in Person Directory "Create Person". - * > - * * - * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. - * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. + * A Person Group is a container holding the uploaded person data, including face recognition features. * - * > [!TIP] + * After creation, use "Create Person Group Person" to add persons into the group, and then call "Train Person Group" to get this group ready for "Identify From Person Group". + * + * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until "Delete Person Group Person" or "Delete Person Group" is called. + * + * 'recognitionModel' should be specified to associate with this Person Group. The default value for 'recognitionModel' is 'recognition_01', if the latest model needed, please explicitly specify the model you need in this parameter. New faces that are added to an existing Person Group will use the recognition model that's already associated with the collection. Existing face feature(s) in a Person Group can't be updated to features extracted by another version of recognition model. + * + * > [!NOTE] * > - * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". - * > * "start=&top=" will return all 5 items. - * > * "start=&top=2" will return "itemId1", "itemId2". - * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". + * > * + * > * Free-tier subscription quota: 1,000 Person Groups. Each holds up to 1,000 persons. + * > * S0-tier subscription quota: 1,000,000 Person Groups. Each holds up to 10,000 persons. + * > * to handle larger scale face identification problem, please consider using Large Person Group. */ - get( - options?: GetPersonsParameters, - ): StreamableMethod; -} - -export interface DeletePerson { - /** Delete an existing person from Person Directory. The persistedFaceId(s), userData, person name and face feature(s) in the person entry will all be deleted. */ + put( + options: CreatePersonGroupParameters, + ): StreamableMethod< + CreatePersonGroup200Response | CreatePersonGroupDefaultResponse + >; + /** Delete an existing Person Group with specified personGroupId. Persisted data in this Person Group will be deleted. */ delete( - options?: DeletePersonParameters, - ): StreamableMethod; - /** Retrieve a person's name and userData from Person Directory. */ + options?: DeletePersonGroupParameters, + ): StreamableMethod< + DeletePersonGroup200Response | DeletePersonGroupDefaultResponse + >; + /** Retrieve Person Group name, userData and recognitionModel. To get person information under this personGroup, use "Get Person Group Persons". */ get( - options?: GetPersonParameters, - ): StreamableMethod; - /** Update name or userData of a person. */ + options?: GetPersonGroupParameters, + ): StreamableMethod< + GetPersonGroup200Response | GetPersonGroupDefaultResponse + >; + /** Update an existing Person Group's name and userData. The properties keep unchanged if they are not in request body. */ patch( - options?: UpdatePersonParameters, - ): StreamableMethod; + options: UpdatePersonGroupParameters, + ): StreamableMethod< + UpdatePersonGroup200Response | UpdatePersonGroupDefaultResponse + >; } -export interface GetDynamicPersonGroupReferences { +export interface GetPersonGroups { /** - * Dynamic Person Groups are stored in alphabetical order of Dynamic Person Group ID created in Person Directory "Create Dynamic Person Group". + * Person Groups are stored in alphabetical order of personGroupId. * > * * * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. @@ -964,244 +903,34 @@ export interface GetDynamicPersonGroupReferences { * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". */ get( - options?: GetDynamicPersonGroupReferencesParameters, + options?: GetPersonGroupsParameters, ): StreamableMethod< - GetDynamicPersonGroupReferences200Response | GetDynamicPersonGroupReferencesDefaultResponse + GetPersonGroups200Response | GetPersonGroupsDefaultResponse >; } -export interface AddPersonFace { +export interface GetPersonGroupTrainingStatus { + /** To check Person Group training status completed or still ongoing. Person Group training is an asynchronous operation triggered by "Train Person Group" API. */ + get( + options?: GetPersonGroupTrainingStatusParameters, + ): StreamableMethod< + | GetPersonGroupTrainingStatus200Response + | GetPersonGroupTrainingStatusDefaultResponse + >; +} + +export interface TrainPersonGroup { + /** The training task is an asynchronous task. Training time depends on the number of person entries, and their faces in a Person Group. It could be several seconds to minutes. To check training status, please use "Get Person Group Training Status". */ + post( + options?: TrainPersonGroupParameters, + ): StreamableMethod< + TrainPersonGroup202Response | TrainPersonGroupDefaultResponse + >; +} + +export interface CreatePersonGroupPerson { /** - * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until Person Directory "Delete Person Face" or "Delete Person" is called. - * - * Note that persistedFaceId is different from faceId generated by "Detect". - * > - * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. - * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. - * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. - * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. - * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model - * * - * * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. - * * This is a long running operation. Use Response Header "Operation-Location" to determine when the AddFace operation has successfully propagated for future requests to "Identify". For further information about Operation-Locations see "Get Face Operation Status". - */ - post( - options: AddPersonFaceParameters, - ): StreamableMethod; - /** - * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until Person Directory "Delete Person Face" or "Delete Person" is called. - * - * Note that persistedFaceId is different from faceId generated by "Detect". - * > - * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. - * * Each person entry can hold up to 248 faces. - * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. - * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. - * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. - * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model - * * - * * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. - * * This is a long running operation. Use Response Header "Operation-Location" to determine when the AddFace operation has successfully propagated for future requests to "Identify". For further information about Operation-Locations see "Get Face Operation Status". - */ - post( - options?: AddPersonFaceFromUrlParameters, - ): StreamableMethod; - /** Retrieve a person's persistedFaceIds representing the registered person face feature(s). */ - get( - options?: GetPersonFacesParameters, - ): StreamableMethod; -} - -export interface DeletePersonFace { - /** Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. */ - delete( - options?: DeletePersonFaceParameters, - ): StreamableMethod; - /** Retrieve person face information. The persisted person face is specified by its personId. recognitionModel, and persistedFaceId. */ - get( - options?: GetPersonFaceParameters, - ): StreamableMethod; - /** Update a persisted face's userData field of a person. */ - patch( - options?: UpdatePersonFaceParameters, - ): StreamableMethod; -} - -export interface CreateDynamicPersonGroupWithPerson { - /** - * A Dynamic Person Group is a container that references Person Directory "Create Person". After creation, use Person Directory "Update Dynamic Person Group" to add/remove persons to/from the Dynamic Person Group. - * - * Dynamic Person Group and user data will be stored on server until Person Directory "Delete Dynamic Person Group" is called. Use "Identify From Dynamic Person Group" with the dynamicPersonGroupId parameter to identify against persons. - * - * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until Person Directory "Delete Person" or "Delete Person Face" is called. - * - * 'recognitionModel' does not need to be specified with Dynamic Person Groups. Dynamic Person Groups are references to Person Directory "Create Person" and therefore work with most all 'recognitionModels'. The faceId's provided during "Identify" determine the 'recognitionModel' used. - */ - put( - options?: CreateDynamicPersonGroupWithPersonParameters, - ): StreamableMethod< - | CreateDynamicPersonGroupWithPerson202Response - | CreateDynamicPersonGroupWithPersonDefaultResponse - >; - /** - * A Dynamic Person Group is a container that references Person Directory "Create Person". After creation, use Person Directory "Update Dynamic Person Group" to add/remove persons to/from the Dynamic Person Group. - * - * Dynamic Person Group and user data will be stored on server until Person Directory "Delete Dynamic Person Group" is called. Use "Identify From Dynamic Person Group" with the dynamicPersonGroupId parameter to identify against persons. - * - * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until Person Directory "Delete Person" or "Delete Person Face" is called. - * - * 'recognitionModel' does not need to be specified with Dynamic Person Groups. Dynamic Person Groups are references to Person Directory "Create Person" and therefore work with most all 'recognitionModels'. The faceId's provided during "Identify" determine the 'recognitionModel' used. - */ - put( - options?: CreateDynamicPersonGroupParameters, - ): StreamableMethod< - CreateDynamicPersonGroup200Response | CreateDynamicPersonGroupDefaultResponse - >; - /** Deleting this Dynamic Person Group only delete the references to persons data. To delete actual person see Person Directory "Delete Person". */ - delete( - options?: DeleteDynamicPersonGroupParameters, - ): StreamableMethod< - DeleteDynamicPersonGroup202Response | DeleteDynamicPersonGroupDefaultResponse - >; - /** This API returns Dynamic Person Group information only, use Person Directory "Get Dynamic Person Group Persons" instead to retrieve person information under the Dynamic Person Group. */ - get( - options?: GetDynamicPersonGroupParameters, - ): StreamableMethod; - /** The properties keep unchanged if they are not in request body. */ - patch( - options?: UpdateDynamicPersonGroupWithPersonChangesParameters, - ): StreamableMethod< - | UpdateDynamicPersonGroupWithPersonChanges202Response - | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse - >; - /** The properties keep unchanged if they are not in request body. */ - patch( - options?: UpdateDynamicPersonGroupParameters, - ): StreamableMethod< - UpdateDynamicPersonGroup200Response | UpdateDynamicPersonGroupDefaultResponse - >; -} - -export interface GetDynamicPersonGroups { - /** - * Dynamic Person Groups are stored in alphabetical order of dynamicPersonGroupId. - * > - * * - * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. - * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. - * - * > [!TIP] - * > - * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". - * > * "start=&top=" will return all 5 items. - * > * "start=&top=2" will return "itemId1", "itemId2". - * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". - */ - get( - options?: GetDynamicPersonGroupsParameters, - ): StreamableMethod; -} - -export interface GetDynamicPersonGroupPersons { - /** - * Persons are stored in alphabetical order of personId created in Person Directory "Create Person". - * > - * * - * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. - * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. - * - * > [!TIP] - * > - * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". - * > * "start=&top=" will return all 5 items. - * > * "start=&top=2" will return "itemId1", "itemId2". - * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". - */ - get( - options?: GetDynamicPersonGroupPersonsParameters, - ): StreamableMethod< - GetDynamicPersonGroupPersons200Response | GetDynamicPersonGroupPersonsDefaultResponse - >; -} - -export interface CreatePersonGroup { - /** - * A Person Group is a container holding the uploaded person data, including face recognition features. - * - * After creation, use "Create Person Group Person" to add persons into the group, and then call "Train Person Group" to get this group ready for "Identify From Person Group". - * - * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until "Delete Person Group Person" or "Delete Person Group" is called. - * - * 'recognitionModel' should be specified to associate with this Person Group. The default value for 'recognitionModel' is 'recognition_01', if the latest model needed, please explicitly specify the model you need in this parameter. New faces that are added to an existing Person Group will use the recognition model that's already associated with the collection. Existing face feature(s) in a Person Group can't be updated to features extracted by another version of recognition model. - * - * > [!NOTE] - * > - * > * - * > * Free-tier subscription quota: 1,000 Person Groups. Each holds up to 1,000 persons. - * > * S0-tier subscription quota: 1,000,000 Person Groups. Each holds up to 10,000 persons. - * > * to handle larger scale face identification problem, please consider using Large Person Group. - */ - put( - options?: CreatePersonGroupParameters, - ): StreamableMethod; - /** Delete an existing Person Group with specified personGroupId. Persisted data in this Person Group will be deleted. */ - delete( - options?: DeletePersonGroupParameters, - ): StreamableMethod; - /** Retrieve Person Group name, userData and recognitionModel. To get person information under this personGroup, use "Get Person Group Persons". */ - get( - options?: GetPersonGroupParameters, - ): StreamableMethod; - /** Update an existing Person Group's name and userData. The properties keep unchanged if they are not in request body. */ - patch( - options?: UpdatePersonGroupParameters, - ): StreamableMethod; -} - -export interface GetPersonGroups { - /** - * Person Groups are stored in alphabetical order of personGroupId. - * > - * * - * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. - * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. - * - * > [!TIP] - * > - * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". - * > * "start=&top=" will return all 5 items. - * > * "start=&top=2" will return "itemId1", "itemId2". - * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". - */ - get( - options?: GetPersonGroupsParameters, - ): StreamableMethod; -} - -export interface GetPersonGroupTrainingStatus { - /** To check Person Group training status completed or still ongoing. Person Group training is an asynchronous operation triggered by "Train Person Group" API. */ - get( - options?: GetPersonGroupTrainingStatusParameters, - ): StreamableMethod< - GetPersonGroupTrainingStatus200Response | GetPersonGroupTrainingStatusDefaultResponse - >; -} - -export interface TrainPersonGroup { - /** The training task is an asynchronous task. Training time depends on the number of person entries, and their faces in a Person Group. It could be several seconds to minutes. To check training status, please use "Get Person Group Training Status". */ - post( - options?: TrainPersonGroupParameters, - ): StreamableMethod; -} - -export interface CreatePersonGroupPerson { - /** - * > [!NOTE] + * > [!NOTE] * > * > * * > * Free-tier subscription quota: @@ -1212,8 +941,10 @@ export interface CreatePersonGroupPerson { * > * 100,000,000 persons in all Person Groups. */ post( - options?: CreatePersonGroupPersonParameters, - ): StreamableMethod; + options: CreatePersonGroupPersonParameters, + ): StreamableMethod< + CreatePersonGroupPerson200Response | CreatePersonGroupPersonDefaultResponse + >; /** * Persons are stored in alphabetical order of personId created in "Create Person Group Person". * > @@ -1230,22 +961,30 @@ export interface CreatePersonGroupPerson { */ get( options?: GetPersonGroupPersonsParameters, - ): StreamableMethod; + ): StreamableMethod< + GetPersonGroupPersons200Response | GetPersonGroupPersonsDefaultResponse + >; } export interface DeletePersonGroupPerson { /** Delete an existing person from a Person Group. The persistedFaceId, userData, person name and face feature(s) in the person entry will all be deleted. */ delete( options?: DeletePersonGroupPersonParameters, - ): StreamableMethod; + ): StreamableMethod< + DeletePersonGroupPerson200Response | DeletePersonGroupPersonDefaultResponse + >; /** Retrieve a person's name and userData, and the persisted faceIds representing the registered person face feature(s). */ get( options?: GetPersonGroupPersonParameters, - ): StreamableMethod; + ): StreamableMethod< + GetPersonGroupPerson200Response | GetPersonGroupPersonDefaultResponse + >; /** Update name or userData of a person. */ patch( - options?: UpdatePersonGroupPersonParameters, - ): StreamableMethod; + options: UpdatePersonGroupPersonParameters, + ): StreamableMethod< + UpdatePersonGroupPerson200Response | UpdatePersonGroupPersonDefaultResponse + >; } export interface AddPersonGroupPersonFaceFromUrl { @@ -1253,39 +992,43 @@ export interface AddPersonGroupPersonFaceFromUrl { * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Person Group Person Face", "Delete Person Group Person" or "Delete Person Group" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( - options?: AddPersonGroupPersonFaceFromUrlParameters, + options: AddPersonGroupPersonFaceFromUrlParameters, ): StreamableMethod< - AddPersonGroupPersonFaceFromUrl200Response | AddPersonGroupPersonFaceFromUrlDefaultResponse + | AddPersonGroupPersonFaceFromUrl200Response + | AddPersonGroupPersonFaceFromUrlDefaultResponse >; /** * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Person Group Person Face", "Delete Person Group Person" or "Delete Person Group" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( options: AddPersonGroupPersonFaceParameters, ): StreamableMethod< - AddPersonGroupPersonFace200Response | AddPersonGroupPersonFaceDefaultResponse + | AddPersonGroupPersonFace200Response + | AddPersonGroupPersonFaceDefaultResponse >; } @@ -1294,19 +1037,22 @@ export interface DeletePersonGroupPersonFace { delete( options?: DeletePersonGroupPersonFaceParameters, ): StreamableMethod< - DeletePersonGroupPersonFace200Response | DeletePersonGroupPersonFaceDefaultResponse + | DeletePersonGroupPersonFace200Response + | DeletePersonGroupPersonFaceDefaultResponse >; /** Retrieve person face information. The persisted person face is specified by its personGroupId, personId and persistedFaceId. */ get( options?: GetPersonGroupPersonFaceParameters, ): StreamableMethod< - GetPersonGroupPersonFace200Response | GetPersonGroupPersonFaceDefaultResponse + | GetPersonGroupPersonFace200Response + | GetPersonGroupPersonFaceDefaultResponse >; /** Update a person persisted face's userData field. */ patch( - options?: UpdatePersonGroupPersonFaceParameters, + options: UpdatePersonGroupPersonFaceParameters, ): StreamableMethod< - UpdatePersonGroupPersonFace200Response | UpdatePersonGroupPersonFaceDefaultResponse + | UpdatePersonGroupPersonFace200Response + | UpdatePersonGroupPersonFaceDefaultResponse >; } @@ -1327,20 +1073,28 @@ export interface CreateLargePersonGroup { * > * S0-tier subscription quota: 1,000,000 Large Person Groups. */ put( - options?: CreateLargePersonGroupParameters, - ): StreamableMethod; + options: CreateLargePersonGroupParameters, + ): StreamableMethod< + CreateLargePersonGroup200Response | CreateLargePersonGroupDefaultResponse + >; /** Delete an existing Large Person Group with specified personGroupId. Persisted data in this Large Person Group will be deleted. */ delete( options?: DeleteLargePersonGroupParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteLargePersonGroup200Response | DeleteLargePersonGroupDefaultResponse + >; /** Retrieve the information of a Large Person Group, including its name, userData and recognitionModel. This API returns Large Person Group information only, use "Get Large Person Group Persons" instead to retrieve person information under the Large Person Group. */ get( options?: GetLargePersonGroupParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargePersonGroup200Response | GetLargePersonGroupDefaultResponse + >; /** Update an existing Large Person Group's name and userData. The properties keep unchanged if they are not in request body. */ patch( - options?: UpdateLargePersonGroupParameters, - ): StreamableMethod; + options: UpdateLargePersonGroupParameters, + ): StreamableMethod< + UpdateLargePersonGroup200Response | UpdateLargePersonGroupDefaultResponse + >; } export interface GetLargePersonGroups { @@ -1360,7 +1114,9 @@ export interface GetLargePersonGroups { */ get( options?: GetLargePersonGroupsParameters, - ): StreamableMethod; + ): StreamableMethod< + GetLargePersonGroups200Response | GetLargePersonGroupsDefaultResponse + >; } export interface GetLargePersonGroupTrainingStatus { @@ -1368,7 +1124,8 @@ export interface GetLargePersonGroupTrainingStatus { get( options?: GetLargePersonGroupTrainingStatusParameters, ): StreamableMethod< - GetLargePersonGroupTrainingStatus200Response | GetLargePersonGroupTrainingStatusDefaultResponse + | GetLargePersonGroupTrainingStatus200Response + | GetLargePersonGroupTrainingStatusDefaultResponse >; } @@ -1376,7 +1133,9 @@ export interface TrainLargePersonGroup { /** The training task is an asynchronous task. Training time depends on the number of person entries, and their faces in a Large Person Group. It could be in several seconds, or up to half a hour for 1,000,000 persons. To check training status, please use "Get Large Person Group Training Status". */ post( options?: TrainLargePersonGroupParameters, - ): StreamableMethod; + ): StreamableMethod< + TrainLargePersonGroup202Response | TrainLargePersonGroupDefaultResponse + >; } export interface CreateLargePersonGroupPerson { @@ -1392,9 +1151,10 @@ export interface CreateLargePersonGroupPerson { * > * 1,000,000,000 persons in all Large Person Groups. */ post( - options?: CreateLargePersonGroupPersonParameters, + options: CreateLargePersonGroupPersonParameters, ): StreamableMethod< - CreateLargePersonGroupPerson200Response | CreateLargePersonGroupPersonDefaultResponse + | CreateLargePersonGroupPerson200Response + | CreateLargePersonGroupPersonDefaultResponse >; /** * Persons are stored in alphabetical order of personId created in "Create Large Person Group Person". @@ -1413,7 +1173,8 @@ export interface CreateLargePersonGroupPerson { get( options?: GetLargePersonGroupPersonsParameters, ): StreamableMethod< - GetLargePersonGroupPersons200Response | GetLargePersonGroupPersonsDefaultResponse + | GetLargePersonGroupPersons200Response + | GetLargePersonGroupPersonsDefaultResponse >; } @@ -1422,19 +1183,22 @@ export interface DeleteLargePersonGroupPerson { delete( options?: DeleteLargePersonGroupPersonParameters, ): StreamableMethod< - DeleteLargePersonGroupPerson200Response | DeleteLargePersonGroupPersonDefaultResponse + | DeleteLargePersonGroupPerson200Response + | DeleteLargePersonGroupPersonDefaultResponse >; /** Retrieve a person's name and userData, and the persisted faceIds representing the registered person face feature(s). */ get( options?: GetLargePersonGroupPersonParameters, ): StreamableMethod< - GetLargePersonGroupPerson200Response | GetLargePersonGroupPersonDefaultResponse + | GetLargePersonGroupPerson200Response + | GetLargePersonGroupPersonDefaultResponse >; /** Update name or userData of a person. */ patch( - options?: UpdateLargePersonGroupPersonParameters, + options: UpdateLargePersonGroupPersonParameters, ): StreamableMethod< - UpdateLargePersonGroupPerson200Response | UpdateLargePersonGroupPersonDefaultResponse + | UpdateLargePersonGroupPerson200Response + | UpdateLargePersonGroupPersonDefaultResponse >; } @@ -1443,18 +1207,19 @@ export interface AddLargePersonGroupPersonFaceFromUrl { * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Large Person Group Person Face", "Delete Large Person Group Person" or "Delete Large Person Group" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( - options?: AddLargePersonGroupPersonFaceFromUrlParameters, + options: AddLargePersonGroupPersonFaceFromUrlParameters, ): StreamableMethod< | AddLargePersonGroupPersonFaceFromUrl200Response | AddLargePersonGroupPersonFaceFromUrlDefaultResponse @@ -1463,20 +1228,22 @@ export interface AddLargePersonGroupPersonFaceFromUrl { * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until "Delete Large Person Group Person Face", "Delete Large Person Group Person" or "Delete Large Person Group" is called. * * Note that persistedFaceId is different from faceId generated by "Detect". + * * > * * - * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. - * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). */ post( options: AddLargePersonGroupPersonFaceParameters, ): StreamableMethod< - AddLargePersonGroupPersonFace200Response | AddLargePersonGroupPersonFaceDefaultResponse + | AddLargePersonGroupPersonFace200Response + | AddLargePersonGroupPersonFaceDefaultResponse >; } @@ -1485,67 +1252,446 @@ export interface DeleteLargePersonGroupPersonFace { delete( options?: DeleteLargePersonGroupPersonFaceParameters, ): StreamableMethod< - DeleteLargePersonGroupPersonFace200Response | DeleteLargePersonGroupPersonFaceDefaultResponse + | DeleteLargePersonGroupPersonFace200Response + | DeleteLargePersonGroupPersonFaceDefaultResponse >; /** Retrieve person face information. The persisted person face is specified by its largePersonGroupId, personId and persistedFaceId. */ get( options?: GetLargePersonGroupPersonFaceParameters, ): StreamableMethod< - GetLargePersonGroupPersonFace200Response | GetLargePersonGroupPersonFaceDefaultResponse + | GetLargePersonGroupPersonFace200Response + | GetLargePersonGroupPersonFaceDefaultResponse >; /** Update a person persisted face's userData field. */ patch( - options?: UpdateLargePersonGroupPersonFaceParameters, + options: UpdateLargePersonGroupPersonFaceParameters, ): StreamableMethod< - UpdateLargePersonGroupPersonFace200Response | UpdateLargePersonGroupPersonFaceDefaultResponse + | UpdateLargePersonGroupPersonFace200Response + | UpdateLargePersonGroupPersonFaceDefaultResponse >; } -export interface Routes { - /** Resource for '/operations/\{operationId\}' has methods for the following verbs: get */ - (path: "/operations/{operationId}", operationId: string): GetOperationResult; - /** Resource for '/detect' has methods for the following verbs: post */ - (path: "/detect"): DetectFromUrl; - /** Resource for '/findsimilars' has methods for the following verbs: post */ - (path: "/findsimilars"): FindSimilar; - /** Resource for '/identify' has methods for the following verbs: post */ - (path: "/identify"): IdentifyFromPersonGroup; - /** Resource for '/verify' has methods for the following verbs: post */ - (path: "/verify"): VerifyFaceToFace; - /** Resource for '/group' has methods for the following verbs: post */ - (path: "/group"): Group; - /** Resource for '/detectLiveness/singleModal/sessions' has methods for the following verbs: post, get */ - (path: "/detectLiveness/singleModal/sessions"): CreateLivenessSession; - /** Resource for '/detectLiveness/singleModal/sessions/\{sessionId\}' has methods for the following verbs: delete, get */ - ( - path: "/detectLiveness/singleModal/sessions/{sessionId}", - sessionId: string, - ): DeleteLivenessSession; - /** Resource for '/detectLiveness/singleModal/sessions/\{sessionId\}/audit' has methods for the following verbs: get */ - ( - path: "/detectLiveness/singleModal/sessions/{sessionId}/audit", - sessionId: string, - ): GetLivenessSessionAuditEntries; - /** Resource for '/detectLivenessWithVerify/singleModal/sessions' has methods for the following verbs: post, get */ - ( - path: "/detectLivenessWithVerify/singleModal/sessions", - ): CreateLivenessWithVerifySessionWithVerifyImage; - /** Resource for '/detectLivenessWithVerify/singleModal/sessions/\{sessionId\}' has methods for the following verbs: delete, get */ - ( - path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}", - sessionId: string, - ): DeleteLivenessWithVerifySession; - /** Resource for '/detectLivenessWithVerify/singleModal/sessions/\{sessionId\}/audit' has methods for the following verbs: get */ - ( - path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", - sessionId: string, - ): GetLivenessWithVerifySessionAuditEntries; +export interface CreateLivenessSession { + /** + * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. + * + * Permissions includes... + * > + * * + * * Ability to call /detectLiveness/singleModal for up to 3 retries. + * * A token lifetime of 10 minutes. + * + * > [!NOTE] + * > Client access can be revoked by deleting the session using the Delete Liveness Session operation. To retrieve a result, use the Get Liveness Session. To audit the individual requests that a client has made to your resource, use the List Liveness Session Audit Entries. + */ + post( + options: CreateLivenessSessionParameters, + ): StreamableMethod< + CreateLivenessSession200Response | CreateLivenessSessionDefaultResponse + >; + /** + * List sessions from the last sessionId greater than the 'start'. + * + * The result should be ordered by sessionId in ascending order. + */ + get( + options?: GetLivenessSessionsParameters, + ): StreamableMethod< + GetLivenessSessions200Response | GetLivenessSessionsDefaultResponse + >; +} + +export interface DeleteLivenessSession { + /** + * > [!NOTE] + * > Deleting a session deactivates the Session Auth Token by blocking future API calls made with that Auth Token. While this can be used to remove any access for that token, those requests will still count towards overall resource rate limits. It's best to leverage TokenTTL to limit length of tokens in the case that it is misused. + */ + delete( + options?: DeleteLivenessSessionParameters, + ): StreamableMethod< + DeleteLivenessSession200Response | DeleteLivenessSessionDefaultResponse + >; + /** Get session result of detectLiveness/singleModal call. */ + get( + options?: GetLivenessSessionResultParameters, + ): StreamableMethod< + | GetLivenessSessionResult200Response + | GetLivenessSessionResultDefaultResponse + >; +} + +export interface GetLivenessSessionAuditEntries { + /** Gets session requests and response body for the session. */ + get( + options?: GetLivenessSessionAuditEntriesParameters, + ): StreamableMethod< + | GetLivenessSessionAuditEntries200Response + | GetLivenessSessionAuditEntriesDefaultResponse + >; +} + +export interface CreateLivenessWithVerifySessionWithVerifyImage { + /** + * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. + * + * Permissions includes... + * > + * * + * * Ability to call /detectLivenessWithVerify/singleModal for up to 3 retries. + * * A token lifetime of 10 minutes. + * + * > [!NOTE] + * > + * > * + * > * Client access can be revoked by deleting the session using the Delete Liveness With Verify Session operation. + * > * To retrieve a result, use the Get Liveness With Verify Session. + * > * To audit the individual requests that a client has made to your resource, use the List Liveness With Verify Session Audit Entries. + * + * Recommended Option: VerifyImage is provided during session creation. + */ + post( + options: CreateLivenessWithVerifySessionWithVerifyImageParameters, + ): StreamableMethod< + | CreateLivenessWithVerifySessionWithVerifyImage200Response + | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse + >; + /** + * A session is best for client device scenarios where developers want to authorize a client device to perform only a liveness detection without granting full access to their resource. Created sessions have a limited life span and only authorize clients to perform the desired action before access is expired. + * + * Permissions includes... + * > + * * + * * Ability to call /detectLivenessWithVerify/singleModal for up to 3 retries. + * * A token lifetime of 10 minutes. + * + * > [!NOTE] + * > + * > * + * > * Client access can be revoked by deleting the session using the Delete Liveness With Verify Session operation. + * > * To retrieve a result, use the Get Liveness With Verify Session. + * > * To audit the individual requests that a client has made to your resource, use the List Liveness With Verify Session Audit Entries. + * + * Alternative Option: Client device submits VerifyImage during the /detectLivenessWithVerify/singleModal call. + * > [!NOTE] + * > Extra measures should be taken to validate that the client is sending the expected VerifyImage. + */ + post( + options: CreateLivenessWithVerifySessionParameters, + ): StreamableMethod< + | CreateLivenessWithVerifySession200Response + | CreateLivenessWithVerifySessionDefaultResponse + >; + /** + * List sessions from the last sessionId greater than the "start". + * + * The result should be ordered by sessionId in ascending order. + */ + get( + options?: GetLivenessWithVerifySessionsParameters, + ): StreamableMethod< + | GetLivenessWithVerifySessions200Response + | GetLivenessWithVerifySessionsDefaultResponse + >; +} + +export interface DeleteLivenessWithVerifySession { + /** + * > [!NOTE] + * > Deleting a session deactivates the Session Auth Token by blocking future API calls made with that Auth Token. While this can be used to remove any access for that token, those requests will still count towards overall resource rate limits. It's best to leverage TokenTTL to limit length of tokens in the case that it is misused. + */ + delete( + options?: DeleteLivenessWithVerifySessionParameters, + ): StreamableMethod< + | DeleteLivenessWithVerifySession200Response + | DeleteLivenessWithVerifySessionDefaultResponse + >; + /** Get session result of detectLivenessWithVerify/singleModal call. */ + get( + options?: GetLivenessWithVerifySessionResultParameters, + ): StreamableMethod< + | GetLivenessWithVerifySessionResult200Response + | GetLivenessWithVerifySessionResultDefaultResponse + >; +} + +export interface GetLivenessWithVerifySessionAuditEntries { + /** Gets session requests and response body for the session. */ + get( + options?: GetLivenessWithVerifySessionAuditEntriesParameters, + ): StreamableMethod< + | GetLivenessWithVerifySessionAuditEntries200Response + | GetLivenessWithVerifySessionAuditEntriesDefaultResponse + >; +} + +export interface GetSessionImage { + /** Get session image stored during the liveness session. */ + get( + options?: GetSessionImageParameters, + ): StreamableMethod< + GetSessionImage200Response | GetSessionImageDefaultResponse + >; +} + +export interface CreatePerson { + /** Creates a new person in a Person Directory. To add face to this person, please call Person Directory "Add Person Face". */ + post( + options: CreatePersonParameters, + ): StreamableMethod; + /** + * Persons are stored in alphabetical order of personId created in Person Directory "Create Person". + * > + * * + * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. + * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. + * + * > [!TIP] + * > + * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". + * > * "start=&top=" will return all 5 items. + * > * "start=&top=2" will return "itemId1", "itemId2". + * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". + */ + get( + options?: GetPersonsParameters, + ): StreamableMethod; +} + +export interface DeletePerson { + /** Delete an existing person from Person Directory. The persistedFaceId(s), userData, person name and face feature(s) in the person entry will all be deleted. */ + delete( + options?: DeletePersonParameters, + ): StreamableMethod; + /** Retrieve a person's name and userData from Person Directory. */ + get( + options?: GetPersonParameters, + ): StreamableMethod; + /** Update name or userData of a person. */ + patch( + options: UpdatePersonParameters, + ): StreamableMethod; +} + +export interface GetDynamicPersonGroupReferences { + /** + * Dynamic Person Groups are stored in alphabetical order of Dynamic Person Group ID created in Person Directory "Create Dynamic Person Group". + * > + * * + * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. + * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. + * + * > [!TIP] + * > + * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". + * > * "start=&top=" will return all 5 items. + * > * "start=&top=2" will return "itemId1", "itemId2". + * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". + */ + get( + options?: GetDynamicPersonGroupReferencesParameters, + ): StreamableMethod< + | GetDynamicPersonGroupReferences200Response + | GetDynamicPersonGroupReferencesDefaultResponse + >; +} + +export interface AddPersonFace { + /** + * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until Person Directory "Delete Person Face" or "Delete Person" is called. + * + * Note that persistedFaceId is different from faceId generated by "Detect". + * + * > + * * + * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. + * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. + * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. + * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. + * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). + * * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. + * * This is a long running operation. Use Response Header "Operation-Location" to determine when the AddFace operation has successfully propagated for future requests to "Identify". For further information about Operation-Locations see "Get Face Operation Status". + */ + post( + options: AddPersonFaceParameters, + ): StreamableMethod; + /** + * To deal with an image containing multiple faces, input face can be specified as an image with a targetFace rectangle. It returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature(s) will be stored on server until Person Directory "Delete Person Face" or "Delete Person" is called. + * + * Note that persistedFaceId is different from faceId generated by "Detect". + * + * > + * * + * * Each person entry can hold up to 248 faces. + * * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, and face size is 200x200 pixels (100 pixels between eyes) or bigger. + * * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. + * * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the provided "targetFace" rectangle is not returned from "Detect", there's no guarantee to detect and add the face successfully. + * * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. + * * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. + * * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to [here](https://learn.microsoft.com/azure/ai-services/computer-vision/how-to/specify-detection-model). + * * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. + * * This is a long running operation. Use Response Header "Operation-Location" to determine when the AddFace operation has successfully propagated for future requests to "Identify". For further information about Operation-Locations see "Get Face Operation Status". + */ + post( + options: AddPersonFaceFromUrlParameters, + ): StreamableMethod< + AddPersonFaceFromUrl202Response | AddPersonFaceFromUrlDefaultResponse + >; + /** Retrieve a person's persistedFaceIds representing the registered person face feature(s). */ + get( + options?: GetPersonFacesParameters, + ): StreamableMethod< + GetPersonFaces200Response | GetPersonFacesDefaultResponse + >; +} + +export interface DeletePersonFace { + /** Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from different persons are processed in parallel. */ + delete( + options?: DeletePersonFaceParameters, + ): StreamableMethod< + DeletePersonFace202Response | DeletePersonFaceDefaultResponse + >; + /** Retrieve person face information. The persisted person face is specified by its personId. recognitionModel, and persistedFaceId. */ + get( + options?: GetPersonFaceParameters, + ): StreamableMethod; + /** Update a persisted face's userData field of a person. */ + patch( + options: UpdatePersonFaceParameters, + ): StreamableMethod< + UpdatePersonFace200Response | UpdatePersonFaceDefaultResponse + >; +} + +export interface CreateDynamicPersonGroupWithPerson { + /** + * A Dynamic Person Group is a container that references Person Directory "Create Person". After creation, use Person Directory "Update Dynamic Person Group" to add/remove persons to/from the Dynamic Person Group. + * + * Dynamic Person Group and user data will be stored on server until Person Directory "Delete Dynamic Person Group" is called. Use "Identify From Dynamic Person Group" with the dynamicPersonGroupId parameter to identify against persons. + * + * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until Person Directory "Delete Person" or "Delete Person Face" is called. + * + * 'recognitionModel' does not need to be specified with Dynamic Person Groups. Dynamic Person Groups are references to Person Directory "Create Person" and therefore work with most all 'recognitionModels'. The faceId's provided during "Identify" determine the 'recognitionModel' used. + */ + put( + options: CreateDynamicPersonGroupWithPersonParameters, + ): StreamableMethod< + | CreateDynamicPersonGroupWithPerson202Response + | CreateDynamicPersonGroupWithPersonDefaultResponse + >; + /** + * A Dynamic Person Group is a container that references Person Directory "Create Person". After creation, use Person Directory "Update Dynamic Person Group" to add/remove persons to/from the Dynamic Person Group. + * + * Dynamic Person Group and user data will be stored on server until Person Directory "Delete Dynamic Person Group" is called. Use "Identify From Dynamic Person Group" with the dynamicPersonGroupId parameter to identify against persons. + * + * No image will be stored. Only the person's extracted face feature(s) and userData will be stored on server until Person Directory "Delete Person" or "Delete Person Face" is called. + * + * 'recognitionModel' does not need to be specified with Dynamic Person Groups. Dynamic Person Groups are references to Person Directory "Create Person" and therefore work with most all 'recognitionModels'. The faceId's provided during "Identify" determine the 'recognitionModel' used. + */ + put( + options: CreateDynamicPersonGroupParameters, + ): StreamableMethod< + | CreateDynamicPersonGroup200Response + | CreateDynamicPersonGroupDefaultResponse + >; + /** Deleting this Dynamic Person Group only delete the references to persons data. To delete actual person see Person Directory "Delete Person". */ + delete( + options?: DeleteDynamicPersonGroupParameters, + ): StreamableMethod< + | DeleteDynamicPersonGroup202Response + | DeleteDynamicPersonGroupDefaultResponse + >; + /** This API returns Dynamic Person Group information only, use Person Directory "Get Dynamic Person Group Persons" instead to retrieve person information under the Dynamic Person Group. */ + get( + options?: GetDynamicPersonGroupParameters, + ): StreamableMethod< + GetDynamicPersonGroup200Response | GetDynamicPersonGroupDefaultResponse + >; + /** The properties keep unchanged if they are not in request body. */ + patch( + options: UpdateDynamicPersonGroupWithPersonChangesParameters, + ): StreamableMethod< + | UpdateDynamicPersonGroupWithPersonChanges202Response + | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse + >; + /** The properties keep unchanged if they are not in request body. */ + patch( + options: UpdateDynamicPersonGroupParameters, + ): StreamableMethod< + | UpdateDynamicPersonGroup200Response + | UpdateDynamicPersonGroupDefaultResponse + >; +} + +export interface GetDynamicPersonGroups { + /** + * Dynamic Person Groups are stored in alphabetical order of dynamicPersonGroupId. + * > + * * + * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. + * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. + * + * > [!TIP] + * > + * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". + * > * "start=&top=" will return all 5 items. + * > * "start=&top=2" will return "itemId1", "itemId2". + * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". + */ + get( + options?: GetDynamicPersonGroupsParameters, + ): StreamableMethod< + GetDynamicPersonGroups200Response | GetDynamicPersonGroupsDefaultResponse + >; +} + +export interface GetDynamicPersonGroupPersons { + /** + * Persons are stored in alphabetical order of personId created in Person Directory "Create Person". + * > + * * + * * "start" parameter (string, optional) specifies an ID value from which returned entries will have larger IDs based on string comparison. Setting "start" to an empty value indicates that entries should be returned starting from the first item. + * * "top" parameter (int, optional) determines the maximum number of entries to be returned, with a limit of up to 1000 entries per call. To retrieve additional entries beyond this limit, specify "start" with the personId of the last entry returned in the current call. + * + * > [!TIP] + * > + * > * For example, there are total 5 items with their IDs: "itemId1", ..., "itemId5". + * > * "start=&top=" will return all 5 items. + * > * "start=&top=2" will return "itemId1", "itemId2". + * > * "start=itemId2&top=3" will return "itemId3", "itemId4", "itemId5". + */ + get( + options?: GetDynamicPersonGroupPersonsParameters, + ): StreamableMethod< + | GetDynamicPersonGroupPersons200Response + | GetDynamicPersonGroupPersonsDefaultResponse + >; +} + +export interface Routes { + /** Resource for '/operations/\{operationId\}' has methods for the following verbs: get */ + (path: "/operations/{operationId}", operationId: string): GetOperationResult; + /** Resource for '/detect' has methods for the following verbs: post */ + (path: "/detect"): DetectFromUrl; + /** Resource for '/findsimilars' has methods for the following verbs: post */ + (path: "/findsimilars"): FindSimilar; + /** Resource for '/identify' has methods for the following verbs: post */ + (path: "/identify"): IdentifyFromPersonGroup; + /** Resource for '/verify' has methods for the following verbs: post */ + (path: "/verify"): VerifyFaceToFace; + /** Resource for '/group' has methods for the following verbs: post */ + (path: "/group"): Group; /** Resource for '/facelists/\{faceListId\}' has methods for the following verbs: put, delete, get, patch */ (path: "/facelists/{faceListId}", faceListId: string): CreateFaceList; /** Resource for '/facelists' has methods for the following verbs: get */ (path: "/facelists"): GetFaceLists; /** Resource for '/facelists/\{faceListId\}/persistedfaces' has methods for the following verbs: post */ - (path: "/facelists/{faceListId}/persistedfaces", faceListId: string): AddFaceListFaceFromUrl; + ( + path: "/facelists/{faceListId}/persistedfaces", + faceListId: string, + ): AddFaceListFaceFromUrl; /** Resource for '/facelists/\{faceListId\}/persistedfaces/\{persistedFaceId\}' has methods for the following verbs: delete */ ( path: "/facelists/{faceListId}/persistedfaces/{persistedFaceId}", @@ -1553,7 +1699,10 @@ export interface Routes { persistedFaceId: string, ): DeleteFaceListFace; /** Resource for '/largefacelists/\{largeFaceListId\}' has methods for the following verbs: put, delete, get, patch */ - (path: "/largefacelists/{largeFaceListId}", largeFaceListId: string): CreateLargeFaceList; + ( + path: "/largefacelists/{largeFaceListId}", + largeFaceListId: string, + ): CreateLargeFaceList; /** Resource for '/largefacelists' has methods for the following verbs: get */ (path: "/largefacelists"): GetLargeFaceLists; /** Resource for '/largefacelists/\{largeFaceListId\}/training' has methods for the following verbs: get */ @@ -1562,7 +1711,10 @@ export interface Routes { largeFaceListId: string, ): GetLargeFaceListTrainingStatus; /** Resource for '/largefacelists/\{largeFaceListId\}/train' has methods for the following verbs: post */ - (path: "/largefacelists/{largeFaceListId}/train", largeFaceListId: string): TrainLargeFaceList; + ( + path: "/largefacelists/{largeFaceListId}/train", + largeFaceListId: string, + ): TrainLargeFaceList; /** Resource for '/largefacelists/\{largeFaceListId\}/persistedfaces' has methods for the following verbs: post, get */ ( path: "/largefacelists/{largeFaceListId}/persistedfaces", @@ -1574,42 +1726,11 @@ export interface Routes { largeFaceListId: string, persistedFaceId: string, ): DeleteLargeFaceListFace; - /** Resource for '/persons' has methods for the following verbs: post, get */ - (path: "/persons"): CreatePerson; - /** Resource for '/persons/\{personId\}' has methods for the following verbs: delete, get, patch */ - (path: "/persons/{personId}", personId: string): DeletePerson; - /** Resource for '/persons/\{personId\}/dynamicPersonGroupReferences' has methods for the following verbs: get */ - ( - path: "/persons/{personId}/dynamicPersonGroupReferences", - personId: string, - ): GetDynamicPersonGroupReferences; - /** Resource for '/persons/\{personId\}/recognitionModels/\{recognitionModel\}/persistedfaces' has methods for the following verbs: post, get */ - ( - path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces", - personId: string, - recognitionModel: RecognitionModel, - ): AddPersonFace; - /** Resource for '/persons/\{personId\}/recognitionModels/\{recognitionModel\}/persistedfaces/\{persistedFaceId\}' has methods for the following verbs: delete, get, patch */ - ( - path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}", - personId: string, - recognitionModel: RecognitionModel, - persistedFaceId: string, - ): DeletePersonFace; - /** Resource for '/dynamicpersongroups/\{dynamicPersonGroupId\}' has methods for the following verbs: put, delete, get, patch */ - ( - path: "/dynamicpersongroups/{dynamicPersonGroupId}", - dynamicPersonGroupId: string, - ): CreateDynamicPersonGroupWithPerson; - /** Resource for '/dynamicpersongroups' has methods for the following verbs: get */ - (path: "/dynamicpersongroups"): GetDynamicPersonGroups; - /** Resource for '/dynamicpersongroups/\{dynamicPersonGroupId\}/persons' has methods for the following verbs: get */ - ( - path: "/dynamicpersongroups/{dynamicPersonGroupId}/persons", - dynamicPersonGroupId: string, - ): GetDynamicPersonGroupPersons; /** Resource for '/persongroups/\{personGroupId\}' has methods for the following verbs: put, delete, get, patch */ - (path: "/persongroups/{personGroupId}", personGroupId: string): CreatePersonGroup; + ( + path: "/persongroups/{personGroupId}", + personGroupId: string, + ): CreatePersonGroup; /** Resource for '/persongroups' has methods for the following verbs: get */ (path: "/persongroups"): GetPersonGroups; /** Resource for '/persongroups/\{personGroupId\}/training' has methods for the following verbs: get */ @@ -1618,9 +1739,15 @@ export interface Routes { personGroupId: string, ): GetPersonGroupTrainingStatus; /** Resource for '/persongroups/\{personGroupId\}/train' has methods for the following verbs: post */ - (path: "/persongroups/{personGroupId}/train", personGroupId: string): TrainPersonGroup; + ( + path: "/persongroups/{personGroupId}/train", + personGroupId: string, + ): TrainPersonGroup; /** Resource for '/persongroups/\{personGroupId\}/persons' has methods for the following verbs: post, get */ - (path: "/persongroups/{personGroupId}/persons", personGroupId: string): CreatePersonGroupPerson; + ( + path: "/persongroups/{personGroupId}/persons", + personGroupId: string, + ): CreatePersonGroupPerson; /** Resource for '/persongroups/\{personGroupId\}/persons/\{personId\}' has methods for the following verbs: delete, get, patch */ ( path: "/persongroups/{personGroupId}/persons/{personId}", @@ -1681,6 +1808,71 @@ export interface Routes { personId: string, persistedFaceId: string, ): DeleteLargePersonGroupPersonFace; + /** Resource for '/detectLiveness/singleModal/sessions' has methods for the following verbs: post, get */ + (path: "/detectLiveness/singleModal/sessions"): CreateLivenessSession; + /** Resource for '/detectLiveness/singleModal/sessions/\{sessionId\}' has methods for the following verbs: delete, get */ + ( + path: "/detectLiveness/singleModal/sessions/{sessionId}", + sessionId: string, + ): DeleteLivenessSession; + /** Resource for '/detectLiveness/singleModal/sessions/\{sessionId\}/audit' has methods for the following verbs: get */ + ( + path: "/detectLiveness/singleModal/sessions/{sessionId}/audit", + sessionId: string, + ): GetLivenessSessionAuditEntries; + /** Resource for '/detectLivenessWithVerify/singleModal/sessions' has methods for the following verbs: post, get */ + ( + path: "/detectLivenessWithVerify/singleModal/sessions", + ): CreateLivenessWithVerifySessionWithVerifyImage; + /** Resource for '/detectLivenessWithVerify/singleModal/sessions/\{sessionId\}' has methods for the following verbs: delete, get */ + ( + path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}", + sessionId: string, + ): DeleteLivenessWithVerifySession; + /** Resource for '/detectLivenessWithVerify/singleModal/sessions/\{sessionId\}/audit' has methods for the following verbs: get */ + ( + path: "/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", + sessionId: string, + ): GetLivenessWithVerifySessionAuditEntries; + /** Resource for '/session/sessionImages/\{sessionImageId\}' has methods for the following verbs: get */ + ( + path: "/session/sessionImages/{sessionImageId}", + sessionImageId: string, + ): GetSessionImage; + /** Resource for '/persons' has methods for the following verbs: post, get */ + (path: "/persons"): CreatePerson; + /** Resource for '/persons/\{personId\}' has methods for the following verbs: delete, get, patch */ + (path: "/persons/{personId}", personId: string): DeletePerson; + /** Resource for '/persons/\{personId\}/dynamicPersonGroupReferences' has methods for the following verbs: get */ + ( + path: "/persons/{personId}/dynamicPersonGroupReferences", + personId: string, + ): GetDynamicPersonGroupReferences; + /** Resource for '/persons/\{personId\}/recognitionModels/\{recognitionModel\}/persistedfaces' has methods for the following verbs: post, get */ + ( + path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces", + personId: string, + recognitionModel: RecognitionModel, + ): AddPersonFace; + /** Resource for '/persons/\{personId\}/recognitionModels/\{recognitionModel\}/persistedfaces/\{persistedFaceId\}' has methods for the following verbs: delete, get, patch */ + ( + path: "/persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}", + personId: string, + recognitionModel: RecognitionModel, + persistedFaceId: string, + ): DeletePersonFace; + /** Resource for '/dynamicpersongroups/\{dynamicPersonGroupId\}' has methods for the following verbs: put, delete, get, patch */ + ( + path: "/dynamicpersongroups/{dynamicPersonGroupId}", + dynamicPersonGroupId: string, + ): CreateDynamicPersonGroupWithPerson; + /** Resource for '/dynamicpersongroups' has methods for the following verbs: get */ + (path: "/dynamicpersongroups"): GetDynamicPersonGroups; + /** Resource for '/dynamicpersongroups/\{dynamicPersonGroupId\}/persons' has methods for the following verbs: get */ + ( + path: "/dynamicpersongroups/{dynamicPersonGroupId}/persons", + dynamicPersonGroupId: string, + ): GetDynamicPersonGroupPersons; } export type FaceClient = Client & { diff --git a/sdk/face/ai-vision-face-rest/src/faceClient.ts b/sdk/face/ai-vision-face-rest/src/faceClient.ts index b738c5fe7805..d14f85275406 100644 --- a/sdk/face/ai-vision-face-rest/src/faceClient.ts +++ b/sdk/face/ai-vision-face-rest/src/faceClient.ts @@ -7,7 +7,9 @@ import { TokenCredential, KeyCredential } from "@azure/core-auth"; import { FaceClient } from "./clientDefinitions.js"; import { Versions } from "./models.js"; +/** The optional parameters for the client */ export interface FaceClientOptions extends ClientOptions { + /** API Version */ apiVersion?: Versions; } @@ -21,11 +23,12 @@ export interface FaceClientOptions extends ClientOptions { export default function createClient( endpointParam: string, credentials: TokenCredential | KeyCredential, - options: FaceClientOptions = {}, + { apiVersion = "v1.2-preview.1", ...options }: FaceClientOptions = {}, ): FaceClient { - const apiVersion = options.apiVersion ?? "v1.1-preview.1"; - const endpointUrl = options.endpoint ?? options.baseUrl ?? `${endpointParam}/face/${apiVersion}`; - + const endpointUrl = + options.endpoint ?? + options.baseUrl ?? + `${endpointParam}/face/${apiVersion}`; const userAgentInfo = `azsdk-js-ai-vision-face-rest/1.0.0-beta.1`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix @@ -40,31 +43,16 @@ export default function createClient( logger: options.loggingOptions?.logger ?? logger.info, }, credentials: { - scopes: options.credentials?.scopes ?? ["https://cognitiveservices.azure.com/.default"], - apiKeyHeaderName: options.credentials?.apiKeyHeaderName ?? "Ocp-Apim-Subscription-Key", + scopes: options.credentials?.scopes ?? [ + "https://cognitiveservices.azure.com/.default", + ], + apiKeyHeaderName: + options.credentials?.apiKeyHeaderName ?? "Ocp-Apim-Subscription-Key", }, }; - const client = getClient(endpointUrl, credentials, options) as FaceClient; client.pipeline.removePolicy({ name: "ApiVersionPolicy" }); - client.pipeline.addPolicy({ - name: "VerifyImageFilenamePolicy", - sendRequest: (request, next) => { - for (const part of request.multipartBody?.parts ?? []) { - const contentDisposition = part.headers.get("content-disposition"); - if ( - contentDisposition && - contentDisposition.includes(`name="VerifyImage"`) && - !contentDisposition.includes("filename=") - ) { - part.headers.set("content-disposition", `form-data; name="VerifyImage"; filename="blob"`); - } - } - return next(request); - }, - }); - return client; } diff --git a/sdk/face/ai-vision-face-rest/src/isUnexpected.ts b/sdk/face/ai-vision-face-rest/src/isUnexpected.ts index 9f84a27d6f0c..676bd3ecdeaf 100644 --- a/sdk/face/ai-vision-face-rest/src/isUnexpected.ts +++ b/sdk/face/ai-vision-face-rest/src/isUnexpected.ts @@ -8,6 +8,8 @@ import { DetectFromUrlDefaultResponse, Detect200Response, DetectDefaultResponse, + DetectFromSessionImageId200Response, + DetectFromSessionImageIdDefaultResponse, FindSimilar200Response, FindSimilarDefaultResponse, FindSimilarFromFaceList200Response, @@ -32,28 +34,6 @@ import { VerifyFromPersonDirectoryDefaultResponse, Group200Response, GroupDefaultResponse, - CreateLivenessSession200Response, - CreateLivenessSessionDefaultResponse, - GetLivenessSessions200Response, - GetLivenessSessionsDefaultResponse, - DeleteLivenessSession200Response, - DeleteLivenessSessionDefaultResponse, - GetLivenessSessionResult200Response, - GetLivenessSessionResultDefaultResponse, - GetLivenessSessionAuditEntries200Response, - GetLivenessSessionAuditEntriesDefaultResponse, - CreateLivenessWithVerifySessionWithVerifyImage200Response, - CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, - CreateLivenessWithVerifySession200Response, - CreateLivenessWithVerifySessionDefaultResponse, - GetLivenessWithVerifySessions200Response, - GetLivenessWithVerifySessionsDefaultResponse, - DeleteLivenessWithVerifySession200Response, - DeleteLivenessWithVerifySessionDefaultResponse, - GetLivenessWithVerifySessionResult200Response, - GetLivenessWithVerifySessionResultDefaultResponse, - GetLivenessWithVerifySessionAuditEntries200Response, - GetLivenessWithVerifySessionAuditEntriesDefaultResponse, CreateFaceList200Response, CreateFaceListDefaultResponse, DeleteFaceList200Response, @@ -97,54 +77,6 @@ import { GetLargeFaceListFaceDefaultResponse, UpdateLargeFaceListFace200Response, UpdateLargeFaceListFaceDefaultResponse, - CreatePerson202Response, - CreatePersonLogicalResponse, - CreatePersonDefaultResponse, - GetPersons200Response, - GetPersonsDefaultResponse, - DeletePerson202Response, - DeletePersonLogicalResponse, - DeletePersonDefaultResponse, - GetPerson200Response, - GetPersonDefaultResponse, - UpdatePerson200Response, - UpdatePersonDefaultResponse, - GetDynamicPersonGroupReferences200Response, - GetDynamicPersonGroupReferencesDefaultResponse, - AddPersonFace202Response, - AddPersonFaceLogicalResponse, - AddPersonFaceDefaultResponse, - AddPersonFaceFromUrl202Response, - AddPersonFaceFromUrlLogicalResponse, - AddPersonFaceFromUrlDefaultResponse, - GetPersonFaces200Response, - GetPersonFacesDefaultResponse, - DeletePersonFace202Response, - DeletePersonFaceLogicalResponse, - DeletePersonFaceDefaultResponse, - GetPersonFace200Response, - GetPersonFaceDefaultResponse, - UpdatePersonFace200Response, - UpdatePersonFaceDefaultResponse, - CreateDynamicPersonGroupWithPerson202Response, - CreateDynamicPersonGroupWithPersonLogicalResponse, - CreateDynamicPersonGroupWithPersonDefaultResponse, - CreateDynamicPersonGroup200Response, - CreateDynamicPersonGroupDefaultResponse, - DeleteDynamicPersonGroup202Response, - DeleteDynamicPersonGroupLogicalResponse, - DeleteDynamicPersonGroupDefaultResponse, - GetDynamicPersonGroup200Response, - GetDynamicPersonGroupDefaultResponse, - UpdateDynamicPersonGroupWithPersonChanges202Response, - UpdateDynamicPersonGroupWithPersonChangesLogicalResponse, - UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, - UpdateDynamicPersonGroup200Response, - UpdateDynamicPersonGroupDefaultResponse, - GetDynamicPersonGroups200Response, - GetDynamicPersonGroupsDefaultResponse, - GetDynamicPersonGroupPersons200Response, - GetDynamicPersonGroupPersonsDefaultResponse, CreatePersonGroup200Response, CreatePersonGroupDefaultResponse, DeletePersonGroup200Response, @@ -215,6 +147,78 @@ import { GetLargePersonGroupPersonFaceDefaultResponse, UpdateLargePersonGroupPersonFace200Response, UpdateLargePersonGroupPersonFaceDefaultResponse, + CreateLivenessSession200Response, + CreateLivenessSessionDefaultResponse, + GetLivenessSessions200Response, + GetLivenessSessionsDefaultResponse, + DeleteLivenessSession200Response, + DeleteLivenessSessionDefaultResponse, + GetLivenessSessionResult200Response, + GetLivenessSessionResultDefaultResponse, + GetLivenessSessionAuditEntries200Response, + GetLivenessSessionAuditEntriesDefaultResponse, + CreateLivenessWithVerifySessionWithVerifyImage200Response, + CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, + CreateLivenessWithVerifySession200Response, + CreateLivenessWithVerifySessionDefaultResponse, + GetLivenessWithVerifySessions200Response, + GetLivenessWithVerifySessionsDefaultResponse, + DeleteLivenessWithVerifySession200Response, + DeleteLivenessWithVerifySessionDefaultResponse, + GetLivenessWithVerifySessionResult200Response, + GetLivenessWithVerifySessionResultDefaultResponse, + GetLivenessWithVerifySessionAuditEntries200Response, + GetLivenessWithVerifySessionAuditEntriesDefaultResponse, + GetSessionImage200Response, + GetSessionImageDefaultResponse, + CreatePerson202Response, + CreatePersonLogicalResponse, + CreatePersonDefaultResponse, + GetPersons200Response, + GetPersonsDefaultResponse, + DeletePerson202Response, + DeletePersonLogicalResponse, + DeletePersonDefaultResponse, + GetPerson200Response, + GetPersonDefaultResponse, + UpdatePerson200Response, + UpdatePersonDefaultResponse, + GetDynamicPersonGroupReferences200Response, + GetDynamicPersonGroupReferencesDefaultResponse, + AddPersonFace202Response, + AddPersonFaceLogicalResponse, + AddPersonFaceDefaultResponse, + AddPersonFaceFromUrl202Response, + AddPersonFaceFromUrlLogicalResponse, + AddPersonFaceFromUrlDefaultResponse, + GetPersonFaces200Response, + GetPersonFacesDefaultResponse, + DeletePersonFace202Response, + DeletePersonFaceLogicalResponse, + DeletePersonFaceDefaultResponse, + GetPersonFace200Response, + GetPersonFaceDefaultResponse, + UpdatePersonFace200Response, + UpdatePersonFaceDefaultResponse, + CreateDynamicPersonGroupWithPerson202Response, + CreateDynamicPersonGroupWithPersonLogicalResponse, + CreateDynamicPersonGroupWithPersonDefaultResponse, + CreateDynamicPersonGroup200Response, + CreateDynamicPersonGroupDefaultResponse, + DeleteDynamicPersonGroup202Response, + DeleteDynamicPersonGroupLogicalResponse, + DeleteDynamicPersonGroupDefaultResponse, + GetDynamicPersonGroup200Response, + GetDynamicPersonGroupDefaultResponse, + UpdateDynamicPersonGroupWithPersonChanges202Response, + UpdateDynamicPersonGroupWithPersonChangesLogicalResponse, + UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, + UpdateDynamicPersonGroup200Response, + UpdateDynamicPersonGroupDefaultResponse, + GetDynamicPersonGroups200Response, + GetDynamicPersonGroupsDefaultResponse, + GetDynamicPersonGroupPersons200Response, + GetDynamicPersonGroupPersonsDefaultResponse, } from "./responses.js"; const responseMap: Record = { @@ -224,16 +228,6 @@ const responseMap: Record = { "POST /identify": ["200"], "POST /verify": ["200"], "POST /group": ["200"], - "POST /detectLiveness/singleModal/sessions": ["200"], - "GET /detectLiveness/singleModal/sessions": ["200"], - "DELETE /detectLiveness/singleModal/sessions/{sessionId}": ["200"], - "GET /detectLiveness/singleModal/sessions/{sessionId}": ["200"], - "GET /detectLiveness/singleModal/sessions/{sessionId}/audit": ["200"], - "POST /detectLivenessWithVerify/singleModal/sessions": ["200"], - "GET /detectLivenessWithVerify/singleModal/sessions": ["200"], - "DELETE /detectLivenessWithVerify/singleModal/sessions/{sessionId}": ["200"], - "GET /detectLivenessWithVerify/singleModal/sessions/{sessionId}": ["200"], - "GET /detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit": ["200"], "PUT /facelists/{faceListId}": ["200"], "DELETE /facelists/{faceListId}": ["200"], "GET /facelists/{faceListId}": ["200"], @@ -251,30 +245,15 @@ const responseMap: Record = { "POST /largefacelists/{largeFaceListId}/train": ["202"], "POST /largefacelists/{largeFaceListId}/persistedfaces": ["200"], "GET /largefacelists/{largeFaceListId}/persistedfaces": ["200"], - "DELETE /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": ["200"], - "GET /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": ["200"], - "PATCH /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": ["200"], - "GET /persons": ["200"], - "POST /persons": ["202"], - "GET /persons/{personId}": ["200"], - "DELETE /persons/{personId}": ["202"], - "PATCH /persons/{personId}": ["200"], - "GET /persons/{personId}/dynamicPersonGroupReferences": ["200"], - "GET /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces": ["200"], - "POST /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces": ["202"], - "GET /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": [ + "DELETE /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": [ + "200", + ], + "GET /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": [ + "200", + ], + "PATCH /largefacelists/{largeFaceListId}/persistedfaces/{persistedFaceId}": [ "200", ], - "DELETE /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": - ["202"], - "PATCH /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": - ["200"], - "GET /dynamicpersongroups/{dynamicPersonGroupId}": ["200"], - "PUT /dynamicpersongroups/{dynamicPersonGroupId}": ["202", "200"], - "DELETE /dynamicpersongroups/{dynamicPersonGroupId}": ["202"], - "PATCH /dynamicpersongroups/{dynamicPersonGroupId}": ["202", "200"], - "GET /dynamicpersongroups": ["200"], - "GET /dynamicpersongroups/{dynamicPersonGroupId}/persons": ["200"], "PUT /persongroups/{personGroupId}": ["200"], "DELETE /persongroups/{personGroupId}": ["200"], "GET /persongroups/{personGroupId}": ["200"], @@ -288,14 +267,15 @@ const responseMap: Record = { "DELETE /persongroups/{personGroupId}/persons/{personId}": ["200"], "GET /persongroups/{personGroupId}/persons/{personId}": ["200"], "PATCH /persongroups/{personGroupId}/persons/{personId}": ["200"], - "POST /persongroups/{personGroupId}/persons/{personId}/persistedfaces": ["200"], - "DELETE /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": [ - "200", - ], - "GET /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": ["200"], - "PATCH /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": [ + "POST /persongroups/{personGroupId}/persons/{personId}/persistedfaces": [ "200", ], + "DELETE /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": + ["200"], + "GET /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": + ["200"], + "PATCH /persongroups/{personGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": + ["200"], "PUT /largepersongroups/{largePersonGroupId}": ["200"], "DELETE /largepersongroups/{largePersonGroupId}": ["200"], "GET /largepersongroups/{largePersonGroupId}": ["200"], @@ -309,13 +289,49 @@ const responseMap: Record = { "DELETE /largepersongroups/{largePersonGroupId}/persons/{personId}": ["200"], "GET /largepersongroups/{largePersonGroupId}/persons/{personId}": ["200"], "PATCH /largepersongroups/{largePersonGroupId}/persons/{personId}": ["200"], - "POST /largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces": ["200"], + "POST /largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces": + ["200"], "DELETE /largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": ["200"], "GET /largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": ["200"], "PATCH /largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}": ["200"], + "POST /detectLiveness/singleModal/sessions": ["200"], + "GET /detectLiveness/singleModal/sessions": ["200"], + "DELETE /detectLiveness/singleModal/sessions/{sessionId}": ["200"], + "GET /detectLiveness/singleModal/sessions/{sessionId}": ["200"], + "GET /detectLiveness/singleModal/sessions/{sessionId}/audit": ["200"], + "POST /detectLivenessWithVerify/singleModal/sessions": ["200"], + "GET /detectLivenessWithVerify/singleModal/sessions": ["200"], + "DELETE /detectLivenessWithVerify/singleModal/sessions/{sessionId}": ["200"], + "GET /detectLivenessWithVerify/singleModal/sessions/{sessionId}": ["200"], + "GET /detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit": [ + "200", + ], + "GET /session/sessionImages/{sessionImageId}": ["200"], + "GET /persons": ["200"], + "POST /persons": ["202"], + "GET /persons/{personId}": ["200"], + "DELETE /persons/{personId}": ["202"], + "PATCH /persons/{personId}": ["200"], + "GET /persons/{personId}/dynamicPersonGroupReferences": ["200"], + "GET /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces": + ["200"], + "POST /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces": + ["202"], + "GET /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": + ["200"], + "DELETE /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": + ["202"], + "PATCH /persons/{personId}/recognitionModels/{recognitionModel}/persistedfaces/{persistedFaceId}": + ["200"], + "GET /dynamicpersongroups/{dynamicPersonGroupId}": ["200"], + "PUT /dynamicpersongroups/{dynamicPersonGroupId}": ["202", "200"], + "DELETE /dynamicpersongroups/{dynamicPersonGroupId}": ["202"], + "PATCH /dynamicpersongroups/{dynamicPersonGroupId}": ["202", "200"], + "GET /dynamicpersongroups": ["200"], + "GET /dynamicpersongroups/{dynamicPersonGroupId}/persons": ["200"], }; export function isUnexpected( @@ -327,23 +343,38 @@ export function isUnexpected( export function isUnexpected( response: Detect200Response | DetectDefaultResponse, ): response is DetectDefaultResponse; +export function isUnexpected( + response: + | DetectFromSessionImageId200Response + | DetectFromSessionImageIdDefaultResponse, +): response is DetectFromSessionImageIdDefaultResponse; export function isUnexpected( response: FindSimilar200Response | FindSimilarDefaultResponse, ): response is FindSimilarDefaultResponse; export function isUnexpected( - response: FindSimilarFromFaceList200Response | FindSimilarFromFaceListDefaultResponse, + response: + | FindSimilarFromFaceList200Response + | FindSimilarFromFaceListDefaultResponse, ): response is FindSimilarFromFaceListDefaultResponse; export function isUnexpected( - response: FindSimilarFromLargeFaceList200Response | FindSimilarFromLargeFaceListDefaultResponse, + response: + | FindSimilarFromLargeFaceList200Response + | FindSimilarFromLargeFaceListDefaultResponse, ): response is FindSimilarFromLargeFaceListDefaultResponse; export function isUnexpected( - response: IdentifyFromPersonGroup200Response | IdentifyFromPersonGroupDefaultResponse, + response: + | IdentifyFromPersonGroup200Response + | IdentifyFromPersonGroupDefaultResponse, ): response is IdentifyFromPersonGroupDefaultResponse; export function isUnexpected( - response: IdentifyFromLargePersonGroup200Response | IdentifyFromLargePersonGroupDefaultResponse, + response: + | IdentifyFromLargePersonGroup200Response + | IdentifyFromLargePersonGroupDefaultResponse, ): response is IdentifyFromLargePersonGroupDefaultResponse; export function isUnexpected( - response: IdentifyFromPersonDirectory200Response | IdentifyFromPersonDirectoryDefaultResponse, + response: + | IdentifyFromPersonDirectory200Response + | IdentifyFromPersonDirectoryDefaultResponse, ): response is IdentifyFromPersonDirectoryDefaultResponse; export function isUnexpected( response: @@ -354,62 +385,23 @@ export function isUnexpected( response: VerifyFaceToFace200Response | VerifyFaceToFaceDefaultResponse, ): response is VerifyFaceToFaceDefaultResponse; export function isUnexpected( - response: VerifyFromPersonGroup200Response | VerifyFromPersonGroupDefaultResponse, + response: + | VerifyFromPersonGroup200Response + | VerifyFromPersonGroupDefaultResponse, ): response is VerifyFromPersonGroupDefaultResponse; export function isUnexpected( - response: VerifyFromLargePersonGroup200Response | VerifyFromLargePersonGroupDefaultResponse, + response: + | VerifyFromLargePersonGroup200Response + | VerifyFromLargePersonGroupDefaultResponse, ): response is VerifyFromLargePersonGroupDefaultResponse; export function isUnexpected( - response: VerifyFromPersonDirectory200Response | VerifyFromPersonDirectoryDefaultResponse, + response: + | VerifyFromPersonDirectory200Response + | VerifyFromPersonDirectoryDefaultResponse, ): response is VerifyFromPersonDirectoryDefaultResponse; export function isUnexpected( response: Group200Response | GroupDefaultResponse, ): response is GroupDefaultResponse; -export function isUnexpected( - response: CreateLivenessSession200Response | CreateLivenessSessionDefaultResponse, -): response is CreateLivenessSessionDefaultResponse; -export function isUnexpected( - response: GetLivenessSessions200Response | GetLivenessSessionsDefaultResponse, -): response is GetLivenessSessionsDefaultResponse; -export function isUnexpected( - response: DeleteLivenessSession200Response | DeleteLivenessSessionDefaultResponse, -): response is DeleteLivenessSessionDefaultResponse; -export function isUnexpected( - response: GetLivenessSessionResult200Response | GetLivenessSessionResultDefaultResponse, -): response is GetLivenessSessionResultDefaultResponse; -export function isUnexpected( - response: - | GetLivenessSessionAuditEntries200Response - | GetLivenessSessionAuditEntriesDefaultResponse, -): response is GetLivenessSessionAuditEntriesDefaultResponse; -export function isUnexpected( - response: - | CreateLivenessWithVerifySessionWithVerifyImage200Response - | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, -): response is CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse; -export function isUnexpected( - response: - | CreateLivenessWithVerifySession200Response - | CreateLivenessWithVerifySessionDefaultResponse, -): response is CreateLivenessWithVerifySessionDefaultResponse; -export function isUnexpected( - response: GetLivenessWithVerifySessions200Response | GetLivenessWithVerifySessionsDefaultResponse, -): response is GetLivenessWithVerifySessionsDefaultResponse; -export function isUnexpected( - response: - | DeleteLivenessWithVerifySession200Response - | DeleteLivenessWithVerifySessionDefaultResponse, -): response is DeleteLivenessWithVerifySessionDefaultResponse; -export function isUnexpected( - response: - | GetLivenessWithVerifySessionResult200Response - | GetLivenessWithVerifySessionResultDefaultResponse, -): response is GetLivenessWithVerifySessionResultDefaultResponse; -export function isUnexpected( - response: - | GetLivenessWithVerifySessionAuditEntries200Response - | GetLivenessWithVerifySessionAuditEntriesDefaultResponse, -): response is GetLivenessWithVerifySessionAuditEntriesDefaultResponse; export function isUnexpected( response: CreateFaceList200Response | CreateFaceListDefaultResponse, ): response is CreateFaceListDefaultResponse; @@ -426,7 +418,9 @@ export function isUnexpected( response: GetFaceLists200Response | GetFaceListsDefaultResponse, ): response is GetFaceListsDefaultResponse; export function isUnexpected( - response: AddFaceListFaceFromUrl200Response | AddFaceListFaceFromUrlDefaultResponse, + response: + | AddFaceListFaceFromUrl200Response + | AddFaceListFaceFromUrlDefaultResponse, ): response is AddFaceListFaceFromUrlDefaultResponse; export function isUnexpected( response: AddFaceListFace200Response | AddFaceListFaceDefaultResponse, @@ -460,101 +454,36 @@ export function isUnexpected( | TrainLargeFaceListLogicalResponse | TrainLargeFaceListDefaultResponse, ): response is TrainLargeFaceListDefaultResponse; -export function isUnexpected( - response: AddLargeFaceListFaceFromUrl200Response | AddLargeFaceListFaceFromUrlDefaultResponse, -): response is AddLargeFaceListFaceFromUrlDefaultResponse; -export function isUnexpected( - response: AddLargeFaceListFace200Response | AddLargeFaceListFaceDefaultResponse, -): response is AddLargeFaceListFaceDefaultResponse; -export function isUnexpected( - response: GetLargeFaceListFaces200Response | GetLargeFaceListFacesDefaultResponse, -): response is GetLargeFaceListFacesDefaultResponse; -export function isUnexpected( - response: DeleteLargeFaceListFace200Response | DeleteLargeFaceListFaceDefaultResponse, -): response is DeleteLargeFaceListFaceDefaultResponse; -export function isUnexpected( - response: GetLargeFaceListFace200Response | GetLargeFaceListFaceDefaultResponse, -): response is GetLargeFaceListFaceDefaultResponse; -export function isUnexpected( - response: UpdateLargeFaceListFace200Response | UpdateLargeFaceListFaceDefaultResponse, -): response is UpdateLargeFaceListFaceDefaultResponse; -export function isUnexpected( - response: CreatePerson202Response | CreatePersonLogicalResponse | CreatePersonDefaultResponse, -): response is CreatePersonDefaultResponse; -export function isUnexpected( - response: GetPersons200Response | GetPersonsDefaultResponse, -): response is GetPersonsDefaultResponse; -export function isUnexpected( - response: DeletePerson202Response | DeletePersonLogicalResponse | DeletePersonDefaultResponse, -): response is DeletePersonDefaultResponse; -export function isUnexpected( - response: GetPerson200Response | GetPersonDefaultResponse, -): response is GetPersonDefaultResponse; -export function isUnexpected( - response: UpdatePerson200Response | UpdatePersonDefaultResponse, -): response is UpdatePersonDefaultResponse; export function isUnexpected( response: - | GetDynamicPersonGroupReferences200Response - | GetDynamicPersonGroupReferencesDefaultResponse, -): response is GetDynamicPersonGroupReferencesDefaultResponse; -export function isUnexpected( - response: AddPersonFace202Response | AddPersonFaceLogicalResponse | AddPersonFaceDefaultResponse, -): response is AddPersonFaceDefaultResponse; + | AddLargeFaceListFaceFromUrl200Response + | AddLargeFaceListFaceFromUrlDefaultResponse, +): response is AddLargeFaceListFaceFromUrlDefaultResponse; export function isUnexpected( response: - | AddPersonFaceFromUrl202Response - | AddPersonFaceFromUrlLogicalResponse - | AddPersonFaceFromUrlDefaultResponse, -): response is AddPersonFaceFromUrlDefaultResponse; -export function isUnexpected( - response: GetPersonFaces200Response | GetPersonFacesDefaultResponse, -): response is GetPersonFacesDefaultResponse; + | AddLargeFaceListFace200Response + | AddLargeFaceListFaceDefaultResponse, +): response is AddLargeFaceListFaceDefaultResponse; export function isUnexpected( response: - | DeletePersonFace202Response - | DeletePersonFaceLogicalResponse - | DeletePersonFaceDefaultResponse, -): response is DeletePersonFaceDefaultResponse; -export function isUnexpected( - response: GetPersonFace200Response | GetPersonFaceDefaultResponse, -): response is GetPersonFaceDefaultResponse; -export function isUnexpected( - response: UpdatePersonFace200Response | UpdatePersonFaceDefaultResponse, -): response is UpdatePersonFaceDefaultResponse; + | GetLargeFaceListFaces200Response + | GetLargeFaceListFacesDefaultResponse, +): response is GetLargeFaceListFacesDefaultResponse; export function isUnexpected( response: - | CreateDynamicPersonGroupWithPerson202Response - | CreateDynamicPersonGroupWithPersonLogicalResponse - | CreateDynamicPersonGroupWithPersonDefaultResponse, -): response is CreateDynamicPersonGroupWithPersonDefaultResponse; -export function isUnexpected( - response: CreateDynamicPersonGroup200Response | CreateDynamicPersonGroupDefaultResponse, -): response is CreateDynamicPersonGroupDefaultResponse; + | DeleteLargeFaceListFace200Response + | DeleteLargeFaceListFaceDefaultResponse, +): response is DeleteLargeFaceListFaceDefaultResponse; export function isUnexpected( response: - | DeleteDynamicPersonGroup202Response - | DeleteDynamicPersonGroupLogicalResponse - | DeleteDynamicPersonGroupDefaultResponse, -): response is DeleteDynamicPersonGroupDefaultResponse; -export function isUnexpected( - response: GetDynamicPersonGroup200Response | GetDynamicPersonGroupDefaultResponse, -): response is GetDynamicPersonGroupDefaultResponse; + | GetLargeFaceListFace200Response + | GetLargeFaceListFaceDefaultResponse, +): response is GetLargeFaceListFaceDefaultResponse; export function isUnexpected( response: - | UpdateDynamicPersonGroupWithPersonChanges202Response - | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse - | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, -): response is UpdateDynamicPersonGroupWithPersonChangesDefaultResponse; -export function isUnexpected( - response: UpdateDynamicPersonGroup200Response | UpdateDynamicPersonGroupDefaultResponse, -): response is UpdateDynamicPersonGroupDefaultResponse; -export function isUnexpected( - response: GetDynamicPersonGroups200Response | GetDynamicPersonGroupsDefaultResponse, -): response is GetDynamicPersonGroupsDefaultResponse; -export function isUnexpected( - response: GetDynamicPersonGroupPersons200Response | GetDynamicPersonGroupPersonsDefaultResponse, -): response is GetDynamicPersonGroupPersonsDefaultResponse; + | UpdateLargeFaceListFace200Response + | UpdateLargeFaceListFaceDefaultResponse, +): response is UpdateLargeFaceListFaceDefaultResponse; export function isUnexpected( response: CreatePersonGroup200Response | CreatePersonGroupDefaultResponse, ): response is CreatePersonGroupDefaultResponse; @@ -571,7 +500,9 @@ export function isUnexpected( response: GetPersonGroups200Response | GetPersonGroupsDefaultResponse, ): response is GetPersonGroupsDefaultResponse; export function isUnexpected( - response: GetPersonGroupTrainingStatus200Response | GetPersonGroupTrainingStatusDefaultResponse, + response: + | GetPersonGroupTrainingStatus200Response + | GetPersonGroupTrainingStatusDefaultResponse, ): response is GetPersonGroupTrainingStatusDefaultResponse; export function isUnexpected( response: @@ -580,19 +511,29 @@ export function isUnexpected( | TrainPersonGroupDefaultResponse, ): response is TrainPersonGroupDefaultResponse; export function isUnexpected( - response: CreatePersonGroupPerson200Response | CreatePersonGroupPersonDefaultResponse, + response: + | CreatePersonGroupPerson200Response + | CreatePersonGroupPersonDefaultResponse, ): response is CreatePersonGroupPersonDefaultResponse; export function isUnexpected( - response: GetPersonGroupPersons200Response | GetPersonGroupPersonsDefaultResponse, + response: + | GetPersonGroupPersons200Response + | GetPersonGroupPersonsDefaultResponse, ): response is GetPersonGroupPersonsDefaultResponse; export function isUnexpected( - response: DeletePersonGroupPerson200Response | DeletePersonGroupPersonDefaultResponse, + response: + | DeletePersonGroupPerson200Response + | DeletePersonGroupPersonDefaultResponse, ): response is DeletePersonGroupPersonDefaultResponse; export function isUnexpected( - response: GetPersonGroupPerson200Response | GetPersonGroupPersonDefaultResponse, + response: + | GetPersonGroupPerson200Response + | GetPersonGroupPersonDefaultResponse, ): response is GetPersonGroupPersonDefaultResponse; export function isUnexpected( - response: UpdatePersonGroupPerson200Response | UpdatePersonGroupPersonDefaultResponse, + response: + | UpdatePersonGroupPerson200Response + | UpdatePersonGroupPersonDefaultResponse, ): response is UpdatePersonGroupPersonDefaultResponse; export function isUnexpected( response: @@ -600,31 +541,47 @@ export function isUnexpected( | AddPersonGroupPersonFaceFromUrlDefaultResponse, ): response is AddPersonGroupPersonFaceFromUrlDefaultResponse; export function isUnexpected( - response: AddPersonGroupPersonFace200Response | AddPersonGroupPersonFaceDefaultResponse, + response: + | AddPersonGroupPersonFace200Response + | AddPersonGroupPersonFaceDefaultResponse, ): response is AddPersonGroupPersonFaceDefaultResponse; export function isUnexpected( - response: DeletePersonGroupPersonFace200Response | DeletePersonGroupPersonFaceDefaultResponse, + response: + | DeletePersonGroupPersonFace200Response + | DeletePersonGroupPersonFaceDefaultResponse, ): response is DeletePersonGroupPersonFaceDefaultResponse; export function isUnexpected( - response: GetPersonGroupPersonFace200Response | GetPersonGroupPersonFaceDefaultResponse, + response: + | GetPersonGroupPersonFace200Response + | GetPersonGroupPersonFaceDefaultResponse, ): response is GetPersonGroupPersonFaceDefaultResponse; export function isUnexpected( - response: UpdatePersonGroupPersonFace200Response | UpdatePersonGroupPersonFaceDefaultResponse, + response: + | UpdatePersonGroupPersonFace200Response + | UpdatePersonGroupPersonFaceDefaultResponse, ): response is UpdatePersonGroupPersonFaceDefaultResponse; export function isUnexpected( - response: CreateLargePersonGroup200Response | CreateLargePersonGroupDefaultResponse, + response: + | CreateLargePersonGroup200Response + | CreateLargePersonGroupDefaultResponse, ): response is CreateLargePersonGroupDefaultResponse; export function isUnexpected( - response: DeleteLargePersonGroup200Response | DeleteLargePersonGroupDefaultResponse, + response: + | DeleteLargePersonGroup200Response + | DeleteLargePersonGroupDefaultResponse, ): response is DeleteLargePersonGroupDefaultResponse; export function isUnexpected( response: GetLargePersonGroup200Response | GetLargePersonGroupDefaultResponse, ): response is GetLargePersonGroupDefaultResponse; export function isUnexpected( - response: UpdateLargePersonGroup200Response | UpdateLargePersonGroupDefaultResponse, + response: + | UpdateLargePersonGroup200Response + | UpdateLargePersonGroupDefaultResponse, ): response is UpdateLargePersonGroupDefaultResponse; export function isUnexpected( - response: GetLargePersonGroups200Response | GetLargePersonGroupsDefaultResponse, + response: + | GetLargePersonGroups200Response + | GetLargePersonGroupsDefaultResponse, ): response is GetLargePersonGroupsDefaultResponse; export function isUnexpected( response: @@ -633,46 +590,212 @@ export function isUnexpected( ): response is GetLargePersonGroupTrainingStatusDefaultResponse; export function isUnexpected( response: - | TrainLargePersonGroup202Response - | TrainLargePersonGroupLogicalResponse - | TrainLargePersonGroupDefaultResponse, -): response is TrainLargePersonGroupDefaultResponse; + | TrainLargePersonGroup202Response + | TrainLargePersonGroupLogicalResponse + | TrainLargePersonGroupDefaultResponse, +): response is TrainLargePersonGroupDefaultResponse; +export function isUnexpected( + response: + | CreateLargePersonGroupPerson200Response + | CreateLargePersonGroupPersonDefaultResponse, +): response is CreateLargePersonGroupPersonDefaultResponse; +export function isUnexpected( + response: + | GetLargePersonGroupPersons200Response + | GetLargePersonGroupPersonsDefaultResponse, +): response is GetLargePersonGroupPersonsDefaultResponse; +export function isUnexpected( + response: + | DeleteLargePersonGroupPerson200Response + | DeleteLargePersonGroupPersonDefaultResponse, +): response is DeleteLargePersonGroupPersonDefaultResponse; +export function isUnexpected( + response: + | GetLargePersonGroupPerson200Response + | GetLargePersonGroupPersonDefaultResponse, +): response is GetLargePersonGroupPersonDefaultResponse; +export function isUnexpected( + response: + | UpdateLargePersonGroupPerson200Response + | UpdateLargePersonGroupPersonDefaultResponse, +): response is UpdateLargePersonGroupPersonDefaultResponse; +export function isUnexpected( + response: + | AddLargePersonGroupPersonFaceFromUrl200Response + | AddLargePersonGroupPersonFaceFromUrlDefaultResponse, +): response is AddLargePersonGroupPersonFaceFromUrlDefaultResponse; +export function isUnexpected( + response: + | AddLargePersonGroupPersonFace200Response + | AddLargePersonGroupPersonFaceDefaultResponse, +): response is AddLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected( + response: + | DeleteLargePersonGroupPersonFace200Response + | DeleteLargePersonGroupPersonFaceDefaultResponse, +): response is DeleteLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected( + response: + | GetLargePersonGroupPersonFace200Response + | GetLargePersonGroupPersonFaceDefaultResponse, +): response is GetLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected( + response: + | UpdateLargePersonGroupPersonFace200Response + | UpdateLargePersonGroupPersonFaceDefaultResponse, +): response is UpdateLargePersonGroupPersonFaceDefaultResponse; +export function isUnexpected( + response: + | CreateLivenessSession200Response + | CreateLivenessSessionDefaultResponse, +): response is CreateLivenessSessionDefaultResponse; +export function isUnexpected( + response: GetLivenessSessions200Response | GetLivenessSessionsDefaultResponse, +): response is GetLivenessSessionsDefaultResponse; +export function isUnexpected( + response: + | DeleteLivenessSession200Response + | DeleteLivenessSessionDefaultResponse, +): response is DeleteLivenessSessionDefaultResponse; +export function isUnexpected( + response: + | GetLivenessSessionResult200Response + | GetLivenessSessionResultDefaultResponse, +): response is GetLivenessSessionResultDefaultResponse; +export function isUnexpected( + response: + | GetLivenessSessionAuditEntries200Response + | GetLivenessSessionAuditEntriesDefaultResponse, +): response is GetLivenessSessionAuditEntriesDefaultResponse; +export function isUnexpected( + response: + | CreateLivenessWithVerifySessionWithVerifyImage200Response + | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse, +): response is CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse; +export function isUnexpected( + response: + | CreateLivenessWithVerifySession200Response + | CreateLivenessWithVerifySessionDefaultResponse, +): response is CreateLivenessWithVerifySessionDefaultResponse; +export function isUnexpected( + response: + | GetLivenessWithVerifySessions200Response + | GetLivenessWithVerifySessionsDefaultResponse, +): response is GetLivenessWithVerifySessionsDefaultResponse; +export function isUnexpected( + response: + | DeleteLivenessWithVerifySession200Response + | DeleteLivenessWithVerifySessionDefaultResponse, +): response is DeleteLivenessWithVerifySessionDefaultResponse; +export function isUnexpected( + response: + | GetLivenessWithVerifySessionResult200Response + | GetLivenessWithVerifySessionResultDefaultResponse, +): response is GetLivenessWithVerifySessionResultDefaultResponse; +export function isUnexpected( + response: + | GetLivenessWithVerifySessionAuditEntries200Response + | GetLivenessWithVerifySessionAuditEntriesDefaultResponse, +): response is GetLivenessWithVerifySessionAuditEntriesDefaultResponse; +export function isUnexpected( + response: GetSessionImage200Response | GetSessionImageDefaultResponse, +): response is GetSessionImageDefaultResponse; +export function isUnexpected( + response: + | CreatePerson202Response + | CreatePersonLogicalResponse + | CreatePersonDefaultResponse, +): response is CreatePersonDefaultResponse; +export function isUnexpected( + response: GetPersons200Response | GetPersonsDefaultResponse, +): response is GetPersonsDefaultResponse; +export function isUnexpected( + response: + | DeletePerson202Response + | DeletePersonLogicalResponse + | DeletePersonDefaultResponse, +): response is DeletePersonDefaultResponse; +export function isUnexpected( + response: GetPerson200Response | GetPersonDefaultResponse, +): response is GetPersonDefaultResponse; +export function isUnexpected( + response: UpdatePerson200Response | UpdatePersonDefaultResponse, +): response is UpdatePersonDefaultResponse; +export function isUnexpected( + response: + | GetDynamicPersonGroupReferences200Response + | GetDynamicPersonGroupReferencesDefaultResponse, +): response is GetDynamicPersonGroupReferencesDefaultResponse; +export function isUnexpected( + response: + | AddPersonFace202Response + | AddPersonFaceLogicalResponse + | AddPersonFaceDefaultResponse, +): response is AddPersonFaceDefaultResponse; +export function isUnexpected( + response: + | AddPersonFaceFromUrl202Response + | AddPersonFaceFromUrlLogicalResponse + | AddPersonFaceFromUrlDefaultResponse, +): response is AddPersonFaceFromUrlDefaultResponse; +export function isUnexpected( + response: GetPersonFaces200Response | GetPersonFacesDefaultResponse, +): response is GetPersonFacesDefaultResponse; +export function isUnexpected( + response: + | DeletePersonFace202Response + | DeletePersonFaceLogicalResponse + | DeletePersonFaceDefaultResponse, +): response is DeletePersonFaceDefaultResponse; export function isUnexpected( - response: CreateLargePersonGroupPerson200Response | CreateLargePersonGroupPersonDefaultResponse, -): response is CreateLargePersonGroupPersonDefaultResponse; + response: GetPersonFace200Response | GetPersonFaceDefaultResponse, +): response is GetPersonFaceDefaultResponse; export function isUnexpected( - response: GetLargePersonGroupPersons200Response | GetLargePersonGroupPersonsDefaultResponse, -): response is GetLargePersonGroupPersonsDefaultResponse; + response: UpdatePersonFace200Response | UpdatePersonFaceDefaultResponse, +): response is UpdatePersonFaceDefaultResponse; export function isUnexpected( - response: DeleteLargePersonGroupPerson200Response | DeleteLargePersonGroupPersonDefaultResponse, -): response is DeleteLargePersonGroupPersonDefaultResponse; + response: + | CreateDynamicPersonGroupWithPerson202Response + | CreateDynamicPersonGroupWithPersonLogicalResponse + | CreateDynamicPersonGroupWithPersonDefaultResponse, +): response is CreateDynamicPersonGroupWithPersonDefaultResponse; export function isUnexpected( - response: GetLargePersonGroupPerson200Response | GetLargePersonGroupPersonDefaultResponse, -): response is GetLargePersonGroupPersonDefaultResponse; + response: + | CreateDynamicPersonGroup200Response + | CreateDynamicPersonGroupDefaultResponse, +): response is CreateDynamicPersonGroupDefaultResponse; export function isUnexpected( - response: UpdateLargePersonGroupPerson200Response | UpdateLargePersonGroupPersonDefaultResponse, -): response is UpdateLargePersonGroupPersonDefaultResponse; + response: + | DeleteDynamicPersonGroup202Response + | DeleteDynamicPersonGroupLogicalResponse + | DeleteDynamicPersonGroupDefaultResponse, +): response is DeleteDynamicPersonGroupDefaultResponse; export function isUnexpected( response: - | AddLargePersonGroupPersonFaceFromUrl200Response - | AddLargePersonGroupPersonFaceFromUrlDefaultResponse, -): response is AddLargePersonGroupPersonFaceFromUrlDefaultResponse; + | GetDynamicPersonGroup200Response + | GetDynamicPersonGroupDefaultResponse, +): response is GetDynamicPersonGroupDefaultResponse; export function isUnexpected( - response: AddLargePersonGroupPersonFace200Response | AddLargePersonGroupPersonFaceDefaultResponse, -): response is AddLargePersonGroupPersonFaceDefaultResponse; + response: + | UpdateDynamicPersonGroupWithPersonChanges202Response + | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse + | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse, +): response is UpdateDynamicPersonGroupWithPersonChangesDefaultResponse; export function isUnexpected( response: - | DeleteLargePersonGroupPersonFace200Response - | DeleteLargePersonGroupPersonFaceDefaultResponse, -): response is DeleteLargePersonGroupPersonFaceDefaultResponse; + | UpdateDynamicPersonGroup200Response + | UpdateDynamicPersonGroupDefaultResponse, +): response is UpdateDynamicPersonGroupDefaultResponse; export function isUnexpected( - response: GetLargePersonGroupPersonFace200Response | GetLargePersonGroupPersonFaceDefaultResponse, -): response is GetLargePersonGroupPersonFaceDefaultResponse; + response: + | GetDynamicPersonGroups200Response + | GetDynamicPersonGroupsDefaultResponse, +): response is GetDynamicPersonGroupsDefaultResponse; export function isUnexpected( response: - | UpdateLargePersonGroupPersonFace200Response - | UpdateLargePersonGroupPersonFaceDefaultResponse, -): response is UpdateLargePersonGroupPersonFaceDefaultResponse; + | GetDynamicPersonGroupPersons200Response + | GetDynamicPersonGroupPersonsDefaultResponse, +): response is GetDynamicPersonGroupPersonsDefaultResponse; export function isUnexpected( response: | GetOperationResult200Response @@ -681,6 +804,8 @@ export function isUnexpected( | DetectFromUrlDefaultResponse | Detect200Response | DetectDefaultResponse + | DetectFromSessionImageId200Response + | DetectFromSessionImageIdDefaultResponse | FindSimilar200Response | FindSimilarDefaultResponse | FindSimilarFromFaceList200Response @@ -705,28 +830,6 @@ export function isUnexpected( | VerifyFromPersonDirectoryDefaultResponse | Group200Response | GroupDefaultResponse - | CreateLivenessSession200Response - | CreateLivenessSessionDefaultResponse - | GetLivenessSessions200Response - | GetLivenessSessionsDefaultResponse - | DeleteLivenessSession200Response - | DeleteLivenessSessionDefaultResponse - | GetLivenessSessionResult200Response - | GetLivenessSessionResultDefaultResponse - | GetLivenessSessionAuditEntries200Response - | GetLivenessSessionAuditEntriesDefaultResponse - | CreateLivenessWithVerifySessionWithVerifyImage200Response - | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse - | CreateLivenessWithVerifySession200Response - | CreateLivenessWithVerifySessionDefaultResponse - | GetLivenessWithVerifySessions200Response - | GetLivenessWithVerifySessionsDefaultResponse - | DeleteLivenessWithVerifySession200Response - | DeleteLivenessWithVerifySessionDefaultResponse - | GetLivenessWithVerifySessionResult200Response - | GetLivenessWithVerifySessionResultDefaultResponse - | GetLivenessWithVerifySessionAuditEntries200Response - | GetLivenessWithVerifySessionAuditEntriesDefaultResponse | CreateFaceList200Response | CreateFaceListDefaultResponse | DeleteFaceList200Response @@ -770,54 +873,6 @@ export function isUnexpected( | GetLargeFaceListFaceDefaultResponse | UpdateLargeFaceListFace200Response | UpdateLargeFaceListFaceDefaultResponse - | CreatePerson202Response - | CreatePersonLogicalResponse - | CreatePersonDefaultResponse - | GetPersons200Response - | GetPersonsDefaultResponse - | DeletePerson202Response - | DeletePersonLogicalResponse - | DeletePersonDefaultResponse - | GetPerson200Response - | GetPersonDefaultResponse - | UpdatePerson200Response - | UpdatePersonDefaultResponse - | GetDynamicPersonGroupReferences200Response - | GetDynamicPersonGroupReferencesDefaultResponse - | AddPersonFace202Response - | AddPersonFaceLogicalResponse - | AddPersonFaceDefaultResponse - | AddPersonFaceFromUrl202Response - | AddPersonFaceFromUrlLogicalResponse - | AddPersonFaceFromUrlDefaultResponse - | GetPersonFaces200Response - | GetPersonFacesDefaultResponse - | DeletePersonFace202Response - | DeletePersonFaceLogicalResponse - | DeletePersonFaceDefaultResponse - | GetPersonFace200Response - | GetPersonFaceDefaultResponse - | UpdatePersonFace200Response - | UpdatePersonFaceDefaultResponse - | CreateDynamicPersonGroupWithPerson202Response - | CreateDynamicPersonGroupWithPersonLogicalResponse - | CreateDynamicPersonGroupWithPersonDefaultResponse - | CreateDynamicPersonGroup200Response - | CreateDynamicPersonGroupDefaultResponse - | DeleteDynamicPersonGroup202Response - | DeleteDynamicPersonGroupLogicalResponse - | DeleteDynamicPersonGroupDefaultResponse - | GetDynamicPersonGroup200Response - | GetDynamicPersonGroupDefaultResponse - | UpdateDynamicPersonGroupWithPersonChanges202Response - | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse - | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse - | UpdateDynamicPersonGroup200Response - | UpdateDynamicPersonGroupDefaultResponse - | GetDynamicPersonGroups200Response - | GetDynamicPersonGroupsDefaultResponse - | GetDynamicPersonGroupPersons200Response - | GetDynamicPersonGroupPersonsDefaultResponse | CreatePersonGroup200Response | CreatePersonGroupDefaultResponse | DeletePersonGroup200Response @@ -887,11 +942,84 @@ export function isUnexpected( | GetLargePersonGroupPersonFace200Response | GetLargePersonGroupPersonFaceDefaultResponse | UpdateLargePersonGroupPersonFace200Response - | UpdateLargePersonGroupPersonFaceDefaultResponse, + | UpdateLargePersonGroupPersonFaceDefaultResponse + | CreateLivenessSession200Response + | CreateLivenessSessionDefaultResponse + | GetLivenessSessions200Response + | GetLivenessSessionsDefaultResponse + | DeleteLivenessSession200Response + | DeleteLivenessSessionDefaultResponse + | GetLivenessSessionResult200Response + | GetLivenessSessionResultDefaultResponse + | GetLivenessSessionAuditEntries200Response + | GetLivenessSessionAuditEntriesDefaultResponse + | CreateLivenessWithVerifySessionWithVerifyImage200Response + | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse + | CreateLivenessWithVerifySession200Response + | CreateLivenessWithVerifySessionDefaultResponse + | GetLivenessWithVerifySessions200Response + | GetLivenessWithVerifySessionsDefaultResponse + | DeleteLivenessWithVerifySession200Response + | DeleteLivenessWithVerifySessionDefaultResponse + | GetLivenessWithVerifySessionResult200Response + | GetLivenessWithVerifySessionResultDefaultResponse + | GetLivenessWithVerifySessionAuditEntries200Response + | GetLivenessWithVerifySessionAuditEntriesDefaultResponse + | GetSessionImage200Response + | GetSessionImageDefaultResponse + | CreatePerson202Response + | CreatePersonLogicalResponse + | CreatePersonDefaultResponse + | GetPersons200Response + | GetPersonsDefaultResponse + | DeletePerson202Response + | DeletePersonLogicalResponse + | DeletePersonDefaultResponse + | GetPerson200Response + | GetPersonDefaultResponse + | UpdatePerson200Response + | UpdatePersonDefaultResponse + | GetDynamicPersonGroupReferences200Response + | GetDynamicPersonGroupReferencesDefaultResponse + | AddPersonFace202Response + | AddPersonFaceLogicalResponse + | AddPersonFaceDefaultResponse + | AddPersonFaceFromUrl202Response + | AddPersonFaceFromUrlLogicalResponse + | AddPersonFaceFromUrlDefaultResponse + | GetPersonFaces200Response + | GetPersonFacesDefaultResponse + | DeletePersonFace202Response + | DeletePersonFaceLogicalResponse + | DeletePersonFaceDefaultResponse + | GetPersonFace200Response + | GetPersonFaceDefaultResponse + | UpdatePersonFace200Response + | UpdatePersonFaceDefaultResponse + | CreateDynamicPersonGroupWithPerson202Response + | CreateDynamicPersonGroupWithPersonLogicalResponse + | CreateDynamicPersonGroupWithPersonDefaultResponse + | CreateDynamicPersonGroup200Response + | CreateDynamicPersonGroupDefaultResponse + | DeleteDynamicPersonGroup202Response + | DeleteDynamicPersonGroupLogicalResponse + | DeleteDynamicPersonGroupDefaultResponse + | GetDynamicPersonGroup200Response + | GetDynamicPersonGroupDefaultResponse + | UpdateDynamicPersonGroupWithPersonChanges202Response + | UpdateDynamicPersonGroupWithPersonChangesLogicalResponse + | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse + | UpdateDynamicPersonGroup200Response + | UpdateDynamicPersonGroupDefaultResponse + | GetDynamicPersonGroups200Response + | GetDynamicPersonGroupsDefaultResponse + | GetDynamicPersonGroupPersons200Response + | GetDynamicPersonGroupPersonsDefaultResponse, ): response is | GetOperationResultDefaultResponse | DetectFromUrlDefaultResponse | DetectDefaultResponse + | DetectFromSessionImageIdDefaultResponse | FindSimilarDefaultResponse | FindSimilarFromFaceListDefaultResponse | FindSimilarFromLargeFaceListDefaultResponse @@ -904,17 +1032,6 @@ export function isUnexpected( | VerifyFromLargePersonGroupDefaultResponse | VerifyFromPersonDirectoryDefaultResponse | GroupDefaultResponse - | CreateLivenessSessionDefaultResponse - | GetLivenessSessionsDefaultResponse - | DeleteLivenessSessionDefaultResponse - | GetLivenessSessionResultDefaultResponse - | GetLivenessSessionAuditEntriesDefaultResponse - | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse - | CreateLivenessWithVerifySessionDefaultResponse - | GetLivenessWithVerifySessionsDefaultResponse - | DeleteLivenessWithVerifySessionDefaultResponse - | GetLivenessWithVerifySessionResultDefaultResponse - | GetLivenessWithVerifySessionAuditEntriesDefaultResponse | CreateFaceListDefaultResponse | DeleteFaceListDefaultResponse | GetFaceListDefaultResponse @@ -936,26 +1053,6 @@ export function isUnexpected( | DeleteLargeFaceListFaceDefaultResponse | GetLargeFaceListFaceDefaultResponse | UpdateLargeFaceListFaceDefaultResponse - | CreatePersonDefaultResponse - | GetPersonsDefaultResponse - | DeletePersonDefaultResponse - | GetPersonDefaultResponse - | UpdatePersonDefaultResponse - | GetDynamicPersonGroupReferencesDefaultResponse - | AddPersonFaceDefaultResponse - | AddPersonFaceFromUrlDefaultResponse - | GetPersonFacesDefaultResponse - | DeletePersonFaceDefaultResponse - | GetPersonFaceDefaultResponse - | UpdatePersonFaceDefaultResponse - | CreateDynamicPersonGroupWithPersonDefaultResponse - | CreateDynamicPersonGroupDefaultResponse - | DeleteDynamicPersonGroupDefaultResponse - | GetDynamicPersonGroupDefaultResponse - | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse - | UpdateDynamicPersonGroupDefaultResponse - | GetDynamicPersonGroupsDefaultResponse - | GetDynamicPersonGroupPersonsDefaultResponse | CreatePersonGroupDefaultResponse | DeletePersonGroupDefaultResponse | GetPersonGroupDefaultResponse @@ -989,7 +1086,39 @@ export function isUnexpected( | AddLargePersonGroupPersonFaceDefaultResponse | DeleteLargePersonGroupPersonFaceDefaultResponse | GetLargePersonGroupPersonFaceDefaultResponse - | UpdateLargePersonGroupPersonFaceDefaultResponse { + | UpdateLargePersonGroupPersonFaceDefaultResponse + | CreateLivenessSessionDefaultResponse + | GetLivenessSessionsDefaultResponse + | DeleteLivenessSessionDefaultResponse + | GetLivenessSessionResultDefaultResponse + | GetLivenessSessionAuditEntriesDefaultResponse + | CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse + | CreateLivenessWithVerifySessionDefaultResponse + | GetLivenessWithVerifySessionsDefaultResponse + | DeleteLivenessWithVerifySessionDefaultResponse + | GetLivenessWithVerifySessionResultDefaultResponse + | GetLivenessWithVerifySessionAuditEntriesDefaultResponse + | GetSessionImageDefaultResponse + | CreatePersonDefaultResponse + | GetPersonsDefaultResponse + | DeletePersonDefaultResponse + | GetPersonDefaultResponse + | UpdatePersonDefaultResponse + | GetDynamicPersonGroupReferencesDefaultResponse + | AddPersonFaceDefaultResponse + | AddPersonFaceFromUrlDefaultResponse + | GetPersonFacesDefaultResponse + | DeletePersonFaceDefaultResponse + | GetPersonFaceDefaultResponse + | UpdatePersonFaceDefaultResponse + | CreateDynamicPersonGroupWithPersonDefaultResponse + | CreateDynamicPersonGroupDefaultResponse + | DeleteDynamicPersonGroupDefaultResponse + | GetDynamicPersonGroupDefaultResponse + | UpdateDynamicPersonGroupWithPersonChangesDefaultResponse + | UpdateDynamicPersonGroupDefaultResponse + | GetDynamicPersonGroupsDefaultResponse + | GetDynamicPersonGroupPersonsDefaultResponse { const lroOriginal = response.headers["x-ms-original-url"]; const url = new URL(lroOriginal ?? response.request.url); const method = response.request.method; @@ -1022,17 +1151,24 @@ function getParametrizedPathSuccess(method: string, path: string): string[] { // track if we have found a match to return the values found. let found = true; - for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) { - if (candidateParts[i]?.startsWith("{") && candidateParts[i]?.indexOf("}") !== -1) { + for ( + let i = candidateParts.length - 1, j = pathParts.length - 1; + i >= 1 && j >= 1; + i--, j-- + ) { + if ( + candidateParts[i]?.startsWith("{") && + candidateParts[i]?.indexOf("}") !== -1 + ) { const start = candidateParts[i]!.indexOf("}") + 1, end = candidateParts[i]?.length; // If the current part of the candidate is a "template" part // Try to use the suffix of pattern to match the path // {guid} ==> $ // {guid}:export ==> :export$ - const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test( - pathParts[j] || "", - ); + const isMatched = new RegExp( + `${candidateParts[i]?.slice(start, end)}`, + ).test(pathParts[j] || ""); if (!isMatched) { found = false; diff --git a/sdk/face/ai-vision-face-rest/src/models.ts b/sdk/face/ai-vision-face-rest/src/models.ts index b2ba0d07db36..ce7d10d6059e 100644 --- a/sdk/face/ai-vision-face-rest/src/models.ts +++ b/sdk/face/ai-vision-face-rest/src/models.ts @@ -1,67 +1,139 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -/** Request for creating liveness session. */ +/** Model for creating face collection. */ +export interface CreateCollectionRequest { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * The 'recognitionModel' associated with this face list. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02, 'recognition_03', and 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModel; +} + +/** User defined fields for object update. */ +export interface UserDefinedFieldsForUpdate { + /** User defined name, maximum length is 128. */ + name?: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; +} + +/** Add face from url request. */ +export interface AddFaceFromUrlRequest { + /** URL of input image. */ + url: string; +} + +/** User defined data for persisted face. */ +export interface FaceUserData { + /** User-provided data attached to the face. The length limit is 1K. */ + userData?: string; +} + +/** User defined fields for object creation. */ +export interface UserDefinedFields { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; +} + +/** Request model for creating liveness session. */ export interface CreateLivenessSessionContent { - /** Type of liveness mode the client should follow. */ + /** + * Type of liveness mode the client should follow. + * + * Possible values: "Passive", "PassiveActive" + */ livenessOperationMode: LivenessOperationMode; /** Whether or not to allow a '200 - Success' response body to be sent to the client, which may be undesirable for security reasons. Default is false, clients will receive a '204 - NoContent' empty body response. Regardless of selection, calling Session GetResult will always contain a response body enabling business logic to be implemented. */ sendResultsToClient?: boolean; /** Whether or not to allow client to set their own 'deviceCorrelationId' via the Vision SDK. Default is false, and 'deviceCorrelationId' must be set in this request body. */ deviceCorrelationIdSetInClient?: boolean; + /** Whether or not store the session image. */ + enableSessionImage?: boolean; + /** + * The model version used for liveness classification. This is an optional parameter, and if this is not specified, then the latest supported model version will be chosen + * + * Possible values: "2022-10-15-preview.04", "2023-12-20-preview.06" + */ + livenessSingleModalModel?: LivenessModel; /** Unique Guid per each end-user device. This is to provide rate limiting and anti-hammering. If 'deviceCorrelationIdSetInClient' is true in this request, this 'deviceCorrelationId' must be null. */ deviceCorrelationId?: string; /** Seconds the session should last for. Range is 60 to 86400 seconds. Default value is 600. */ authTokenTimeToLiveInSeconds?: number; } -export interface CreateLivenessWithVerifySessionContentParametersPartDescriptor { +export interface CreateLivenessWithVerifySessionMultipartContentParametersPartDescriptor { name: "Parameters"; - body: CreateLivenessSessionContent; + body: CreateLivenessWithVerifySessionJsonContent; } -export interface CreateLivenessWithVerifySessionContentVerifyImagePartDescriptor { +export interface CreateLivenessWithVerifySessionMultipartContentVerifyImagePartDescriptor { name: "VerifyImage"; - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream | File; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream + | File; filename?: string; contentType?: string; } +/** Request for creating liveness with verify session. */ +export interface CreateLivenessWithVerifySessionJsonContent { + /** + * Type of liveness mode the client should follow. + * + * Possible values: "Passive", "PassiveActive" + */ + livenessOperationMode: LivenessOperationMode; + /** Whether or not to allow a '200 - Success' response body to be sent to the client, which may be undesirable for security reasons. Default is false, clients will receive a '204 - NoContent' empty body response. Regardless of selection, calling Session GetResult will always contain a response body enabling business logic to be implemented. */ + sendResultsToClient?: boolean; + /** Whether or not to allow client to set their own 'deviceCorrelationId' via the Vision SDK. Default is false, and 'deviceCorrelationId' must be set in this request body. */ + deviceCorrelationIdSetInClient?: boolean; + /** Whether or not store the session image. */ + enableSessionImage?: boolean; + /** + * The model version used for liveness classification. This is an optional parameter, and if this is not specified, then the latest supported model version will be chosen + * + * Possible values: "2022-10-15-preview.04", "2023-12-20-preview.06" + */ + livenessSingleModalModel?: LivenessModel; + /** Unique Guid per each end-user device. This is to provide rate limiting and anti-hammering. If 'deviceCorrelationIdSetInClient' is true in this request, this 'deviceCorrelationId' must be null. */ + deviceCorrelationId?: string; + /** Seconds the session should last for. Range is 60 to 86400 seconds. Default value is 600. */ + authTokenTimeToLiveInSeconds?: number; + /** Whether or not return the verify image hash. */ + returnVerifyImageHash?: boolean; + /** Threshold for confidence of the face verification. */ + verifyConfidenceThreshold?: number; +} + /** Alias for DetectionModel */ -export type DetectionModel = string | "detection_01" | "detection_02" | "detection_03"; +export type DetectionModel = string; /** Alias for RecognitionModel */ -export type RecognitionModel = - | string - | "recognition_01" - | "recognition_02" - | "recognition_03" - | "recognition_04"; +export type RecognitionModel = string; /** Alias for FaceAttributeType */ -export type FaceAttributeType = - | string - | "headPose" - | "glasses" - | "occlusion" - | "accessories" - | "blur" - | "exposure" - | "noise" - | "mask" - | "qualityForRecognition" - | "age" - | "smile" - | "facialHair" - | "hair"; +export type FaceAttributeType = string; /** Alias for FindSimilarMatchMode */ -export type FindSimilarMatchMode = string | "matchPerson" | "matchFace"; +export type FindSimilarMatchMode = string; /** Alias for LivenessOperationMode */ -export type LivenessOperationMode = string | "Passive" | "PassiveActive"; +export type LivenessOperationMode = string; +/** Alias for LivenessModel */ +export type LivenessModel = string; /** Request of liveness with verify session creation. */ -export type CreateLivenessWithVerifySessionContent = +export type CreateLivenessWithVerifySessionMultipartContent = | FormData | Array< - | CreateLivenessWithVerifySessionContentParametersPartDescriptor - | CreateLivenessWithVerifySessionContentVerifyImagePartDescriptor + | CreateLivenessWithVerifySessionMultipartContentParametersPartDescriptor + | CreateLivenessWithVerifySessionMultipartContentVerifyImagePartDescriptor >; /** API versions for Azure AI Face API. */ -export type Versions = "v1.1-preview.1"; +export type Versions = "v1.1-preview.1" | "v1.2-preview.1"; diff --git a/sdk/face/ai-vision-face-rest/src/outputModels.ts b/sdk/face/ai-vision-face-rest/src/outputModels.ts index 4e89df37ed41..6be946d78508 100644 --- a/sdk/face/ai-vision-face-rest/src/outputModels.ts +++ b/sdk/face/ai-vision-face-rest/src/outputModels.ts @@ -5,7 +5,11 @@ export interface OperationResultOutput { /** Operation ID of the operation. */ readonly operationId: string; - /** Current status of the operation. */ + /** + * Current status of the operation. + * + * Possible values: "notStarted", "running", "succeeded", "failed" + */ status: OperationStatusOutput; /** Date and time the operation was created. */ createdTime: string; @@ -35,7 +39,11 @@ export interface FaceErrorOutput { export interface FaceDetectionResultOutput { /** Unique faceId of the detected face, created by detection API and it will expire 24 hours after the detection call. To return this, it requires 'returnFaceId' parameter to be true. */ faceId?: string; - /** The 'recognitionModel' associated with this faceId. This is only returned when 'returnRecognitionModel' is explicitly set as true. */ + /** + * The 'recognitionModel' associated with this faceId. This is only returned when 'returnRecognitionModel' is explicitly set as true. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ recognitionModel?: RecognitionModelOutput; /** A rectangle area for the face location on image. */ faceRectangle: FaceRectangleOutput; @@ -131,7 +139,11 @@ export interface FaceAttributesOutput { smile?: number; /** Properties describing facial hair attributes. */ facialHair?: FacialHairOutput; - /** Glasses type if any of the face. */ + /** + * Glasses type if any of the face. + * + * Possible values: "noGlasses", "readingGlasses", "sunglasses", "swimmingGoggles" + */ glasses?: GlassesTypeOutput; /** 3-D roll/yaw/pitch angles for face direction. */ headPose?: HeadPoseOutput; @@ -149,7 +161,11 @@ export interface FaceAttributesOutput { noise?: NoisePropertiesOutput; /** Properties describing the presence of a mask on a given face. */ mask?: MaskPropertiesOutput; - /** Properties describing the overall image quality regarding whether the image being used in the detection is of sufficient quality to attempt face recognition on. */ + /** + * Properties describing the overall image quality regarding whether the image being used in the detection is of sufficient quality to attempt face recognition on. + * + * Possible values: "low", "medium", "high" + */ qualityForRecognition?: QualityForRecognitionOutput; } @@ -185,7 +201,11 @@ export interface HairPropertiesOutput { /** An array of candidate colors and confidence level in the presence of each. */ export interface HairColorOutput { - /** Name of the hair color. */ + /** + * Name of the hair color. + * + * Possible values: "unknown", "white", "gray", "blond", "brown", "red", "black", "other" + */ color: HairColorTypeOutput; /** Confidence level of the color. Range between [0,1]. */ confidence: number; @@ -203,7 +223,11 @@ export interface OcclusionPropertiesOutput { /** Accessory item and corresponding confidence level. */ export interface AccessoryItemOutput { - /** Type of the accessory. */ + /** + * Type of the accessory. + * + * Possible values: "headwear", "glasses", "mask" + */ type: AccessoryTypeOutput; /** Confidence level of the accessory type. Range between [0,1]. */ confidence: number; @@ -211,7 +235,11 @@ export interface AccessoryItemOutput { /** Properties describing any presence of blur within the image. */ export interface BlurPropertiesOutput { - /** An enum value indicating level of blurriness. */ + /** + * An enum value indicating level of blurriness. + * + * Possible values: "low", "medium", "high" + */ blurLevel: BlurLevelOutput; /** A number indicating level of blurriness ranging from 0 to 1. */ value: number; @@ -219,7 +247,11 @@ export interface BlurPropertiesOutput { /** Properties describing exposure level of the image. */ export interface ExposurePropertiesOutput { - /** An enum value indicating level of exposure. */ + /** + * An enum value indicating level of exposure. + * + * Possible values: "underExposure", "goodExposure", "overExposure" + */ exposureLevel: ExposureLevelOutput; /** A number indicating level of exposure level ranging from 0 to 1. [0, 0.25) is under exposure. [0.25, 0.75) is good exposure. [0.75, 1] is over exposure. */ value: number; @@ -227,7 +259,11 @@ export interface ExposurePropertiesOutput { /** Properties describing noise level of the image. */ export interface NoisePropertiesOutput { - /** An enum value indicating level of noise. */ + /** + * An enum value indicating level of noise. + * + * Possible values: "low", "medium", "high" + */ noiseLevel: NoiseLevelOutput; /** A number indicating level of noise level ranging from 0 to 1. [0, 0.25) is under exposure. [0.25, 0.75) is good exposure. [0.75, 1] is over exposure. [0, 0.3) is low noise level. [0.3, 0.7) is medium noise level. [0.7, 1] is high noise level. */ value: number; @@ -237,7 +273,11 @@ export interface NoisePropertiesOutput { export interface MaskPropertiesOutput { /** A boolean value indicating whether nose and mouth are covered. */ noseAndMouthCovered: boolean; - /** Type of the mask. */ + /** + * Type of the mask. + * + * Possible values: "faceMask", "noMask", "otherMaskOrOcclusion", "uncertain" + */ type: MaskTypeOutput; } @@ -283,6 +323,174 @@ export interface GroupingResultOutput { messyGroup: string[]; } +/** Face list is a list of faces, up to 1,000 faces. */ +export interface FaceListOutput { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModelOutput; + /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ + readonly faceListId: string; + /** Face ids of registered faces in the face list. */ + persistedFaces?: Array; +} + +/** Face resource for face list. */ +export interface FaceListFaceOutput { + /** Face ID of the face. */ + readonly persistedFaceId: string; + /** User-provided data attached to the face. The length limit is 1K. */ + userData?: string; +} + +/** Face list item for list face list. */ +export interface FaceListItemOutput { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModelOutput; + /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ + faceListId: string; +} + +/** Response body for adding face. */ +export interface AddFaceResultOutput { + /** Persisted Face ID of the added face, which is persisted and will not expire. Different from faceId which is created in "Detect" and will expire in 24 hours after the detection call. */ + persistedFaceId: string; +} + +/** Large face list is a list of faces, up to 1,000,000 faces. */ +export interface LargeFaceListOutput { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModelOutput; + /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ + readonly largeFaceListId: string; +} + +/** Training result of a container */ +export interface TrainingResultOutput { + /** + * Training status of the container. + * + * Possible values: "notStarted", "running", "succeeded", "failed" + */ + status: OperationStatusOutput; + /** A combined UTC date and time string that describes the created time of the person group, large person group or large face list. */ + createdDateTime: string; + /** A combined UTC date and time string that describes the last modify time of the person group, large person group or large face list, could be null value when the group is not successfully trained. */ + lastActionDateTime: string; + /** A combined UTC date and time string that describes the last successful training time of the person group, large person group or large face list. */ + lastSuccessfulTrainingDateTime: string; + /** Show failure message when training failed (omitted when training succeed). */ + message?: string; +} + +/** Face resource for large face list. */ +export interface LargeFaceListFaceOutput { + /** Face ID of the face. */ + readonly persistedFaceId: string; + /** User-provided data attached to the face. The length limit is 1K. */ + userData?: string; +} + +/** The container of the uploaded person data, including face recognition feature, and up to 10,000 persons. To handle larger scale face identification problem, please consider using Large Person Group. */ +export interface PersonGroupOutput { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModelOutput; + /** ID of the container. */ + readonly personGroupId: string; +} + +/** Response of create person. */ +export interface CreatePersonResultOutput { + /** Person ID of the person. */ + personId: string; +} + +/** The person in a specified person group. To add face to this person, please call "Add Large Person Group Person Face". */ +export interface PersonGroupPersonOutput { + /** ID of the person. */ + readonly personId: string; + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** Face ids of registered faces in the person. */ + persistedFaceIds?: string[]; +} + +/** Face resource for person group person. */ +export interface PersonGroupPersonFaceOutput { + /** Face ID of the face. */ + readonly persistedFaceId: string; + /** User-provided data attached to the face. The length limit is 1K. */ + userData?: string; +} + +/** The container of the uploaded person data, including face recognition feature, and up to 1,000,000 people. */ +export interface LargePersonGroupOutput { + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** + * Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModelOutput; + /** ID of the container. */ + readonly largePersonGroupId: string; +} + +/** The person in a specified large person group. To add face to this person, please call "Add Large Person Group Person Face". */ +export interface LargePersonGroupPersonOutput { + /** ID of the person. */ + readonly personId: string; + /** User defined name, maximum length is 128. */ + name: string; + /** Optional user defined data. Length should not exceed 16K. */ + userData?: string; + /** Face ids of registered faces in the person. */ + persistedFaceIds?: string[]; +} + +/** Face resource for large person group person. */ +export interface LargePersonGroupPersonFaceOutput { + /** Face ID of the face. */ + readonly persistedFaceId: string; + /** User-provided data attached to the face. The length limit is 1K. */ + userData?: string; +} + /** Response of liveness session creation. */ export interface CreateLivenessSessionResultOutput { /** The unique session ID of the created session. It will expire 48 hours after it was created or may be deleted sooner using the corresponding Session DELETE operation. */ @@ -305,7 +513,11 @@ export interface LivenessSessionOutput { deviceCorrelationId?: string; /** Seconds the session should last for. Range is 60 to 86400 seconds. Default value is 600. */ authTokenTimeToLiveInSeconds?: number; - /** The current status of the session. */ + /** + * The current status of the session. + * + * Possible values: "NotStarted", "Started", "ResultAvailable" + */ status: FaceSessionStatusOutput; /** The latest session audit result only populated if status == 'ResultAvailable'. */ result?: LivenessSessionAuditEntryOutput; @@ -329,6 +541,10 @@ export interface LivenessSessionAuditEntryOutput { response: AuditLivenessResponseInfoOutput; /** The server calculated digest for this request. If the client reported digest differs from the server calculated digest, then the message integrity between the client and service has been compromised and the result should not be trusted. For more information, see how to guides on how to leverage this value to secure your end-to-end solution. */ digest: string; + /** The image ID of the session request. */ + sessionImageId?: string; + /** The sha256 hash of the verify-image in the request. */ + verifyImageHash?: string; } /** Audit entry for a request in the session. */ @@ -357,11 +573,19 @@ export interface AuditLivenessResponseInfoOutput { /** The response body of detect liveness API call. */ export interface LivenessResponseBodyOutput extends Record { - /** The liveness classification for the target face. */ + /** + * The liveness classification for the target face. + * + * Possible values: "uncertain", "realface", "spoofface" + */ livenessDecision?: LivenessDecisionOutput; /** Specific targets used for liveness classification. */ target?: LivenessOutputsTargetOutput; - /** The model version used for liveness classification. */ + /** + * The model version used for liveness classification. + * + * Possible values: "2022-10-15-preview.04", "2023-12-20-preview.06" + */ modelVersionUsed?: LivenessModelOutput; /** The face verification output. Only available when the request is liveness with verify. */ verifyResult?: LivenessWithVerifyOutputsOutput; @@ -375,7 +599,11 @@ export interface LivenessOutputsTargetOutput { fileName: string; /** The time offset within the file of the frame which contains the face rectangle where the liveness classification was made on. */ timeOffsetWithinFile: number; - /** The image type which contains the face rectangle where the liveness classification was made on. */ + /** + * The image type which contains the face rectangle where the liveness classification was made on. + * + * Possible values: "Color", "Infrared", "Depth" + */ imageType: ImageTypeOutput; } @@ -393,7 +621,11 @@ export interface LivenessWithVerifyOutputsOutput { export interface LivenessWithVerifyImageOutput { /** The face region where the comparison image's classification was made. */ faceRectangle: FaceRectangleOutput; - /** Quality of face image for recognition. */ + /** + * Quality of face image for recognition. + * + * Possible values: "low", "medium", "high" + */ qualityForRecognition: QualityForRecognitionOutput; } @@ -437,92 +669,16 @@ export interface LivenessWithVerifySessionOutput { deviceCorrelationId?: string; /** Seconds the session should last for. Range is 60 to 86400 seconds. Default value is 600. */ authTokenTimeToLiveInSeconds?: number; - /** The current status of the session. */ + /** + * The current status of the session. + * + * Possible values: "NotStarted", "Started", "ResultAvailable" + */ status: FaceSessionStatusOutput; /** The latest session audit result only populated if status == 'ResultAvailable'. */ result?: LivenessSessionAuditEntryOutput; } -/** Face list is a list of faces, up to 1,000 faces. */ -export interface FaceListOutput { - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. */ - recognitionModel?: RecognitionModelOutput; - /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ - readonly faceListId: string; - /** Face ids of registered faces in the face list. */ - persistedFaces?: Array; -} - -/** Face resource for face list. */ -export interface FaceListFaceOutput { - /** Face ID of the face. */ - readonly persistedFaceId: string; - /** User-provided data attached to the face. The length limit is 1K. */ - userData?: string; -} - -/** Face list item for list face list. */ -export interface FaceListItemOutput { - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. */ - recognitionModel?: RecognitionModelOutput; - /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ - faceListId: string; -} - -/** Response body for adding face. */ -export interface AddFaceResultOutput { - /** Persisted Face ID of the added face, which is persisted and will not expire. Different from faceId which is created in "Detect" and will expire in 24 hours after the detection call. */ - persistedFaceId: string; -} - -/** Large face list is a list of faces, up to 1,000,000 faces. */ -export interface LargeFaceListOutput { - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. */ - recognitionModel?: RecognitionModelOutput; - /** Valid character is letter in lower case or digit or '-' or '_', maximum length is 64. */ - readonly largeFaceListId: string; -} - -/** Training result of a container */ -export interface TrainingResultOutput { - /** Training status of the container. */ - status: OperationStatusOutput; - /** A combined UTC date and time string that describes the created time of the person group, large person group or large face list. */ - createdDateTime: string; - /** A combined UTC date and time string that describes the last modify time of the person group, large person group or large face list, could be null value when the group is not successfully trained. */ - lastActionDateTime: string; - /** A combined UTC date and time string that describes the last successful training time of the person group, large person group or large face list. */ - lastSuccessfulTrainingDateTime: string; - /** Show failure message when training failed (omitted when training succeed). */ - message?: string; -} - -/** Face resource for large face list. */ -export interface LargeFaceListFaceOutput { - /** Face ID of the face. */ - readonly persistedFaceId: string; - /** User-provided data attached to the face. The length limit is 1K. */ - userData?: string; -} - -/** Response of create person. */ -export interface CreatePersonResultOutput { - /** Person ID of the person. */ - personId: string; -} - /** Person resource for person directory */ export interface PersonDirectoryPersonOutput { /** Person ID of the person. */ @@ -571,119 +727,31 @@ export interface ListPersonResultOutput { personIds: string[]; } -/** The container of the uploaded person data, including face recognition feature, and up to 10,000 persons. To handle larger scale face identification problem, please consider using Large Person Group. */ -export interface PersonGroupOutput { - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. */ - recognitionModel?: RecognitionModelOutput; - /** ID of the container. */ - readonly personGroupId: string; -} - -/** The person in a specified person group. To add face to this person, please call "Add Large Person Group Person Face". */ -export interface PersonGroupPersonOutput { - /** ID of the person. */ - readonly personId: string; - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Face ids of registered faces in the person. */ - persistedFaceIds?: string[]; -} - -/** Face resource for person group person. */ -export interface PersonGroupPersonFaceOutput { - /** Face ID of the face. */ - readonly persistedFaceId: string; - /** User-provided data attached to the face. The length limit is 1K. */ - userData?: string; -} - -/** The container of the uploaded person data, including face recognition feature, and up to 1,000,000 people. */ -export interface LargePersonGroupOutput { - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Name of recognition model. Recognition model is used when the face features are extracted and associated with detected faceIds. */ - recognitionModel?: RecognitionModelOutput; - /** ID of the container. */ - readonly largePersonGroupId: string; -} - -/** The person in a specified large person group. To add face to this person, please call "Add Large Person Group Person Face". */ -export interface LargePersonGroupPersonOutput { - /** ID of the person. */ - readonly personId: string; - /** User defined name, maximum length is 128. */ - name: string; - /** Optional user defined data. Length should not exceed 16K. */ - userData?: string; - /** Face ids of registered faces in the person. */ - persistedFaceIds?: string[]; -} - -/** Face resource for large person group person. */ -export interface LargePersonGroupPersonFaceOutput { - /** Face ID of the face. */ - readonly persistedFaceId: string; - /** User-provided data attached to the face. The length limit is 1K. */ - userData?: string; -} - /** Alias for OperationStatusOutput */ -export type OperationStatusOutput = string | "notStarted" | "running" | "succeeded" | "failed"; +export type OperationStatusOutput = string; /** Alias for RecognitionModelOutput */ -export type RecognitionModelOutput = - | string - | "recognition_01" - | "recognition_02" - | "recognition_03" - | "recognition_04"; +export type RecognitionModelOutput = string; /** Alias for GlassesTypeOutput */ -export type GlassesTypeOutput = - | string - | "noGlasses" - | "readingGlasses" - | "sunglasses" - | "swimmingGoggles"; +export type GlassesTypeOutput = string; /** Alias for HairColorTypeOutput */ -export type HairColorTypeOutput = - | string - | "unknown" - | "white" - | "gray" - | "blond" - | "brown" - | "red" - | "black" - | "other"; +export type HairColorTypeOutput = string; /** Alias for AccessoryTypeOutput */ -export type AccessoryTypeOutput = string | "headwear" | "glasses" | "mask"; +export type AccessoryTypeOutput = string; /** Alias for BlurLevelOutput */ -export type BlurLevelOutput = string | "low" | "medium" | "high"; +export type BlurLevelOutput = string; /** Alias for ExposureLevelOutput */ -export type ExposureLevelOutput = string | "underExposure" | "goodExposure" | "overExposure"; +export type ExposureLevelOutput = string; /** Alias for NoiseLevelOutput */ -export type NoiseLevelOutput = string | "low" | "medium" | "high"; +export type NoiseLevelOutput = string; /** Alias for MaskTypeOutput */ -export type MaskTypeOutput = string | "faceMask" | "noMask" | "otherMaskOrOcclusion" | "uncertain"; +export type MaskTypeOutput = string; /** Alias for QualityForRecognitionOutput */ -export type QualityForRecognitionOutput = string | "low" | "medium" | "high"; +export type QualityForRecognitionOutput = string; +/** Alias for LivenessModelOutput */ +export type LivenessModelOutput = string; /** Alias for FaceSessionStatusOutput */ -export type FaceSessionStatusOutput = string | "NotStarted" | "Started" | "ResultAvailable"; +export type FaceSessionStatusOutput = string; /** Alias for LivenessDecisionOutput */ -export type LivenessDecisionOutput = string | "uncertain" | "realface" | "spoofface"; +export type LivenessDecisionOutput = string; /** Alias for ImageTypeOutput */ -export type ImageTypeOutput = string | "Color" | "Infrared" | "Depth"; -/** Alias for LivenessModelOutput */ -export type LivenessModelOutput = - | string - | "2020-02-15-preview.01" - | "2021-11-12-preview.03" - | "2022-10-15-preview.04" - | "2023-03-02-preview.05"; +export type ImageTypeOutput = string; diff --git a/sdk/face/ai-vision-face-rest/src/parameters.ts b/sdk/face/ai-vision-face-rest/src/parameters.ts index fc0477af6dc3..f35f7c690517 100644 --- a/sdk/face/ai-vision-face-rest/src/parameters.ts +++ b/sdk/face/ai-vision-face-rest/src/parameters.ts @@ -7,20 +7,34 @@ import { RecognitionModel, FaceAttributeType, FindSimilarMatchMode, + CreateCollectionRequest, + UserDefinedFieldsForUpdate, + AddFaceFromUrlRequest, + FaceUserData, + UserDefinedFields, CreateLivenessSessionContent, - CreateLivenessWithVerifySessionContent, + CreateLivenessWithVerifySessionMultipartContent, + CreateLivenessWithVerifySessionJsonContent, } from "./models.js"; export type GetOperationResultParameters = RequestParameters; export interface DetectFromUrlBodyParam { - body?: { url: string }; + body: { url: string }; } export interface DetectFromUrlQueryParamProperties { - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. 'detection_03' is recommended since its accuracy is improved on smaller faces (64x64 pixels) and rotated face orientations. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; - /** The 'recognitionModel' associated with the detected faceIds. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02', 'recognition_03' or 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. */ + /** + * The 'recognitionModel' associated with the detected faceIds. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02', 'recognition_03' or 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ recognitionModel?: RecognitionModel; /** Return faceIds of the detected faces or not. The default value is true. */ returnFaceId?: boolean; @@ -54,13 +68,25 @@ export interface DetectBodyParam { * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } export interface DetectQueryParamProperties { - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. 'detection_03' is recommended since its accuracy is improved on smaller faces (64x64 pixels) and rotated face orientations. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; - /** The 'recognitionModel' associated with the detected faceIds. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02', 'recognition_03' or 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. */ + /** + * The 'recognitionModel' associated with the detected faceIds. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02', 'recognition_03' or 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ recognitionModel?: RecognitionModel; /** Return faceIds of the detected faces or not. The default value is true. */ returnFaceId?: boolean; @@ -88,8 +114,52 @@ export type DetectParameters = DetectQueryParam & DetectBodyParam & RequestParameters; +export interface DetectFromSessionImageIdBodyParam { + body: { sessionImageId: string }; +} + +export interface DetectFromSessionImageIdQueryParamProperties { + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. 'detection_03' is recommended since its accuracy is improved on smaller faces (64x64 pixels) and rotated face orientations. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ + detectionModel?: DetectionModel; + /** + * The 'recognitionModel' associated with the detected faceIds. Supported 'recognitionModel' values include 'recognition_01', 'recognition_02', 'recognition_03' or 'recognition_04'. The default value is 'recognition_01'. 'recognition_04' is recommended since its accuracy is improved on faces wearing masks compared with 'recognition_03', and its overall accuracy is improved compared with 'recognition_01' and 'recognition_02'. + * + * Possible values: "recognition_01", "recognition_02", "recognition_03", "recognition_04" + */ + recognitionModel?: RecognitionModel; + /** Return faceIds of the detected faces or not. The default value is true. */ + returnFaceId?: boolean; + /** Analyze and return the one or more specified face attributes in the comma-separated string like 'returnFaceAttributes=headPose,glasses'. Face attribute analysis has additional computational and time cost. */ + returnFaceAttributes?: FaceAttributeType[]; + /** Return face landmarks of the detected faces or not. The default value is false. */ + returnFaceLandmarks?: boolean; + /** Return 'recognitionModel' or not. The default value is false. This is only applicable when returnFaceId = true. */ + returnRecognitionModel?: boolean; + /** The number of seconds for the face ID being cached. Supported range from 60 seconds up to 86400 seconds. The default value is 86400 (24 hours). */ + faceIdTimeToLive?: number; +} + +export interface DetectFromSessionImageIdQueryParam { + queryParameters?: DetectFromSessionImageIdQueryParamProperties; +} + +export interface DetectFromSessionImageIdMediaTypesParam { + /** The format of the HTTP payload. */ + contentType: "application/json"; +} + +export type DetectFromSessionImageIdParameters = + DetectFromSessionImageIdQueryParam & + DetectFromSessionImageIdMediaTypesParam & + DetectFromSessionImageIdBodyParam & + RequestParameters; + export interface FindSimilarBodyParam { - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -100,7 +170,7 @@ export interface FindSimilarBodyParam { export type FindSimilarParameters = FindSimilarBodyParam & RequestParameters; export interface FindSimilarFromFaceListBodyParam { - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -108,11 +178,11 @@ export interface FindSimilarFromFaceListBodyParam { }; } -export type FindSimilarFromFaceListParameters = FindSimilarFromFaceListBodyParam & - RequestParameters; +export type FindSimilarFromFaceListParameters = + FindSimilarFromFaceListBodyParam & RequestParameters; export interface FindSimilarFromLargeFaceListBodyParam { - body?: { + body: { faceId: string; maxNumOfCandidatesReturned?: number; mode?: FindSimilarMatchMode; @@ -120,11 +190,11 @@ export interface FindSimilarFromLargeFaceListBodyParam { }; } -export type FindSimilarFromLargeFaceListParameters = FindSimilarFromLargeFaceListBodyParam & - RequestParameters; +export type FindSimilarFromLargeFaceListParameters = + FindSimilarFromLargeFaceListBodyParam & RequestParameters; export interface IdentifyFromPersonGroupBodyParam { - body?: { + body: { faceIds: string[]; personGroupId: string; maxNumOfCandidatesReturned?: number; @@ -132,11 +202,11 @@ export interface IdentifyFromPersonGroupBodyParam { }; } -export type IdentifyFromPersonGroupParameters = IdentifyFromPersonGroupBodyParam & - RequestParameters; +export type IdentifyFromPersonGroupParameters = + IdentifyFromPersonGroupBodyParam & RequestParameters; export interface IdentifyFromLargePersonGroupBodyParam { - body?: { + body: { faceIds: string[]; largePersonGroupId: string; maxNumOfCandidatesReturned?: number; @@ -144,11 +214,11 @@ export interface IdentifyFromLargePersonGroupBodyParam { }; } -export type IdentifyFromLargePersonGroupParameters = IdentifyFromLargePersonGroupBodyParam & - RequestParameters; +export type IdentifyFromLargePersonGroupParameters = + IdentifyFromLargePersonGroupBodyParam & RequestParameters; export interface IdentifyFromPersonDirectoryBodyParam { - body?: { + body: { faceIds: string[]; personIds: string[]; maxNumOfCandidatesReturned?: number; @@ -156,11 +226,11 @@ export interface IdentifyFromPersonDirectoryBodyParam { }; } -export type IdentifyFromPersonDirectoryParameters = IdentifyFromPersonDirectoryBodyParam & - RequestParameters; +export type IdentifyFromPersonDirectoryParameters = + IdentifyFromPersonDirectoryBodyParam & RequestParameters; export interface IdentifyFromDynamicPersonGroupBodyParam { - body?: { + body: { faceIds: string[]; dynamicPersonGroupId: string; maxNumOfCandidatesReturned?: number; @@ -168,136 +238,49 @@ export interface IdentifyFromDynamicPersonGroupBodyParam { }; } -export type IdentifyFromDynamicPersonGroupParameters = IdentifyFromDynamicPersonGroupBodyParam & - RequestParameters; +export type IdentifyFromDynamicPersonGroupParameters = + IdentifyFromDynamicPersonGroupBodyParam & RequestParameters; export interface VerifyFaceToFaceBodyParam { - body?: { faceId1: string; faceId2: string }; + body: { faceId1: string; faceId2: string }; } -export type VerifyFaceToFaceParameters = VerifyFaceToFaceBodyParam & RequestParameters; +export type VerifyFaceToFaceParameters = VerifyFaceToFaceBodyParam & + RequestParameters; export interface VerifyFromPersonGroupBodyParam { - body?: { faceId: string; personGroupId: string; personId: string }; + body: { faceId: string; personGroupId: string; personId: string }; } -export type VerifyFromPersonGroupParameters = VerifyFromPersonGroupBodyParam & RequestParameters; +export type VerifyFromPersonGroupParameters = VerifyFromPersonGroupBodyParam & + RequestParameters; export interface VerifyFromLargePersonGroupBodyParam { - body?: { faceId: string; largePersonGroupId: string; personId: string }; + body: { faceId: string; largePersonGroupId: string; personId: string }; } -export type VerifyFromLargePersonGroupParameters = VerifyFromLargePersonGroupBodyParam & - RequestParameters; +export type VerifyFromLargePersonGroupParameters = + VerifyFromLargePersonGroupBodyParam & RequestParameters; export interface VerifyFromPersonDirectoryBodyParam { - body?: { faceId: string; personId: string }; + body: { faceId: string; personId: string }; } -export type VerifyFromPersonDirectoryParameters = VerifyFromPersonDirectoryBodyParam & - RequestParameters; +export type VerifyFromPersonDirectoryParameters = + VerifyFromPersonDirectoryBodyParam & RequestParameters; export interface GroupBodyParam { - body?: { faceIds: string[] }; + body: { faceIds: string[] }; } export type GroupParameters = GroupBodyParam & RequestParameters; -export interface CreateLivenessSessionBodyParam { - body?: CreateLivenessSessionContent; -} - -export type CreateLivenessSessionParameters = CreateLivenessSessionBodyParam & RequestParameters; -export type DeleteLivenessSessionParameters = RequestParameters; -export type GetLivenessSessionResultParameters = RequestParameters; - -export interface GetLivenessSessionsQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} - -export interface GetLivenessSessionsQueryParam { - queryParameters?: GetLivenessSessionsQueryParamProperties; -} - -export type GetLivenessSessionsParameters = GetLivenessSessionsQueryParam & RequestParameters; - -export interface GetLivenessSessionAuditEntriesQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} - -export interface GetLivenessSessionAuditEntriesQueryParam { - queryParameters?: GetLivenessSessionAuditEntriesQueryParamProperties; -} - -export type GetLivenessSessionAuditEntriesParameters = GetLivenessSessionAuditEntriesQueryParam & - RequestParameters; - -export interface CreateLivenessWithVerifySessionWithVerifyImageBodyParam { - body?: CreateLivenessWithVerifySessionContent; -} - -export interface CreateLivenessWithVerifySessionWithVerifyImageMediaTypesParam { - /** The content type for the operation. Always multipart/form-data for this operation. */ - contentType: "multipart/form-data"; -} - -export type CreateLivenessWithVerifySessionWithVerifyImageParameters = - CreateLivenessWithVerifySessionWithVerifyImageMediaTypesParam & - CreateLivenessWithVerifySessionWithVerifyImageBodyParam & - RequestParameters; - -export interface CreateLivenessWithVerifySessionBodyParam { - body?: CreateLivenessSessionContent; -} - -export type CreateLivenessWithVerifySessionParameters = CreateLivenessWithVerifySessionBodyParam & - RequestParameters; -export type DeleteLivenessWithVerifySessionParameters = RequestParameters; -export type GetLivenessWithVerifySessionResultParameters = RequestParameters; - -export interface GetLivenessWithVerifySessionsQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} - -export interface GetLivenessWithVerifySessionsQueryParam { - queryParameters?: GetLivenessWithVerifySessionsQueryParamProperties; -} - -export type GetLivenessWithVerifySessionsParameters = GetLivenessWithVerifySessionsQueryParam & - RequestParameters; - -export interface GetLivenessWithVerifySessionAuditEntriesQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} - -export interface GetLivenessWithVerifySessionAuditEntriesQueryParam { - queryParameters?: GetLivenessWithVerifySessionAuditEntriesQueryParamProperties; -} - -export type GetLivenessWithVerifySessionAuditEntriesParameters = - GetLivenessWithVerifySessionAuditEntriesQueryParam & RequestParameters; - export interface CreateFaceListBodyParam { - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } -export type CreateFaceListParameters = CreateFaceListBodyParam & RequestParameters; +export type CreateFaceListParameters = CreateFaceListBodyParam & + RequestParameters; export type DeleteFaceListParameters = RequestParameters; export interface GetFaceListQueryParamProperties { @@ -312,10 +295,11 @@ export interface GetFaceListQueryParam { export type GetFaceListParameters = GetFaceListQueryParam & RequestParameters; export interface UpdateFaceListBodyParam { - body?: { name?: string; userData?: string }; + body: UserDefinedFieldsForUpdate; } -export type UpdateFaceListParameters = UpdateFaceListBodyParam & RequestParameters; +export type UpdateFaceListParameters = UpdateFaceListBodyParam & + RequestParameters; export interface GetFaceListsQueryParamProperties { /** Return 'recognitionModel' or not. The default value is false. */ @@ -329,13 +313,17 @@ export interface GetFaceListsQueryParam { export type GetFaceListsParameters = GetFaceListsQueryParam & RequestParameters; export interface AddFaceListFaceFromUrlBodyParam { - body?: { url: string }; + body: AddFaceFromUrlRequest; } export interface AddFaceListFaceFromUrlQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; @@ -345,9 +333,10 @@ export interface AddFaceListFaceFromUrlQueryParam { queryParameters?: AddFaceListFaceFromUrlQueryParamProperties; } -export type AddFaceListFaceFromUrlParameters = AddFaceListFaceFromUrlQueryParam & - AddFaceListFaceFromUrlBodyParam & - RequestParameters; +export type AddFaceListFaceFromUrlParameters = + AddFaceListFaceFromUrlQueryParam & + AddFaceListFaceFromUrlBodyParam & + RequestParameters; export interface AddFaceListFaceBodyParam { /** @@ -355,13 +344,21 @@ export interface AddFaceListFaceBodyParam { * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } export interface AddFaceListFaceQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; @@ -383,14 +380,11 @@ export type AddFaceListFaceParameters = AddFaceListFaceQueryParam & export type DeleteFaceListFaceParameters = RequestParameters; export interface CreateLargeFaceListBodyParam { - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; + body: CreateCollectionRequest; } -export type CreateLargeFaceListParameters = CreateLargeFaceListBodyParam & RequestParameters; +export type CreateLargeFaceListParameters = CreateLargeFaceListBodyParam & + RequestParameters; export type DeleteLargeFaceListParameters = RequestParameters; export interface GetLargeFaceListQueryParamProperties { @@ -402,13 +396,15 @@ export interface GetLargeFaceListQueryParam { queryParameters?: GetLargeFaceListQueryParamProperties; } -export type GetLargeFaceListParameters = GetLargeFaceListQueryParam & RequestParameters; +export type GetLargeFaceListParameters = GetLargeFaceListQueryParam & + RequestParameters; export interface UpdateLargeFaceListBodyParam { - body?: { name?: string; userData?: string }; + body: UserDefinedFieldsForUpdate; } -export type UpdateLargeFaceListParameters = UpdateLargeFaceListBodyParam & RequestParameters; +export type UpdateLargeFaceListParameters = UpdateLargeFaceListBodyParam & + RequestParameters; export interface GetLargeFaceListsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ @@ -423,18 +419,23 @@ export interface GetLargeFaceListsQueryParam { queryParameters?: GetLargeFaceListsQueryParamProperties; } -export type GetLargeFaceListsParameters = GetLargeFaceListsQueryParam & RequestParameters; +export type GetLargeFaceListsParameters = GetLargeFaceListsQueryParam & + RequestParameters; export type GetLargeFaceListTrainingStatusParameters = RequestParameters; export type TrainLargeFaceListParameters = RequestParameters; export interface AddLargeFaceListFaceFromUrlBodyParam { - body?: { url: string }; + body: AddFaceFromUrlRequest; } export interface AddLargeFaceListFaceFromUrlQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; @@ -444,9 +445,10 @@ export interface AddLargeFaceListFaceFromUrlQueryParam { queryParameters?: AddLargeFaceListFaceFromUrlQueryParamProperties; } -export type AddLargeFaceListFaceFromUrlParameters = AddLargeFaceListFaceFromUrlQueryParam & - AddLargeFaceListFaceFromUrlBodyParam & - RequestParameters; +export type AddLargeFaceListFaceFromUrlParameters = + AddLargeFaceListFaceFromUrlQueryParam & + AddLargeFaceListFaceFromUrlBodyParam & + RequestParameters; export interface AddLargeFaceListFaceBodyParam { /** @@ -454,13 +456,21 @@ export interface AddLargeFaceListFaceBodyParam { * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } export interface AddLargeFaceListFaceQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; @@ -483,11 +493,11 @@ export type DeleteLargeFaceListFaceParameters = RequestParameters; export type GetLargeFaceListFaceParameters = RequestParameters; export interface UpdateLargeFaceListFaceBodyParam { - body?: { userData?: string }; + body: FaceUserData; } -export type UpdateLargeFaceListFaceParameters = UpdateLargeFaceListFaceBodyParam & - RequestParameters; +export type UpdateLargeFaceListFaceParameters = + UpdateLargeFaceListFaceBodyParam & RequestParameters; export interface GetLargeFaceListFacesQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ @@ -500,202 +510,188 @@ export interface GetLargeFaceListFacesQueryParam { queryParameters?: GetLargeFaceListFacesQueryParamProperties; } -export type GetLargeFaceListFacesParameters = GetLargeFaceListFacesQueryParam & RequestParameters; +export type GetLargeFaceListFacesParameters = GetLargeFaceListFacesQueryParam & + RequestParameters; -export interface CreatePersonBodyParam { - body?: { name: string; userData?: string }; +export interface CreatePersonGroupBodyParam { + body: CreateCollectionRequest; } -export type CreatePersonParameters = CreatePersonBodyParam & RequestParameters; -export type DeletePersonParameters = RequestParameters; -export type GetPersonParameters = RequestParameters; +export type CreatePersonGroupParameters = CreatePersonGroupBodyParam & + RequestParameters; +export type DeletePersonGroupParameters = RequestParameters; -export interface UpdatePersonBodyParam { - body?: { name?: string; userData?: string }; +export interface GetPersonGroupQueryParamProperties { + /** Return 'recognitionModel' or not. The default value is false. */ + returnRecognitionModel?: boolean; } -export type UpdatePersonParameters = UpdatePersonBodyParam & RequestParameters; +export interface GetPersonGroupQueryParam { + queryParameters?: GetPersonGroupQueryParamProperties; +} -export interface GetPersonsQueryParamProperties { +export type GetPersonGroupParameters = GetPersonGroupQueryParam & + RequestParameters; + +export interface UpdatePersonGroupBodyParam { + body: UserDefinedFieldsForUpdate; +} + +export type UpdatePersonGroupParameters = UpdatePersonGroupBodyParam & + RequestParameters; + +export interface GetPersonGroupsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ top?: number; + /** Return 'recognitionModel' or not. The default value is false. */ + returnRecognitionModel?: boolean; } -export interface GetPersonsQueryParam { - queryParameters?: GetPersonsQueryParamProperties; +export interface GetPersonGroupsQueryParam { + queryParameters?: GetPersonGroupsQueryParamProperties; } -export type GetPersonsParameters = GetPersonsQueryParam & RequestParameters; +export type GetPersonGroupsParameters = GetPersonGroupsQueryParam & + RequestParameters; +export type GetPersonGroupTrainingStatusParameters = RequestParameters; +export type TrainPersonGroupParameters = RequestParameters; -export interface GetDynamicPersonGroupReferencesQueryParamProperties { +export interface CreatePersonGroupPersonBodyParam { + body: UserDefinedFields; +} + +export type CreatePersonGroupPersonParameters = + CreatePersonGroupPersonBodyParam & RequestParameters; +export type DeletePersonGroupPersonParameters = RequestParameters; +export type GetPersonGroupPersonParameters = RequestParameters; + +export interface UpdatePersonGroupPersonBodyParam { + body: UserDefinedFieldsForUpdate; +} + +export type UpdatePersonGroupPersonParameters = + UpdatePersonGroupPersonBodyParam & RequestParameters; + +export interface GetPersonGroupPersonsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ top?: number; } -export interface GetDynamicPersonGroupReferencesQueryParam { - queryParameters?: GetDynamicPersonGroupReferencesQueryParamProperties; +export interface GetPersonGroupPersonsQueryParam { + queryParameters?: GetPersonGroupPersonsQueryParamProperties; } -export type GetDynamicPersonGroupReferencesParameters = GetDynamicPersonGroupReferencesQueryParam & +export type GetPersonGroupPersonsParameters = GetPersonGroupPersonsQueryParam & RequestParameters; -export interface AddPersonFaceBodyParam { - /** - * The image to be analyzed - * - * Value may contain any sequence of octets - */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; +export interface AddPersonGroupPersonFaceFromUrlBodyParam { + body: AddFaceFromUrlRequest; } -export interface AddPersonFaceQueryParamProperties { +export interface AddPersonGroupPersonFaceFromUrlQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; } -export interface AddPersonFaceQueryParam { - queryParameters?: AddPersonFaceQueryParamProperties; -} - -export interface AddPersonFaceMediaTypesParam { - /** The format of the HTTP payload. */ - contentType: "application/octet-stream"; +export interface AddPersonGroupPersonFaceFromUrlQueryParam { + queryParameters?: AddPersonGroupPersonFaceFromUrlQueryParamProperties; } -export type AddPersonFaceParameters = AddPersonFaceQueryParam & - AddPersonFaceMediaTypesParam & - AddPersonFaceBodyParam & - RequestParameters; +export type AddPersonGroupPersonFaceFromUrlParameters = + AddPersonGroupPersonFaceFromUrlQueryParam & + AddPersonGroupPersonFaceFromUrlBodyParam & + RequestParameters; -export interface AddPersonFaceFromUrlBodyParam { - body?: { url: string }; +export interface AddPersonGroupPersonFaceBodyParam { + /** + * The image to be analyzed + * + * Value may contain any sequence of octets + */ + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } -export interface AddPersonFaceFromUrlQueryParamProperties { +export interface AddPersonGroupPersonFaceQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; } -export interface AddPersonFaceFromUrlQueryParam { - queryParameters?: AddPersonFaceFromUrlQueryParamProperties; +export interface AddPersonGroupPersonFaceQueryParam { + queryParameters?: AddPersonGroupPersonFaceQueryParamProperties; } -export type AddPersonFaceFromUrlParameters = AddPersonFaceFromUrlQueryParam & - AddPersonFaceFromUrlBodyParam & - RequestParameters; -export type DeletePersonFaceParameters = RequestParameters; -export type GetPersonFaceParameters = RequestParameters; - -export interface UpdatePersonFaceBodyParam { - body?: { userData?: string }; -} - -export type UpdatePersonFaceParameters = UpdatePersonFaceBodyParam & RequestParameters; -export type GetPersonFacesParameters = RequestParameters; - -export interface CreateDynamicPersonGroupWithPersonBodyParam { - body?: { name: string; userData?: string; addPersonIds: string[] }; -} - -export type CreateDynamicPersonGroupWithPersonParameters = - CreateDynamicPersonGroupWithPersonBodyParam & RequestParameters; - -export interface CreateDynamicPersonGroupBodyParam { - body?: { name: string; userData?: string }; -} - -export type CreateDynamicPersonGroupParameters = CreateDynamicPersonGroupBodyParam & - RequestParameters; -export type DeleteDynamicPersonGroupParameters = RequestParameters; -export type GetDynamicPersonGroupParameters = RequestParameters; - -export interface UpdateDynamicPersonGroupWithPersonChangesBodyParam { - body?: { - name?: string; - userData?: string; - addPersonIds?: string[]; - removePersonIds?: string[]; - }; -} - -export type UpdateDynamicPersonGroupWithPersonChangesParameters = - UpdateDynamicPersonGroupWithPersonChangesBodyParam & RequestParameters; - -export interface UpdateDynamicPersonGroupBodyParam { - body?: { name?: string; userData?: string }; +export interface AddPersonGroupPersonFaceMediaTypesParam { + /** The format of the HTTP payload. */ + contentType: "application/octet-stream"; } -export type UpdateDynamicPersonGroupParameters = UpdateDynamicPersonGroupBodyParam & - RequestParameters; - -export interface GetDynamicPersonGroupsQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} +export type AddPersonGroupPersonFaceParameters = + AddPersonGroupPersonFaceQueryParam & + AddPersonGroupPersonFaceMediaTypesParam & + AddPersonGroupPersonFaceBodyParam & + RequestParameters; +export type DeletePersonGroupPersonFaceParameters = RequestParameters; +export type GetPersonGroupPersonFaceParameters = RequestParameters; -export interface GetDynamicPersonGroupsQueryParam { - queryParameters?: GetDynamicPersonGroupsQueryParamProperties; +export interface UpdatePersonGroupPersonFaceBodyParam { + body: FaceUserData; } -export type GetDynamicPersonGroupsParameters = GetDynamicPersonGroupsQueryParam & RequestParameters; +export type UpdatePersonGroupPersonFaceParameters = + UpdatePersonGroupPersonFaceBodyParam & RequestParameters; -export interface GetDynamicPersonGroupPersonsQueryParamProperties { - /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ - start?: string; - /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ - top?: number; -} - -export interface GetDynamicPersonGroupPersonsQueryParam { - queryParameters?: GetDynamicPersonGroupPersonsQueryParamProperties; +export interface CreateLargePersonGroupBodyParam { + body: CreateCollectionRequest; } -export type GetDynamicPersonGroupPersonsParameters = GetDynamicPersonGroupPersonsQueryParam & +export type CreateLargePersonGroupParameters = CreateLargePersonGroupBodyParam & RequestParameters; +export type DeleteLargePersonGroupParameters = RequestParameters; -export interface CreatePersonGroupBodyParam { - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; -} - -export type CreatePersonGroupParameters = CreatePersonGroupBodyParam & RequestParameters; -export type DeletePersonGroupParameters = RequestParameters; - -export interface GetPersonGroupQueryParamProperties { +export interface GetLargePersonGroupQueryParamProperties { /** Return 'recognitionModel' or not. The default value is false. */ returnRecognitionModel?: boolean; } -export interface GetPersonGroupQueryParam { - queryParameters?: GetPersonGroupQueryParamProperties; +export interface GetLargePersonGroupQueryParam { + queryParameters?: GetLargePersonGroupQueryParamProperties; } -export type GetPersonGroupParameters = GetPersonGroupQueryParam & RequestParameters; +export type GetLargePersonGroupParameters = GetLargePersonGroupQueryParam & + RequestParameters; -export interface UpdatePersonGroupBodyParam { - body?: { name?: string; userData?: string }; +export interface UpdateLargePersonGroupBodyParam { + body: UserDefinedFieldsForUpdate; } -export type UpdatePersonGroupParameters = UpdatePersonGroupBodyParam & RequestParameters; +export type UpdateLargePersonGroupParameters = UpdateLargePersonGroupBodyParam & + RequestParameters; -export interface GetPersonGroupsQueryParamProperties { +export interface GetLargePersonGroupsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ @@ -704,239 +700,388 @@ export interface GetPersonGroupsQueryParamProperties { returnRecognitionModel?: boolean; } -export interface GetPersonGroupsQueryParam { - queryParameters?: GetPersonGroupsQueryParamProperties; +export interface GetLargePersonGroupsQueryParam { + queryParameters?: GetLargePersonGroupsQueryParamProperties; } -export type GetPersonGroupsParameters = GetPersonGroupsQueryParam & RequestParameters; -export type GetPersonGroupTrainingStatusParameters = RequestParameters; -export type TrainPersonGroupParameters = RequestParameters; +export type GetLargePersonGroupsParameters = GetLargePersonGroupsQueryParam & + RequestParameters; +export type GetLargePersonGroupTrainingStatusParameters = RequestParameters; +export type TrainLargePersonGroupParameters = RequestParameters; -export interface CreatePersonGroupPersonBodyParam { - body?: { name: string; userData?: string }; +export interface CreateLargePersonGroupPersonBodyParam { + body: UserDefinedFields; } -export type CreatePersonGroupPersonParameters = CreatePersonGroupPersonBodyParam & - RequestParameters; -export type DeletePersonGroupPersonParameters = RequestParameters; -export type GetPersonGroupPersonParameters = RequestParameters; +export type CreateLargePersonGroupPersonParameters = + CreateLargePersonGroupPersonBodyParam & RequestParameters; +export type DeleteLargePersonGroupPersonParameters = RequestParameters; +export type GetLargePersonGroupPersonParameters = RequestParameters; -export interface UpdatePersonGroupPersonBodyParam { - body?: { name?: string; userData?: string }; +export interface UpdateLargePersonGroupPersonBodyParam { + body: UserDefinedFieldsForUpdate; } -export type UpdatePersonGroupPersonParameters = UpdatePersonGroupPersonBodyParam & - RequestParameters; +export type UpdateLargePersonGroupPersonParameters = + UpdateLargePersonGroupPersonBodyParam & RequestParameters; -export interface GetPersonGroupPersonsQueryParamProperties { +export interface GetLargePersonGroupPersonsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ top?: number; } -export interface GetPersonGroupPersonsQueryParam { - queryParameters?: GetPersonGroupPersonsQueryParamProperties; +export interface GetLargePersonGroupPersonsQueryParam { + queryParameters?: GetLargePersonGroupPersonsQueryParamProperties; } -export type GetPersonGroupPersonsParameters = GetPersonGroupPersonsQueryParam & RequestParameters; +export type GetLargePersonGroupPersonsParameters = + GetLargePersonGroupPersonsQueryParam & RequestParameters; -export interface AddPersonGroupPersonFaceFromUrlBodyParam { - body?: { url: string }; +export interface AddLargePersonGroupPersonFaceFromUrlBodyParam { + body: AddFaceFromUrlRequest; } -export interface AddPersonGroupPersonFaceFromUrlQueryParamProperties { +export interface AddLargePersonGroupPersonFaceFromUrlQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; } -export interface AddPersonGroupPersonFaceFromUrlQueryParam { - queryParameters?: AddPersonGroupPersonFaceFromUrlQueryParamProperties; +export interface AddLargePersonGroupPersonFaceFromUrlQueryParam { + queryParameters?: AddLargePersonGroupPersonFaceFromUrlQueryParamProperties; } -export type AddPersonGroupPersonFaceFromUrlParameters = AddPersonGroupPersonFaceFromUrlQueryParam & - AddPersonGroupPersonFaceFromUrlBodyParam & - RequestParameters; +export type AddLargePersonGroupPersonFaceFromUrlParameters = + AddLargePersonGroupPersonFaceFromUrlQueryParam & + AddLargePersonGroupPersonFaceFromUrlBodyParam & + RequestParameters; -export interface AddPersonGroupPersonFaceBodyParam { +export interface AddLargePersonGroupPersonFaceBodyParam { /** * The image to be analyzed * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } -export interface AddPersonGroupPersonFaceQueryParamProperties { +export interface AddLargePersonGroupPersonFaceQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; } -export interface AddPersonGroupPersonFaceQueryParam { - queryParameters?: AddPersonGroupPersonFaceQueryParamProperties; +export interface AddLargePersonGroupPersonFaceQueryParam { + queryParameters?: AddLargePersonGroupPersonFaceQueryParamProperties; } -export interface AddPersonGroupPersonFaceMediaTypesParam { +export interface AddLargePersonGroupPersonFaceMediaTypesParam { /** The format of the HTTP payload. */ contentType: "application/octet-stream"; } -export type AddPersonGroupPersonFaceParameters = AddPersonGroupPersonFaceQueryParam & - AddPersonGroupPersonFaceMediaTypesParam & - AddPersonGroupPersonFaceBodyParam & +export type AddLargePersonGroupPersonFaceParameters = + AddLargePersonGroupPersonFaceQueryParam & + AddLargePersonGroupPersonFaceMediaTypesParam & + AddLargePersonGroupPersonFaceBodyParam & + RequestParameters; +export type DeleteLargePersonGroupPersonFaceParameters = RequestParameters; +export type GetLargePersonGroupPersonFaceParameters = RequestParameters; + +export interface UpdateLargePersonGroupPersonFaceBodyParam { + body: FaceUserData; +} + +export type UpdateLargePersonGroupPersonFaceParameters = + UpdateLargePersonGroupPersonFaceBodyParam & RequestParameters; + +export interface CreateLivenessSessionBodyParam { + /** Body parameter. */ + body: CreateLivenessSessionContent; +} + +export type CreateLivenessSessionParameters = CreateLivenessSessionBodyParam & RequestParameters; -export type DeletePersonGroupPersonFaceParameters = RequestParameters; -export type GetPersonGroupPersonFaceParameters = RequestParameters; +export type DeleteLivenessSessionParameters = RequestParameters; +export type GetLivenessSessionResultParameters = RequestParameters; -export interface UpdatePersonGroupPersonFaceBodyParam { - body?: { userData?: string }; +export interface GetLivenessSessionsQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; } -export type UpdatePersonGroupPersonFaceParameters = UpdatePersonGroupPersonFaceBodyParam & +export interface GetLivenessSessionsQueryParam { + queryParameters?: GetLivenessSessionsQueryParamProperties; +} + +export type GetLivenessSessionsParameters = GetLivenessSessionsQueryParam & RequestParameters; -export interface CreateLargePersonGroupBodyParam { - body?: { - name: string; - userData?: string; - recognitionModel?: RecognitionModel; - }; +export interface GetLivenessSessionAuditEntriesQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; } -export type CreateLargePersonGroupParameters = CreateLargePersonGroupBodyParam & RequestParameters; -export type DeleteLargePersonGroupParameters = RequestParameters; +export interface GetLivenessSessionAuditEntriesQueryParam { + queryParameters?: GetLivenessSessionAuditEntriesQueryParamProperties; +} -export interface GetLargePersonGroupQueryParamProperties { - /** Return 'recognitionModel' or not. The default value is false. */ - returnRecognitionModel?: boolean; +export type GetLivenessSessionAuditEntriesParameters = + GetLivenessSessionAuditEntriesQueryParam & RequestParameters; + +export interface CreateLivenessWithVerifySessionWithVerifyImageBodyParam { + /** Request content of liveness with verify session creation. */ + body: CreateLivenessWithVerifySessionMultipartContent; } -export interface GetLargePersonGroupQueryParam { - queryParameters?: GetLargePersonGroupQueryParamProperties; +export interface CreateLivenessWithVerifySessionWithVerifyImageMediaTypesParam { + /** The content type for the operation. Always multipart/form-data for this operation. */ + contentType: "multipart/form-data"; } -export type GetLargePersonGroupParameters = GetLargePersonGroupQueryParam & RequestParameters; +export type CreateLivenessWithVerifySessionWithVerifyImageParameters = + CreateLivenessWithVerifySessionWithVerifyImageMediaTypesParam & + CreateLivenessWithVerifySessionWithVerifyImageBodyParam & + RequestParameters; -export interface UpdateLargePersonGroupBodyParam { - body?: { name?: string; userData?: string }; +export interface CreateLivenessWithVerifySessionBodyParam { + /** Body parameter. */ + body: CreateLivenessWithVerifySessionJsonContent; } -export type UpdateLargePersonGroupParameters = UpdateLargePersonGroupBodyParam & RequestParameters; +export type CreateLivenessWithVerifySessionParameters = + CreateLivenessWithVerifySessionBodyParam & RequestParameters; +export type DeleteLivenessWithVerifySessionParameters = RequestParameters; +export type GetLivenessWithVerifySessionResultParameters = RequestParameters; -export interface GetLargePersonGroupsQueryParamProperties { +export interface GetLivenessWithVerifySessionsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ top?: number; - /** Return 'recognitionModel' or not. The default value is false. */ - returnRecognitionModel?: boolean; } -export interface GetLargePersonGroupsQueryParam { - queryParameters?: GetLargePersonGroupsQueryParamProperties; +export interface GetLivenessWithVerifySessionsQueryParam { + queryParameters?: GetLivenessWithVerifySessionsQueryParamProperties; } -export type GetLargePersonGroupsParameters = GetLargePersonGroupsQueryParam & RequestParameters; -export type GetLargePersonGroupTrainingStatusParameters = RequestParameters; -export type TrainLargePersonGroupParameters = RequestParameters; +export type GetLivenessWithVerifySessionsParameters = + GetLivenessWithVerifySessionsQueryParam & RequestParameters; -export interface CreateLargePersonGroupPersonBodyParam { - body?: { name: string; userData?: string }; +export interface GetLivenessWithVerifySessionAuditEntriesQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; } -export type CreateLargePersonGroupPersonParameters = CreateLargePersonGroupPersonBodyParam & - RequestParameters; -export type DeleteLargePersonGroupPersonParameters = RequestParameters; -export type GetLargePersonGroupPersonParameters = RequestParameters; +export interface GetLivenessWithVerifySessionAuditEntriesQueryParam { + queryParameters?: GetLivenessWithVerifySessionAuditEntriesQueryParamProperties; +} -export interface UpdateLargePersonGroupPersonBodyParam { - body?: { name?: string; userData?: string }; +export type GetLivenessWithVerifySessionAuditEntriesParameters = + GetLivenessWithVerifySessionAuditEntriesQueryParam & RequestParameters; +export type GetSessionImageParameters = RequestParameters; + +export interface CreatePersonBodyParam { + body: UserDefinedFields; } -export type UpdateLargePersonGroupPersonParameters = UpdateLargePersonGroupPersonBodyParam & - RequestParameters; +export type CreatePersonParameters = CreatePersonBodyParam & RequestParameters; +export type DeletePersonParameters = RequestParameters; +export type GetPersonParameters = RequestParameters; -export interface GetLargePersonGroupPersonsQueryParamProperties { +export interface UpdatePersonBodyParam { + body: UserDefinedFieldsForUpdate; +} + +export type UpdatePersonParameters = UpdatePersonBodyParam & RequestParameters; + +export interface GetPersonsQueryParamProperties { /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ start?: string; /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ top?: number; } -export interface GetLargePersonGroupPersonsQueryParam { - queryParameters?: GetLargePersonGroupPersonsQueryParamProperties; +export interface GetPersonsQueryParam { + queryParameters?: GetPersonsQueryParamProperties; } -export type GetLargePersonGroupPersonsParameters = GetLargePersonGroupPersonsQueryParam & - RequestParameters; - -export interface AddLargePersonGroupPersonFaceFromUrlBodyParam { - body?: { url: string }; -} +export type GetPersonsParameters = GetPersonsQueryParam & RequestParameters; -export interface AddLargePersonGroupPersonFaceFromUrlQueryParamProperties { - /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ - targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ - detectionModel?: DetectionModel; - /** User-provided data attached to the face. The size limit is 1K. */ - userData?: string; +export interface GetDynamicPersonGroupReferencesQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; } -export interface AddLargePersonGroupPersonFaceFromUrlQueryParam { - queryParameters?: AddLargePersonGroupPersonFaceFromUrlQueryParamProperties; +export interface GetDynamicPersonGroupReferencesQueryParam { + queryParameters?: GetDynamicPersonGroupReferencesQueryParamProperties; } -export type AddLargePersonGroupPersonFaceFromUrlParameters = - AddLargePersonGroupPersonFaceFromUrlQueryParam & - AddLargePersonGroupPersonFaceFromUrlBodyParam & - RequestParameters; +export type GetDynamicPersonGroupReferencesParameters = + GetDynamicPersonGroupReferencesQueryParam & RequestParameters; -export interface AddLargePersonGroupPersonFaceBodyParam { +export interface AddPersonFaceBodyParam { /** * The image to be analyzed * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } -export interface AddLargePersonGroupPersonFaceQueryParamProperties { +export interface AddPersonFaceQueryParamProperties { /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ targetFace?: number[]; - /** The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. */ + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ detectionModel?: DetectionModel; /** User-provided data attached to the face. The size limit is 1K. */ userData?: string; } -export interface AddLargePersonGroupPersonFaceQueryParam { - queryParameters?: AddLargePersonGroupPersonFaceQueryParamProperties; +export interface AddPersonFaceQueryParam { + queryParameters?: AddPersonFaceQueryParamProperties; } -export interface AddLargePersonGroupPersonFaceMediaTypesParam { +export interface AddPersonFaceMediaTypesParam { /** The format of the HTTP payload. */ contentType: "application/octet-stream"; } -export type AddLargePersonGroupPersonFaceParameters = AddLargePersonGroupPersonFaceQueryParam & - AddLargePersonGroupPersonFaceMediaTypesParam & - AddLargePersonGroupPersonFaceBodyParam & +export type AddPersonFaceParameters = AddPersonFaceQueryParam & + AddPersonFaceMediaTypesParam & + AddPersonFaceBodyParam & RequestParameters; -export type DeleteLargePersonGroupPersonFaceParameters = RequestParameters; -export type GetLargePersonGroupPersonFaceParameters = RequestParameters; -export interface UpdateLargePersonGroupPersonFaceBodyParam { - body?: { userData?: string }; +export interface AddPersonFaceFromUrlBodyParam { + body: { url: string }; +} + +export interface AddPersonFaceFromUrlQueryParamProperties { + /** A face rectangle to specify the target face to be added to a person, in the format of 'targetFace=left,top,width,height'. */ + targetFace?: number[]; + /** + * The 'detectionModel' associated with the detected faceIds. Supported 'detectionModel' values include 'detection_01', 'detection_02' and 'detection_03'. The default value is 'detection_01'. + * + * Possible values: "detection_01", "detection_02", "detection_03" + */ + detectionModel?: DetectionModel; + /** User-provided data attached to the face. The size limit is 1K. */ + userData?: string; } -export type UpdateLargePersonGroupPersonFaceParameters = UpdateLargePersonGroupPersonFaceBodyParam & +export interface AddPersonFaceFromUrlQueryParam { + queryParameters?: AddPersonFaceFromUrlQueryParamProperties; +} + +export type AddPersonFaceFromUrlParameters = AddPersonFaceFromUrlQueryParam & + AddPersonFaceFromUrlBodyParam & + RequestParameters; +export type DeletePersonFaceParameters = RequestParameters; +export type GetPersonFaceParameters = RequestParameters; + +export interface UpdatePersonFaceBodyParam { + body: FaceUserData; +} + +export type UpdatePersonFaceParameters = UpdatePersonFaceBodyParam & RequestParameters; +export type GetPersonFacesParameters = RequestParameters; + +export interface CreateDynamicPersonGroupWithPersonBodyParam { + body: { name: string; userData?: string; addPersonIds: string[] }; +} + +export type CreateDynamicPersonGroupWithPersonParameters = + CreateDynamicPersonGroupWithPersonBodyParam & RequestParameters; + +export interface CreateDynamicPersonGroupBodyParam { + body: UserDefinedFields; +} + +export type CreateDynamicPersonGroupParameters = + CreateDynamicPersonGroupBodyParam & RequestParameters; +export type DeleteDynamicPersonGroupParameters = RequestParameters; +export type GetDynamicPersonGroupParameters = RequestParameters; + +export interface UpdateDynamicPersonGroupWithPersonChangesBodyParam { + body: { + name?: string; + userData?: string; + addPersonIds?: string[]; + removePersonIds?: string[]; + }; +} + +export type UpdateDynamicPersonGroupWithPersonChangesParameters = + UpdateDynamicPersonGroupWithPersonChangesBodyParam & RequestParameters; + +export interface UpdateDynamicPersonGroupBodyParam { + body: UserDefinedFieldsForUpdate; +} + +export type UpdateDynamicPersonGroupParameters = + UpdateDynamicPersonGroupBodyParam & RequestParameters; + +export interface GetDynamicPersonGroupsQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; +} + +export interface GetDynamicPersonGroupsQueryParam { + queryParameters?: GetDynamicPersonGroupsQueryParamProperties; +} + +export type GetDynamicPersonGroupsParameters = + GetDynamicPersonGroupsQueryParam & RequestParameters; + +export interface GetDynamicPersonGroupPersonsQueryParamProperties { + /** List resources greater than the "start". It contains no more than 64 characters. Default is empty. */ + start?: string; + /** The number of items to list, ranging in [1, 1000]. Default is 1000. */ + top?: number; +} + +export interface GetDynamicPersonGroupPersonsQueryParam { + queryParameters?: GetDynamicPersonGroupPersonsQueryParamProperties; +} + +export type GetDynamicPersonGroupPersonsParameters = + GetDynamicPersonGroupPersonsQueryParam & RequestParameters; diff --git a/sdk/face/ai-vision-face-rest/src/pollingHelper.ts b/sdk/face/ai-vision-face-rest/src/pollingHelper.ts index 3385c1195aa0..3eacad349776 100644 --- a/sdk/face/ai-vision-face-rest/src/pollingHelper.ts +++ b/sdk/face/ai-vision-face-rest/src/pollingHelper.ts @@ -6,7 +6,7 @@ import { AbortSignalLike } from "@azure/abort-controller"; import { CancelOnProgress, CreateHttpPollerOptions, - LongRunningOperation, + RunningOperation, OperationResponse, OperationState, createHttpPoller, @@ -47,15 +47,14 @@ import { /** * A simple poller that can be used to poll a long running operation. */ -export interface SimplePollerLike, TResult> { +export interface SimplePollerLike< + TState extends OperationState, + TResult, +> { /** * Returns true if the poller has finished polling. */ isDone(): boolean; - /** - * Returns true if the poller is stopped. - */ - isStopped(): boolean; /** * Returns the state of the operation. */ @@ -75,7 +74,9 @@ export interface SimplePollerLike, TResul /** * Returns a promise that will resolve once the underlying operation is completed. */ - pollUntilDone(pollOptions?: { abortSignal?: AbortSignalLike }): Promise; + pollUntilDone(pollOptions?: { + abortSignal?: AbortSignalLike; + }): Promise; /** * Invokes the provided callback after each polling is completed, * sending the current state of the poller's operation. @@ -106,6 +107,12 @@ export interface SimplePollerLike, TResul * @deprecated Use abortSignal to stop polling instead. */ stopPolling(): void; + + /** + * Returns true if the poller is stopped. + * @deprecated Use abortSignal status to track this instead. + */ + isStopped(): boolean; } /** @@ -116,24 +123,36 @@ export interface SimplePollerLike, TResul * @returns - A poller object to poll for operation state updates and eventually get the final response. */ export async function getLongRunningPoller< - TResult extends TrainLargeFaceListLogicalResponse | TrainLargeFaceListDefaultResponse, + TResult extends + | TrainLargeFaceListLogicalResponse + | TrainLargeFaceListDefaultResponse, >( client: Client, - initialResponse: TrainLargeFaceList202Response | TrainLargeFaceListDefaultResponse, + initialResponse: + | TrainLargeFaceList202Response + | TrainLargeFaceListDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends TrainPersonGroupLogicalResponse | TrainPersonGroupDefaultResponse, + TResult extends + | TrainPersonGroupLogicalResponse + | TrainPersonGroupDefaultResponse, >( client: Client, - initialResponse: TrainPersonGroup202Response | TrainPersonGroupDefaultResponse, + initialResponse: + | TrainPersonGroup202Response + | TrainPersonGroupDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends TrainLargePersonGroupLogicalResponse | TrainLargePersonGroupDefaultResponse, + TResult extends + | TrainLargePersonGroupLogicalResponse + | TrainLargePersonGroupDefaultResponse, >( client: Client, - initialResponse: TrainLargePersonGroup202Response | TrainLargePersonGroupDefaultResponse, + initialResponse: + | TrainLargePersonGroup202Response + | TrainLargePersonGroupDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -158,10 +177,14 @@ export async function getLongRunningPoller< options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends DeletePersonFaceLogicalResponse | DeletePersonFaceDefaultResponse, + TResult extends + | DeletePersonFaceLogicalResponse + | DeletePersonFaceDefaultResponse, >( client: Client, - initialResponse: DeletePersonFace202Response | DeletePersonFaceDefaultResponse, + initialResponse: + | DeletePersonFace202Response + | DeletePersonFaceDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -176,10 +199,14 @@ export async function getLongRunningPoller< options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends DeleteDynamicPersonGroupLogicalResponse | DeleteDynamicPersonGroupDefaultResponse, + TResult extends + | DeleteDynamicPersonGroupLogicalResponse + | DeleteDynamicPersonGroupDefaultResponse, >( client: Client, - initialResponse: DeleteDynamicPersonGroup202Response | DeleteDynamicPersonGroupDefaultResponse, + initialResponse: + | DeleteDynamicPersonGroup202Response + | DeleteDynamicPersonGroupDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -199,14 +226,17 @@ export async function getLongRunningPoller( options: CreateHttpPollerOptions> = {}, ): Promise, TResult>> { const abortController = new AbortController(); - const poller: LongRunningOperation = { + const poller: RunningOperation = { sendInitialRequest: async () => { // In the case of Rest Clients we are building the LRO poller object from a response that's the reason // we are not triggering the initial request here, just extracting the information from the // response we were provided. return getLroResponse(initialResponse); }, - sendPollRequest: async (path, sendPollRequestOptions?: { abortSignal?: AbortSignalLike }) => { + sendPollRequest: async ( + path: string, + pollOptions?: { abortSignal?: AbortSignalLike }, + ) => { // This is the callback that is going to be called to poll the service // to get the latest status. We use the client provided and the polling path // which is an opaque URL provided by caller, the service sends this in one of the following headers: operation-location, azure-asyncoperation or location @@ -214,7 +244,7 @@ export async function getLongRunningPoller( function abortListener(): void { abortController.abort(); } - const inputAbortSignal = sendPollRequestOptions?.abortSignal; + const inputAbortSignal = pollOptions?.abortSignal; const abortSignal = abortController.signal; if (inputAbortSignal?.aborted) { abortController.abort(); @@ -232,7 +262,8 @@ export async function getLongRunningPoller( inputAbortSignal?.removeEventListener("abort", abortListener); } const lroResponse = getLroResponse(response as TResult); - lroResponse.rawResponse.headers["x-ms-original-url"] = initialResponse.request.url; + lroResponse.rawResponse.headers["x-ms-original-url"] = + initialResponse.request.url; return lroResponse; }, }; @@ -244,7 +275,7 @@ export async function getLongRunningPoller( return httpPoller.isDone; }, isStopped() { - return httpPoller.isStopped; + return abortController.signal.aborted; }, getOperationState() { if (!httpPoller.operationState) { @@ -288,7 +319,9 @@ function getLroResponse( response: TResult, ): OperationResponse { if (Number.isNaN(response.status)) { - throw new TypeError(`Status code of the response is not a number. Value: ${response.status}`); + throw new TypeError( + `Status code of the response is not a number. Value: ${response.status}`, + ); } return { diff --git a/sdk/face/ai-vision-face-rest/src/responses.ts b/sdk/face/ai-vision-face-rest/src/responses.ts index d395bc5b92cc..cb11d3e3e522 100644 --- a/sdk/face/ai-vision-face-rest/src/responses.ts +++ b/sdk/face/ai-vision-face-rest/src/responses.ts @@ -11,31 +11,31 @@ import { IdentificationResultOutput, VerificationResultOutput, GroupingResultOutput, - CreateLivenessSessionResultOutput, - LivenessSessionOutput, - LivenessSessionItemOutput, - LivenessSessionAuditEntryOutput, - CreateLivenessWithVerifySessionResultOutput, - LivenessWithVerifySessionOutput, FaceListOutput, FaceListItemOutput, AddFaceResultOutput, LargeFaceListOutput, TrainingResultOutput, LargeFaceListFaceOutput, + PersonGroupOutput, CreatePersonResultOutput, + PersonGroupPersonOutput, + PersonGroupPersonFaceOutput, + LargePersonGroupOutput, + LargePersonGroupPersonOutput, + LargePersonGroupPersonFaceOutput, + CreateLivenessSessionResultOutput, + LivenessSessionOutput, + LivenessSessionItemOutput, + LivenessSessionAuditEntryOutput, + CreateLivenessWithVerifySessionResultOutput, + LivenessWithVerifySessionOutput, PersonDirectoryPersonOutput, ListGroupReferenceResultOutput, PersonDirectoryFaceOutput, ListFaceResultOutput, DynamicPersonGroupOutput, ListPersonResultOutput, - PersonGroupOutput, - PersonGroupPersonOutput, - PersonGroupPersonFaceOutput, - LargePersonGroupOutput, - LargePersonGroupPersonOutput, - LargePersonGroupPersonFaceOutput, } from "./outputModels.js"; /** A successful call returns the long running operation status. */ @@ -89,6 +89,23 @@ export interface DetectDefaultResponse extends HttpResponse { headers: RawHttpHeaders & DetectDefaultHeaders; } +/** A successful call returns an array of face entries ranked by face rectangle size in descending order. An empty response indicates no faces detected. */ +export interface DetectFromSessionImageId200Response extends HttpResponse { + status: "200"; + body: Array; +} + +export interface DetectFromSessionImageIdDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface DetectFromSessionImageIdDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & DetectFromSessionImageIdDefaultHeaders; +} + /** A successful call returns an array of the most similar faces represented in faceId if the input parameter is faceIds or persistedFaceId if the input parameter is faceListId or largeFaceListId. */ export interface FindSimilar200Response extends HttpResponse { status: "200"; @@ -134,7 +151,8 @@ export interface FindSimilarFromLargeFaceListDefaultHeaders { "x-ms-error-code"?: string; } -export interface FindSimilarFromLargeFaceListDefaultResponse extends HttpResponse { +export interface FindSimilarFromLargeFaceListDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & FindSimilarFromLargeFaceListDefaultHeaders; @@ -168,7 +186,8 @@ export interface IdentifyFromLargePersonGroupDefaultHeaders { "x-ms-error-code"?: string; } -export interface IdentifyFromLargePersonGroupDefaultResponse extends HttpResponse { +export interface IdentifyFromLargePersonGroupDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & IdentifyFromLargePersonGroupDefaultHeaders; @@ -185,14 +204,16 @@ export interface IdentifyFromPersonDirectoryDefaultHeaders { "x-ms-error-code"?: string; } -export interface IdentifyFromPersonDirectoryDefaultResponse extends HttpResponse { +export interface IdentifyFromPersonDirectoryDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & IdentifyFromPersonDirectoryDefaultHeaders; } /** A successful call returns the identified candidate person(s) for each query face. */ -export interface IdentifyFromDynamicPersonGroup200Response extends HttpResponse { +export interface IdentifyFromDynamicPersonGroup200Response + extends HttpResponse { status: "200"; body: Array; } @@ -202,7 +223,8 @@ export interface IdentifyFromDynamicPersonGroupDefaultHeaders { "x-ms-error-code"?: string; } -export interface IdentifyFromDynamicPersonGroupDefaultResponse extends HttpResponse { +export interface IdentifyFromDynamicPersonGroupDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & IdentifyFromDynamicPersonGroupDefaultHeaders; @@ -253,7 +275,8 @@ export interface VerifyFromLargePersonGroupDefaultHeaders { "x-ms-error-code"?: string; } -export interface VerifyFromLargePersonGroupDefaultResponse extends HttpResponse { +export interface VerifyFromLargePersonGroupDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & VerifyFromLargePersonGroupDefaultHeaders; @@ -293,192 +316,6 @@ export interface GroupDefaultResponse extends HttpResponse { headers: RawHttpHeaders & GroupDefaultHeaders; } -/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ -export interface CreateLivenessSession200Response extends HttpResponse { - status: "200"; - body: CreateLivenessSessionResultOutput; -} - -export interface CreateLivenessSessionDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface CreateLivenessSessionDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateLivenessSessionDefaultHeaders; -} - -/** The request has succeeded. */ -export interface DeleteLivenessSession200Response extends HttpResponse { - status: "200"; -} - -export interface DeleteLivenessSessionDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface DeleteLivenessSessionDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteLivenessSessionDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessSessionResult200Response extends HttpResponse { - status: "200"; - body: LivenessSessionOutput; -} - -export interface GetLivenessSessionResultDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessSessionResultDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessSessionResultDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessSessions200Response extends HttpResponse { - status: "200"; - body: Array; -} - -export interface GetLivenessSessionsDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessSessionsDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessSessionsDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessSessionAuditEntries200Response extends HttpResponse { - status: "200"; - body: Array; -} - -export interface GetLivenessSessionAuditEntriesDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessSessionAuditEntriesDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessSessionAuditEntriesDefaultHeaders; -} - -/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ -export interface CreateLivenessWithVerifySessionWithVerifyImage200Response extends HttpResponse { - status: "200"; - body: CreateLivenessWithVerifySessionResultOutput; -} - -export interface CreateLivenessWithVerifySessionWithVerifyImageDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse - extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateLivenessWithVerifySessionWithVerifyImageDefaultHeaders; -} - -/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ -export interface CreateLivenessWithVerifySession200Response extends HttpResponse { - status: "200"; - body: CreateLivenessWithVerifySessionResultOutput; -} - -export interface CreateLivenessWithVerifySessionDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface CreateLivenessWithVerifySessionDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateLivenessWithVerifySessionDefaultHeaders; -} - -/** The request has succeeded. */ -export interface DeleteLivenessWithVerifySession200Response extends HttpResponse { - status: "200"; -} - -export interface DeleteLivenessWithVerifySessionDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface DeleteLivenessWithVerifySessionDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteLivenessWithVerifySessionDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessWithVerifySessionResult200Response extends HttpResponse { - status: "200"; - body: LivenessWithVerifySessionOutput; -} - -export interface GetLivenessWithVerifySessionResultDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessWithVerifySessionResultDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessWithVerifySessionResultDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessWithVerifySessions200Response extends HttpResponse { - status: "200"; - body: Array; -} - -export interface GetLivenessWithVerifySessionsDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessWithVerifySessionsDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessWithVerifySessionsDefaultHeaders; -} - -/** The request has succeeded. */ -export interface GetLivenessWithVerifySessionAuditEntries200Response extends HttpResponse { - status: "200"; - body: Array; -} - -export interface GetLivenessWithVerifySessionAuditEntriesDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetLivenessWithVerifySessionAuditEntriesDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLivenessWithVerifySessionAuditEntriesDefaultHeaders; -} - /** The request has succeeded. */ export interface CreateFaceList200Response extends HttpResponse { status: "200"; @@ -694,7 +531,8 @@ export interface GetLargeFaceListsDefaultResponse extends HttpResponse { } /** A successful call returns the Large Face List's training status. */ -export interface GetLargeFaceListTrainingStatus200Response extends HttpResponse { +export interface GetLargeFaceListTrainingStatus200Response + extends HttpResponse { status: "200"; body: TrainingResultOutput; } @@ -704,7 +542,8 @@ export interface GetLargeFaceListTrainingStatusDefaultHeaders { "x-ms-error-code"?: string; } -export interface GetLargeFaceListTrainingStatusDefaultResponse extends HttpResponse { +export interface GetLargeFaceListTrainingStatusDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & GetLargeFaceListTrainingStatusDefaultHeaders; @@ -747,7 +586,8 @@ export interface AddLargeFaceListFaceFromUrlDefaultHeaders { "x-ms-error-code"?: string; } -export interface AddLargeFaceListFaceFromUrlDefaultResponse extends HttpResponse { +export interface AddLargeFaceListFaceFromUrlDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; headers: RawHttpHeaders & AddLargeFaceListFaceFromUrlDefaultHeaders; @@ -836,1001 +676,1254 @@ export interface GetLargeFaceListFacesDefaultResponse extends HttpResponse { headers: RawHttpHeaders & GetLargeFaceListFacesDefaultHeaders; } -export interface CreatePerson202Headers { - "operation-location": string; - location: string; -} - -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ -export interface CreatePerson202Response extends HttpResponse { - status: "202"; - body: CreatePersonResultOutput; - headers: RawHttpHeaders & CreatePerson202Headers; +/** The request has succeeded. */ +export interface CreatePersonGroup200Response extends HttpResponse { + status: "200"; } -export interface CreatePersonDefaultHeaders { +export interface CreatePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreatePersonDefaultResponse extends HttpResponse { +export interface CreatePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreatePersonDefaultHeaders; + headers: RawHttpHeaders & CreatePersonGroupDefaultHeaders; } -/** The final response for long-running createPerson operation */ -export interface CreatePersonLogicalResponse extends HttpResponse { +/** The request has succeeded. */ +export interface DeletePersonGroup200Response extends HttpResponse { status: "200"; - body: CreatePersonResultOutput; -} - -export interface DeletePerson202Headers { - "operation-location": string; -} - -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ -export interface DeletePerson202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & DeletePerson202Headers; } -export interface DeletePersonDefaultHeaders { +export interface DeletePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeletePersonDefaultResponse extends HttpResponse { +export interface DeletePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeletePersonDefaultHeaders; -} - -/** The final response for long-running deletePerson operation */ -export interface DeletePersonLogicalResponse extends HttpResponse { - status: "200"; + headers: RawHttpHeaders & DeletePersonGroupDefaultHeaders; } -/** A successful call returns the person's information. */ -export interface GetPerson200Response extends HttpResponse { +/** A successful call returns the Person Group's information. */ +export interface GetPersonGroup200Response extends HttpResponse { status: "200"; - body: PersonDirectoryPersonOutput; + body: PersonGroupOutput; } -export interface GetPersonDefaultHeaders { +export interface GetPersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonDefaultResponse extends HttpResponse { +export interface GetPersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonDefaultHeaders; + headers: RawHttpHeaders & GetPersonGroupDefaultHeaders; } /** The request has succeeded. */ -export interface UpdatePerson200Response extends HttpResponse { +export interface UpdatePersonGroup200Response extends HttpResponse { status: "200"; } -export interface UpdatePersonDefaultHeaders { +export interface UpdatePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdatePersonDefaultResponse extends HttpResponse { +export interface UpdatePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdatePersonDefaultHeaders; + headers: RawHttpHeaders & UpdatePersonGroupDefaultHeaders; } -/** A successful call returns an array of Person Directory Persons contained in the Dynamic Person Group. */ -export interface GetPersons200Response extends HttpResponse { +/** A successful call returns an array of Person Groups and their information (personGroupId, name and userData). */ +export interface GetPersonGroups200Response extends HttpResponse { status: "200"; - body: Array; + body: Array; } -export interface GetPersonsDefaultHeaders { +export interface GetPersonGroupsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonsDefaultResponse extends HttpResponse { +export interface GetPersonGroupsDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonsDefaultHeaders; + headers: RawHttpHeaders & GetPersonGroupsDefaultHeaders; } -/** A successful call returns an array of dynamicPersonGroups information that reference the provided personId. */ -export interface GetDynamicPersonGroupReferences200Response extends HttpResponse { +/** A successful call returns the Person Group's training status. */ +export interface GetPersonGroupTrainingStatus200Response extends HttpResponse { status: "200"; - body: ListGroupReferenceResultOutput; + body: TrainingResultOutput; } -export interface GetDynamicPersonGroupReferencesDefaultHeaders { +export interface GetPersonGroupTrainingStatusDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetDynamicPersonGroupReferencesDefaultResponse extends HttpResponse { +export interface GetPersonGroupTrainingStatusDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetDynamicPersonGroupReferencesDefaultHeaders; + headers: RawHttpHeaders & GetPersonGroupTrainingStatusDefaultHeaders; } -export interface AddPersonFace202Headers { +export interface TrainPersonGroup202Headers { "operation-location": string; - location: string; } -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ -export interface AddPersonFace202Response extends HttpResponse { +/** A successful call returns an empty response body. */ +export interface TrainPersonGroup202Response extends HttpResponse { status: "202"; - body: AddFaceResultOutput; - headers: RawHttpHeaders & AddPersonFace202Headers; + headers: RawHttpHeaders & TrainPersonGroup202Headers; } -export interface AddPersonFaceDefaultHeaders { +export interface TrainPersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddPersonFaceDefaultResponse extends HttpResponse { +export interface TrainPersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddPersonFaceDefaultHeaders; + headers: RawHttpHeaders & TrainPersonGroupDefaultHeaders; } -/** The final response for long-running addPersonFace operation */ -export interface AddPersonFaceLogicalResponse extends HttpResponse { +/** The final response for long-running trainPersonGroup operation */ +export interface TrainPersonGroupLogicalResponse extends HttpResponse { status: "200"; - body: AddFaceResultOutput; -} - -export interface AddPersonFaceFromUrl202Headers { - "operation-location": string; - location: string; } -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ -export interface AddPersonFaceFromUrl202Response extends HttpResponse { - status: "202"; - body: AddFaceResultOutput; - headers: RawHttpHeaders & AddPersonFaceFromUrl202Headers; +/** A successful call returns a new personId created. */ +export interface CreatePersonGroupPerson200Response extends HttpResponse { + status: "200"; + body: CreatePersonResultOutput; } -export interface AddPersonFaceFromUrlDefaultHeaders { +export interface CreatePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddPersonFaceFromUrlDefaultResponse extends HttpResponse { +export interface CreatePersonGroupPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddPersonFaceFromUrlDefaultHeaders; + headers: RawHttpHeaders & CreatePersonGroupPersonDefaultHeaders; } -/** The final response for long-running addPersonFaceFromUrl operation */ -export interface AddPersonFaceFromUrlLogicalResponse extends HttpResponse { +/** The request has succeeded. */ +export interface DeletePersonGroupPerson200Response extends HttpResponse { status: "200"; - body: AddFaceResultOutput; -} - -export interface DeletePersonFace202Headers { - "operation-location": string; -} - -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ -export interface DeletePersonFace202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & DeletePersonFace202Headers; } -export interface DeletePersonFaceDefaultHeaders { +export interface DeletePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeletePersonFaceDefaultResponse extends HttpResponse { +export interface DeletePersonGroupPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeletePersonFaceDefaultHeaders; -} - -/** The final response for long-running deletePersonFace operation */ -export interface DeletePersonFaceLogicalResponse extends HttpResponse { - status: "200"; + headers: RawHttpHeaders & DeletePersonGroupPersonDefaultHeaders; } -/** A successful call returns target persisted face's information (persistedFaceId and userData). */ -export interface GetPersonFace200Response extends HttpResponse { +/** A successful call returns the person's information. */ +export interface GetPersonGroupPerson200Response extends HttpResponse { status: "200"; - body: PersonDirectoryFaceOutput; + body: PersonGroupPersonOutput; } -export interface GetPersonFaceDefaultHeaders { +export interface GetPersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonFaceDefaultResponse extends HttpResponse { +export interface GetPersonGroupPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonFaceDefaultHeaders; + headers: RawHttpHeaders & GetPersonGroupPersonDefaultHeaders; } /** The request has succeeded. */ -export interface UpdatePersonFace200Response extends HttpResponse { +export interface UpdatePersonGroupPerson200Response extends HttpResponse { status: "200"; } -export interface UpdatePersonFaceDefaultHeaders { +export interface UpdatePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdatePersonFaceDefaultResponse extends HttpResponse { +export interface UpdatePersonGroupPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdatePersonFaceDefaultHeaders; + headers: RawHttpHeaders & UpdatePersonGroupPersonDefaultHeaders; } -/** A successful call returns an array of persistedFaceIds and and a person ID. */ -export interface GetPersonFaces200Response extends HttpResponse { +/** A successful call returns an array of person information that belong to the Person Group. */ +export interface GetPersonGroupPersons200Response extends HttpResponse { status: "200"; - body: ListFaceResultOutput; + body: Array; } -export interface GetPersonFacesDefaultHeaders { +export interface GetPersonGroupPersonsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonFacesDefaultResponse extends HttpResponse { +export interface GetPersonGroupPersonsDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonFacesDefaultHeaders; -} - -export interface CreateDynamicPersonGroupWithPerson202Headers { - "operation-location": string; + headers: RawHttpHeaders & GetPersonGroupPersonsDefaultHeaders; } -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ -export interface CreateDynamicPersonGroupWithPerson202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & CreateDynamicPersonGroupWithPerson202Headers; +/** A successful call returns a new persistedFaceId. */ +export interface AddPersonGroupPersonFaceFromUrl200Response + extends HttpResponse { + status: "200"; + body: AddFaceResultOutput; } -export interface CreateDynamicPersonGroupWithPersonDefaultHeaders { +export interface AddPersonGroupPersonFaceFromUrlDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreateDynamicPersonGroupWithPersonDefaultResponse extends HttpResponse { +export interface AddPersonGroupPersonFaceFromUrlDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateDynamicPersonGroupWithPersonDefaultHeaders; -} - -/** The final response for long-running createDynamicPersonGroupWithPerson operation */ -export interface CreateDynamicPersonGroupWithPersonLogicalResponse extends HttpResponse { - status: "200"; + headers: RawHttpHeaders & AddPersonGroupPersonFaceFromUrlDefaultHeaders; } -/** The request has succeeded. */ -export interface CreateDynamicPersonGroup200Response extends HttpResponse { +/** A successful call returns a new persistedFaceId. */ +export interface AddPersonGroupPersonFace200Response extends HttpResponse { status: "200"; + body: AddFaceResultOutput; } -export interface CreateDynamicPersonGroupDefaultHeaders { +export interface AddPersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreateDynamicPersonGroupDefaultResponse extends HttpResponse { +export interface AddPersonGroupPersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateDynamicPersonGroupDefaultHeaders; -} - -export interface DeleteDynamicPersonGroup202Headers { - "operation-location": string; + headers: RawHttpHeaders & AddPersonGroupPersonFaceDefaultHeaders; } -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ -export interface DeleteDynamicPersonGroup202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & DeleteDynamicPersonGroup202Headers; +/** The request has succeeded. */ +export interface DeletePersonGroupPersonFace200Response extends HttpResponse { + status: "200"; } -export interface DeleteDynamicPersonGroupDefaultHeaders { +export interface DeletePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeleteDynamicPersonGroupDefaultResponse extends HttpResponse { +export interface DeletePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteDynamicPersonGroupDefaultHeaders; -} - -/** The final response for long-running deleteDynamicPersonGroup operation */ -export interface DeleteDynamicPersonGroupLogicalResponse extends HttpResponse { - status: "200"; + headers: RawHttpHeaders & DeletePersonGroupPersonFaceDefaultHeaders; } -/** A successful call returns the Dynamic Person Group's information. */ -export interface GetDynamicPersonGroup200Response extends HttpResponse { +/** A successful call returns target persisted face's information (persistedFaceId and userData). */ +export interface GetPersonGroupPersonFace200Response extends HttpResponse { status: "200"; - body: DynamicPersonGroupOutput; + body: PersonGroupPersonFaceOutput; } -export interface GetDynamicPersonGroupDefaultHeaders { +export interface GetPersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetDynamicPersonGroupDefaultResponse extends HttpResponse { +export interface GetPersonGroupPersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetDynamicPersonGroupDefaultHeaders; -} - -export interface UpdateDynamicPersonGroupWithPersonChanges202Headers { - "operation-location": string; + headers: RawHttpHeaders & GetPersonGroupPersonFaceDefaultHeaders; } -/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ -export interface UpdateDynamicPersonGroupWithPersonChanges202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & UpdateDynamicPersonGroupWithPersonChanges202Headers; +/** The request has succeeded. */ +export interface UpdatePersonGroupPersonFace200Response extends HttpResponse { + status: "200"; } -export interface UpdateDynamicPersonGroupWithPersonChangesDefaultHeaders { +export interface UpdatePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdateDynamicPersonGroupWithPersonChangesDefaultResponse extends HttpResponse { +export interface UpdatePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdateDynamicPersonGroupWithPersonChangesDefaultHeaders; -} - -/** The final response for long-running updateDynamicPersonGroupWithPersonChanges operation */ -export interface UpdateDynamicPersonGroupWithPersonChangesLogicalResponse extends HttpResponse { - status: "200"; + headers: RawHttpHeaders & UpdatePersonGroupPersonFaceDefaultHeaders; } /** The request has succeeded. */ -export interface UpdateDynamicPersonGroup200Response extends HttpResponse { +export interface CreateLargePersonGroup200Response extends HttpResponse { status: "200"; } -export interface UpdateDynamicPersonGroupDefaultHeaders { +export interface CreateLargePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdateDynamicPersonGroupDefaultResponse extends HttpResponse { +export interface CreateLargePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdateDynamicPersonGroupDefaultHeaders; + headers: RawHttpHeaders & CreateLargePersonGroupDefaultHeaders; } -/** A successful call returns an array of Dynamic Person Groups and their information (dynamicPersonGroupId, name and userData). */ -export interface GetDynamicPersonGroups200Response extends HttpResponse { +/** The request has succeeded. */ +export interface DeleteLargePersonGroup200Response extends HttpResponse { status: "200"; - body: Array; } -export interface GetDynamicPersonGroupsDefaultHeaders { +export interface DeleteLargePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetDynamicPersonGroupsDefaultResponse extends HttpResponse { +export interface DeleteLargePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetDynamicPersonGroupsDefaultHeaders; + headers: RawHttpHeaders & DeleteLargePersonGroupDefaultHeaders; } -/** A successful call returns an array of person information in the Person Directory. */ -export interface GetDynamicPersonGroupPersons200Response extends HttpResponse { +/** A successful call returns the Large Person Group's information. */ +export interface GetLargePersonGroup200Response extends HttpResponse { status: "200"; - body: ListPersonResultOutput; + body: LargePersonGroupOutput; } -export interface GetDynamicPersonGroupPersonsDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface GetDynamicPersonGroupPersonsDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetDynamicPersonGroupPersonsDefaultHeaders; -} - -/** The request has succeeded. */ -export interface CreatePersonGroup200Response extends HttpResponse { - status: "200"; -} - -export interface CreatePersonGroupDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface CreatePersonGroupDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreatePersonGroupDefaultHeaders; -} - -/** The request has succeeded. */ -export interface DeletePersonGroup200Response extends HttpResponse { - status: "200"; -} - -export interface DeletePersonGroupDefaultHeaders { - /** String error code indicating what went wrong. */ - "x-ms-error-code"?: string; -} - -export interface DeletePersonGroupDefaultResponse extends HttpResponse { - status: string; - body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeletePersonGroupDefaultHeaders; -} - -/** A successful call returns the Person Group's information. */ -export interface GetPersonGroup200Response extends HttpResponse { - status: "200"; - body: PersonGroupOutput; -} - -export interface GetPersonGroupDefaultHeaders { +export interface GetLargePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupDefaultHeaders; } /** The request has succeeded. */ -export interface UpdatePersonGroup200Response extends HttpResponse { +export interface UpdateLargePersonGroup200Response extends HttpResponse { status: "200"; } -export interface UpdatePersonGroupDefaultHeaders { +export interface UpdateLargePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdatePersonGroupDefaultResponse extends HttpResponse { +export interface UpdateLargePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdatePersonGroupDefaultHeaders; + headers: RawHttpHeaders & UpdateLargePersonGroupDefaultHeaders; } -/** A successful call returns an array of Person Groups and their information (personGroupId, name and userData). */ -export interface GetPersonGroups200Response extends HttpResponse { +/** A successful call returns an array of Large Person Groups and their information (largePersonGroupId, name and userData). */ +export interface GetLargePersonGroups200Response extends HttpResponse { status: "200"; - body: Array; + body: Array; } -export interface GetPersonGroupsDefaultHeaders { +export interface GetLargePersonGroupsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupsDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupsDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupsDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupsDefaultHeaders; } -/** A successful call returns the Person Group's training status. */ -export interface GetPersonGroupTrainingStatus200Response extends HttpResponse { +/** A successful call returns the Large Person Group's training status. */ +export interface GetLargePersonGroupTrainingStatus200Response + extends HttpResponse { status: "200"; body: TrainingResultOutput; } -export interface GetPersonGroupTrainingStatusDefaultHeaders { +export interface GetLargePersonGroupTrainingStatusDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupTrainingStatusDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupTrainingStatusDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupTrainingStatusDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupTrainingStatusDefaultHeaders; } -export interface TrainPersonGroup202Headers { +export interface TrainLargePersonGroup202Headers { "operation-location": string; } /** A successful call returns an empty response body. */ -export interface TrainPersonGroup202Response extends HttpResponse { +export interface TrainLargePersonGroup202Response extends HttpResponse { status: "202"; - headers: RawHttpHeaders & TrainPersonGroup202Headers; + headers: RawHttpHeaders & TrainLargePersonGroup202Headers; } -export interface TrainPersonGroupDefaultHeaders { +export interface TrainLargePersonGroupDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface TrainPersonGroupDefaultResponse extends HttpResponse { +export interface TrainLargePersonGroupDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & TrainPersonGroupDefaultHeaders; + headers: RawHttpHeaders & TrainLargePersonGroupDefaultHeaders; } -/** The final response for long-running trainPersonGroup operation */ -export interface TrainPersonGroupLogicalResponse extends HttpResponse { +/** The final response for long-running trainLargePersonGroup operation */ +export interface TrainLargePersonGroupLogicalResponse extends HttpResponse { status: "200"; } /** A successful call returns a new personId created. */ -export interface CreatePersonGroupPerson200Response extends HttpResponse { +export interface CreateLargePersonGroupPerson200Response extends HttpResponse { status: "200"; body: CreatePersonResultOutput; } -export interface CreatePersonGroupPersonDefaultHeaders { +export interface CreateLargePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreatePersonGroupPersonDefaultResponse extends HttpResponse { +export interface CreateLargePersonGroupPersonDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreatePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & CreateLargePersonGroupPersonDefaultHeaders; } /** The request has succeeded. */ -export interface DeletePersonGroupPerson200Response extends HttpResponse { +export interface DeleteLargePersonGroupPerson200Response extends HttpResponse { status: "200"; } -export interface DeletePersonGroupPersonDefaultHeaders { +export interface DeleteLargePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeletePersonGroupPersonDefaultResponse extends HttpResponse { +export interface DeleteLargePersonGroupPersonDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeletePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & DeleteLargePersonGroupPersonDefaultHeaders; } /** A successful call returns the person's information. */ -export interface GetPersonGroupPerson200Response extends HttpResponse { +export interface GetLargePersonGroupPerson200Response extends HttpResponse { status: "200"; - body: PersonGroupPersonOutput; + body: LargePersonGroupPersonOutput; } -export interface GetPersonGroupPersonDefaultHeaders { +export interface GetLargePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupPersonDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupPersonDefaultHeaders; } /** The request has succeeded. */ -export interface UpdatePersonGroupPerson200Response extends HttpResponse { +export interface UpdateLargePersonGroupPerson200Response extends HttpResponse { status: "200"; } -export interface UpdatePersonGroupPersonDefaultHeaders { +export interface UpdateLargePersonGroupPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdatePersonGroupPersonDefaultResponse extends HttpResponse { +export interface UpdateLargePersonGroupPersonDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdatePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & UpdateLargePersonGroupPersonDefaultHeaders; } -/** A successful call returns an array of person information that belong to the Person Group. */ -export interface GetPersonGroupPersons200Response extends HttpResponse { +/** A successful call returns an array of person information that belong to the Large Person Group. */ +export interface GetLargePersonGroupPersons200Response extends HttpResponse { status: "200"; - body: Array; + body: Array; } -export interface GetPersonGroupPersonsDefaultHeaders { +export interface GetLargePersonGroupPersonsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupPersonsDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupPersonsDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupPersonsDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupPersonsDefaultHeaders; } /** A successful call returns a new persistedFaceId. */ -export interface AddPersonGroupPersonFaceFromUrl200Response extends HttpResponse { +export interface AddLargePersonGroupPersonFaceFromUrl200Response + extends HttpResponse { status: "200"; body: AddFaceResultOutput; } -export interface AddPersonGroupPersonFaceFromUrlDefaultHeaders { +export interface AddLargePersonGroupPersonFaceFromUrlDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddPersonGroupPersonFaceFromUrlDefaultResponse extends HttpResponse { +export interface AddLargePersonGroupPersonFaceFromUrlDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddPersonGroupPersonFaceFromUrlDefaultHeaders; + headers: RawHttpHeaders & AddLargePersonGroupPersonFaceFromUrlDefaultHeaders; } /** A successful call returns a new persistedFaceId. */ -export interface AddPersonGroupPersonFace200Response extends HttpResponse { +export interface AddLargePersonGroupPersonFace200Response extends HttpResponse { status: "200"; body: AddFaceResultOutput; } -export interface AddPersonGroupPersonFaceDefaultHeaders { +export interface AddLargePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddPersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface AddLargePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddPersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & AddLargePersonGroupPersonFaceDefaultHeaders; } /** The request has succeeded. */ -export interface DeletePersonGroupPersonFace200Response extends HttpResponse { +export interface DeleteLargePersonGroupPersonFace200Response + extends HttpResponse { status: "200"; } -export interface DeletePersonGroupPersonFaceDefaultHeaders { +export interface DeleteLargePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeletePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface DeleteLargePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeletePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & DeleteLargePersonGroupPersonFaceDefaultHeaders; } /** A successful call returns target persisted face's information (persistedFaceId and userData). */ -export interface GetPersonGroupPersonFace200Response extends HttpResponse { +export interface GetLargePersonGroupPersonFace200Response extends HttpResponse { status: "200"; - body: PersonGroupPersonFaceOutput; + body: LargePersonGroupPersonFaceOutput; } -export interface GetPersonGroupPersonFaceDefaultHeaders { +export interface GetLargePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetPersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface GetLargePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetPersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & GetLargePersonGroupPersonFaceDefaultHeaders; } /** The request has succeeded. */ -export interface UpdatePersonGroupPersonFace200Response extends HttpResponse { +export interface UpdateLargePersonGroupPersonFace200Response + extends HttpResponse { status: "200"; } -export interface UpdatePersonGroupPersonFaceDefaultHeaders { +export interface UpdateLargePersonGroupPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdatePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface UpdateLargePersonGroupPersonFaceDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdatePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & UpdateLargePersonGroupPersonFaceDefaultHeaders; } -/** The request has succeeded. */ -export interface CreateLargePersonGroup200Response extends HttpResponse { +/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ +export interface CreateLivenessSession200Response extends HttpResponse { status: "200"; + body: CreateLivenessSessionResultOutput; } -export interface CreateLargePersonGroupDefaultHeaders { +export interface CreateLivenessSessionDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreateLargePersonGroupDefaultResponse extends HttpResponse { +export interface CreateLivenessSessionDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateLargePersonGroupDefaultHeaders; + headers: RawHttpHeaders & CreateLivenessSessionDefaultHeaders; } /** The request has succeeded. */ -export interface DeleteLargePersonGroup200Response extends HttpResponse { +export interface DeleteLivenessSession200Response extends HttpResponse { status: "200"; } -export interface DeleteLargePersonGroupDefaultHeaders { +export interface DeleteLivenessSessionDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeleteLargePersonGroupDefaultResponse extends HttpResponse { +export interface DeleteLivenessSessionDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteLargePersonGroupDefaultHeaders; + headers: RawHttpHeaders & DeleteLivenessSessionDefaultHeaders; } -/** A successful call returns the Large Person Group's information. */ -export interface GetLargePersonGroup200Response extends HttpResponse { +/** The request has succeeded. */ +export interface GetLivenessSessionResult200Response extends HttpResponse { status: "200"; - body: LargePersonGroupOutput; + body: LivenessSessionOutput; } -export interface GetLargePersonGroupDefaultHeaders { +export interface GetLivenessSessionResultDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupDefaultResponse extends HttpResponse { +export interface GetLivenessSessionResultDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupDefaultHeaders; + headers: RawHttpHeaders & GetLivenessSessionResultDefaultHeaders; } /** The request has succeeded. */ -export interface UpdateLargePersonGroup200Response extends HttpResponse { +export interface GetLivenessSessions200Response extends HttpResponse { status: "200"; + body: Array; } -export interface UpdateLargePersonGroupDefaultHeaders { +export interface GetLivenessSessionsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdateLargePersonGroupDefaultResponse extends HttpResponse { +export interface GetLivenessSessionsDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdateLargePersonGroupDefaultHeaders; + headers: RawHttpHeaders & GetLivenessSessionsDefaultHeaders; } -/** A successful call returns an array of Large Person Groups and their information (largePersonGroupId, name and userData). */ -export interface GetLargePersonGroups200Response extends HttpResponse { +/** The request has succeeded. */ +export interface GetLivenessSessionAuditEntries200Response + extends HttpResponse { status: "200"; - body: Array; + body: Array; } -export interface GetLargePersonGroupsDefaultHeaders { +export interface GetLivenessSessionAuditEntriesDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupsDefaultResponse extends HttpResponse { +export interface GetLivenessSessionAuditEntriesDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupsDefaultHeaders; + headers: RawHttpHeaders & GetLivenessSessionAuditEntriesDefaultHeaders; } -/** A successful call returns the Large Person Group's training status. */ -export interface GetLargePersonGroupTrainingStatus200Response extends HttpResponse { +/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ +export interface CreateLivenessWithVerifySessionWithVerifyImage200Response + extends HttpResponse { status: "200"; - body: TrainingResultOutput; + body: CreateLivenessWithVerifySessionResultOutput; } -export interface GetLargePersonGroupTrainingStatusDefaultHeaders { +export interface CreateLivenessWithVerifySessionWithVerifyImageDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupTrainingStatusDefaultResponse extends HttpResponse { +export interface CreateLivenessWithVerifySessionWithVerifyImageDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupTrainingStatusDefaultHeaders; + headers: RawHttpHeaders & + CreateLivenessWithVerifySessionWithVerifyImageDefaultHeaders; } -export interface TrainLargePersonGroup202Headers { - "operation-location": string; +/** A successful call create a session for a client device and provide an authorization token for use by the client application for a limited purpose and time. */ +export interface CreateLivenessWithVerifySession200Response + extends HttpResponse { + status: "200"; + body: CreateLivenessWithVerifySessionResultOutput; } -/** A successful call returns an empty response body. */ -export interface TrainLargePersonGroup202Response extends HttpResponse { - status: "202"; - headers: RawHttpHeaders & TrainLargePersonGroup202Headers; -} +export interface CreateLivenessWithVerifySessionDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} -export interface TrainLargePersonGroupDefaultHeaders { +export interface CreateLivenessWithVerifySessionDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & CreateLivenessWithVerifySessionDefaultHeaders; +} + +/** The request has succeeded. */ +export interface DeleteLivenessWithVerifySession200Response + extends HttpResponse { + status: "200"; +} + +export interface DeleteLivenessWithVerifySessionDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface TrainLargePersonGroupDefaultResponse extends HttpResponse { +export interface DeleteLivenessWithVerifySessionDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & TrainLargePersonGroupDefaultHeaders; + headers: RawHttpHeaders & DeleteLivenessWithVerifySessionDefaultHeaders; } -/** The final response for long-running trainLargePersonGroup operation */ -export interface TrainLargePersonGroupLogicalResponse extends HttpResponse { +/** The request has succeeded. */ +export interface GetLivenessWithVerifySessionResult200Response + extends HttpResponse { status: "200"; + body: LivenessWithVerifySessionOutput; } -/** A successful call returns a new personId created. */ -export interface CreateLargePersonGroupPerson200Response extends HttpResponse { +export interface GetLivenessWithVerifySessionResultDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetLivenessWithVerifySessionResultDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetLivenessWithVerifySessionResultDefaultHeaders; +} + +/** The request has succeeded. */ +export interface GetLivenessWithVerifySessions200Response extends HttpResponse { status: "200"; - body: CreatePersonResultOutput; + body: Array; } -export interface CreateLargePersonGroupPersonDefaultHeaders { +export interface GetLivenessWithVerifySessionsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface CreateLargePersonGroupPersonDefaultResponse extends HttpResponse { +export interface GetLivenessWithVerifySessionsDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & CreateLargePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & GetLivenessWithVerifySessionsDefaultHeaders; } /** The request has succeeded. */ -export interface DeleteLargePersonGroupPerson200Response extends HttpResponse { +export interface GetLivenessWithVerifySessionAuditEntries200Response + extends HttpResponse { status: "200"; + body: Array; } -export interface DeleteLargePersonGroupPersonDefaultHeaders { +export interface GetLivenessWithVerifySessionAuditEntriesDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeleteLargePersonGroupPersonDefaultResponse extends HttpResponse { +export interface GetLivenessWithVerifySessionAuditEntriesDefaultResponse + extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteLargePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & + GetLivenessWithVerifySessionAuditEntriesDefaultHeaders; +} + +export interface GetSessionImage200Headers { + /** The format of the HTTP payload. */ + "content-type": "application/octet-stream"; +} + +/** The request has succeeded. */ +export interface GetSessionImage200Response extends HttpResponse { + status: "200"; + /** Value may contain any sequence of octets */ + body: Uint8Array; + headers: RawHttpHeaders & GetSessionImage200Headers; +} + +export interface GetSessionImageDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetSessionImageDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetSessionImageDefaultHeaders; +} + +export interface CreatePerson202Headers { + "operation-location": string; + location: string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ +export interface CreatePerson202Response extends HttpResponse { + status: "202"; + body: CreatePersonResultOutput; + headers: RawHttpHeaders & CreatePerson202Headers; +} + +export interface CreatePersonDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface CreatePersonDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & CreatePersonDefaultHeaders; +} + +/** The final response for long-running createPerson operation */ +export interface CreatePersonLogicalResponse extends HttpResponse { + status: "200"; + body: CreatePersonResultOutput; +} + +export interface DeletePerson202Headers { + "operation-location": string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ +export interface DeletePerson202Response extends HttpResponse { + status: "202"; + headers: RawHttpHeaders & DeletePerson202Headers; +} + +export interface DeletePersonDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface DeletePersonDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & DeletePersonDefaultHeaders; +} + +/** The final response for long-running deletePerson operation */ +export interface DeletePersonLogicalResponse extends HttpResponse { + status: "200"; } /** A successful call returns the person's information. */ -export interface GetLargePersonGroupPerson200Response extends HttpResponse { +export interface GetPerson200Response extends HttpResponse { status: "200"; - body: LargePersonGroupPersonOutput; + body: PersonDirectoryPersonOutput; } -export interface GetLargePersonGroupPersonDefaultHeaders { +export interface GetPersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupPersonDefaultResponse extends HttpResponse { +export interface GetPersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & GetPersonDefaultHeaders; } /** The request has succeeded. */ -export interface UpdateLargePersonGroupPerson200Response extends HttpResponse { +export interface UpdatePerson200Response extends HttpResponse { status: "200"; } -export interface UpdateLargePersonGroupPersonDefaultHeaders { +export interface UpdatePersonDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdateLargePersonGroupPersonDefaultResponse extends HttpResponse { +export interface UpdatePersonDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdateLargePersonGroupPersonDefaultHeaders; + headers: RawHttpHeaders & UpdatePersonDefaultHeaders; } -/** A successful call returns an array of person information that belong to the Large Person Group. */ -export interface GetLargePersonGroupPersons200Response extends HttpResponse { +/** A successful call returns an array of Person Directory Persons contained in the Dynamic Person Group. */ +export interface GetPersons200Response extends HttpResponse { status: "200"; - body: Array; + body: Array; } -export interface GetLargePersonGroupPersonsDefaultHeaders { +export interface GetPersonsDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupPersonsDefaultResponse extends HttpResponse { +export interface GetPersonsDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupPersonsDefaultHeaders; + headers: RawHttpHeaders & GetPersonsDefaultHeaders; } -/** A successful call returns a new persistedFaceId. */ -export interface AddLargePersonGroupPersonFaceFromUrl200Response extends HttpResponse { +/** A successful call returns an array of dynamicPersonGroups information that reference the provided personId. */ +export interface GetDynamicPersonGroupReferences200Response + extends HttpResponse { status: "200"; + body: ListGroupReferenceResultOutput; +} + +export interface GetDynamicPersonGroupReferencesDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetDynamicPersonGroupReferencesDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetDynamicPersonGroupReferencesDefaultHeaders; +} + +export interface AddPersonFace202Headers { + "operation-location": string; + location: string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ +export interface AddPersonFace202Response extends HttpResponse { + status: "202"; body: AddFaceResultOutput; + headers: RawHttpHeaders & AddPersonFace202Headers; } -export interface AddLargePersonGroupPersonFaceFromUrlDefaultHeaders { +export interface AddPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddLargePersonGroupPersonFaceFromUrlDefaultResponse extends HttpResponse { +export interface AddPersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddLargePersonGroupPersonFaceFromUrlDefaultHeaders; + headers: RawHttpHeaders & AddPersonFaceDefaultHeaders; } -/** A successful call returns a new persistedFaceId. */ -export interface AddLargePersonGroupPersonFace200Response extends HttpResponse { +/** The final response for long-running addPersonFace operation */ +export interface AddPersonFaceLogicalResponse extends HttpResponse { status: "200"; body: AddFaceResultOutput; } -export interface AddLargePersonGroupPersonFaceDefaultHeaders { +export interface AddPersonFaceFromUrl202Headers { + "operation-location": string; + location: string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ +export interface AddPersonFaceFromUrl202Response extends HttpResponse { + status: "202"; + body: AddFaceResultOutput; + headers: RawHttpHeaders & AddPersonFaceFromUrl202Headers; +} + +export interface AddPersonFaceFromUrlDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface AddLargePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface AddPersonFaceFromUrlDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & AddLargePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & AddPersonFaceFromUrlDefaultHeaders; } -/** The request has succeeded. */ -export interface DeleteLargePersonGroupPersonFace200Response extends HttpResponse { +/** The final response for long-running addPersonFaceFromUrl operation */ +export interface AddPersonFaceFromUrlLogicalResponse extends HttpResponse { status: "200"; + body: AddFaceResultOutput; } -export interface DeleteLargePersonGroupPersonFaceDefaultHeaders { +export interface DeletePersonFace202Headers { + "operation-location": string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. */ +export interface DeletePersonFace202Response extends HttpResponse { + status: "202"; + headers: RawHttpHeaders & DeletePersonFace202Headers; +} + +export interface DeletePersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface DeleteLargePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface DeletePersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & DeleteLargePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & DeletePersonFaceDefaultHeaders; +} + +/** The final response for long-running deletePersonFace operation */ +export interface DeletePersonFaceLogicalResponse extends HttpResponse { + status: "200"; } /** A successful call returns target persisted face's information (persistedFaceId and userData). */ -export interface GetLargePersonGroupPersonFace200Response extends HttpResponse { +export interface GetPersonFace200Response extends HttpResponse { status: "200"; - body: LargePersonGroupPersonFaceOutput; + body: PersonDirectoryFaceOutput; } -export interface GetLargePersonGroupPersonFaceDefaultHeaders { +export interface GetPersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface GetLargePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface GetPersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & GetLargePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & GetPersonFaceDefaultHeaders; } /** The request has succeeded. */ -export interface UpdateLargePersonGroupPersonFace200Response extends HttpResponse { +export interface UpdatePersonFace200Response extends HttpResponse { status: "200"; } -export interface UpdateLargePersonGroupPersonFaceDefaultHeaders { +export interface UpdatePersonFaceDefaultHeaders { /** String error code indicating what went wrong. */ "x-ms-error-code"?: string; } -export interface UpdateLargePersonGroupPersonFaceDefaultResponse extends HttpResponse { +export interface UpdatePersonFaceDefaultResponse extends HttpResponse { status: string; body: FaceErrorResponseOutput; - headers: RawHttpHeaders & UpdateLargePersonGroupPersonFaceDefaultHeaders; + headers: RawHttpHeaders & UpdatePersonFaceDefaultHeaders; +} + +/** A successful call returns an array of persistedFaceIds and and a person ID. */ +export interface GetPersonFaces200Response extends HttpResponse { + status: "200"; + body: ListFaceResultOutput; +} + +export interface GetPersonFacesDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetPersonFacesDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetPersonFacesDefaultHeaders; +} + +export interface CreateDynamicPersonGroupWithPerson202Headers { + "operation-location": string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ +export interface CreateDynamicPersonGroupWithPerson202Response + extends HttpResponse { + status: "202"; + headers: RawHttpHeaders & CreateDynamicPersonGroupWithPerson202Headers; +} + +export interface CreateDynamicPersonGroupWithPersonDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface CreateDynamicPersonGroupWithPersonDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & CreateDynamicPersonGroupWithPersonDefaultHeaders; +} + +/** The final response for long-running createDynamicPersonGroupWithPerson operation */ +export interface CreateDynamicPersonGroupWithPersonLogicalResponse + extends HttpResponse { + status: "200"; +} + +/** The request has succeeded. */ +export interface CreateDynamicPersonGroup200Response extends HttpResponse { + status: "200"; +} + +export interface CreateDynamicPersonGroupDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface CreateDynamicPersonGroupDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & CreateDynamicPersonGroupDefaultHeaders; +} + +export interface DeleteDynamicPersonGroup202Headers { + "operation-location": string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ +export interface DeleteDynamicPersonGroup202Response extends HttpResponse { + status: "202"; + headers: RawHttpHeaders & DeleteDynamicPersonGroup202Headers; +} + +export interface DeleteDynamicPersonGroupDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface DeleteDynamicPersonGroupDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & DeleteDynamicPersonGroupDefaultHeaders; +} + +/** The final response for long-running deleteDynamicPersonGroup operation */ +export interface DeleteDynamicPersonGroupLogicalResponse extends HttpResponse { + status: "200"; +} + +/** A successful call returns the Dynamic Person Group's information. */ +export interface GetDynamicPersonGroup200Response extends HttpResponse { + status: "200"; + body: DynamicPersonGroupOutput; +} + +export interface GetDynamicPersonGroupDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetDynamicPersonGroupDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetDynamicPersonGroupDefaultHeaders; +} + +export interface UpdateDynamicPersonGroupWithPersonChanges202Headers { + "operation-location": string; +} + +/** A successful call returns an empty response body. The service has accepted the request and will start processing soon. The client can query the operation status and result using the URL specified in the 'Operation-Location' response header. The URL expires in 48 hours. The URL provides the status of when Person Directory "Get Dynamic Person Group References" will return the changes made in this request. */ +export interface UpdateDynamicPersonGroupWithPersonChanges202Response + extends HttpResponse { + status: "202"; + headers: RawHttpHeaders & UpdateDynamicPersonGroupWithPersonChanges202Headers; +} + +export interface UpdateDynamicPersonGroupWithPersonChangesDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface UpdateDynamicPersonGroupWithPersonChangesDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & + UpdateDynamicPersonGroupWithPersonChangesDefaultHeaders; +} + +/** The final response for long-running updateDynamicPersonGroupWithPersonChanges operation */ +export interface UpdateDynamicPersonGroupWithPersonChangesLogicalResponse + extends HttpResponse { + status: "200"; +} + +/** The request has succeeded. */ +export interface UpdateDynamicPersonGroup200Response extends HttpResponse { + status: "200"; +} + +export interface UpdateDynamicPersonGroupDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface UpdateDynamicPersonGroupDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & UpdateDynamicPersonGroupDefaultHeaders; +} + +/** A successful call returns an array of Dynamic Person Groups and their information (dynamicPersonGroupId, name and userData). */ +export interface GetDynamicPersonGroups200Response extends HttpResponse { + status: "200"; + body: Array; +} + +export interface GetDynamicPersonGroupsDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetDynamicPersonGroupsDefaultResponse extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetDynamicPersonGroupsDefaultHeaders; +} + +/** A successful call returns an array of person information in the Person Directory. */ +export interface GetDynamicPersonGroupPersons200Response extends HttpResponse { + status: "200"; + body: ListPersonResultOutput; +} + +export interface GetDynamicPersonGroupPersonsDefaultHeaders { + /** String error code indicating what went wrong. */ + "x-ms-error-code"?: string; +} + +export interface GetDynamicPersonGroupPersonsDefaultResponse + extends HttpResponse { + status: string; + body: FaceErrorResponseOutput; + headers: RawHttpHeaders & GetDynamicPersonGroupPersonsDefaultHeaders; } diff --git a/sdk/face/ai-vision-face-rest/test/public/livenessSession.spec.ts b/sdk/face/ai-vision-face-rest/test/public/livenessSession.spec.ts deleted file mode 100644 index e09e66d5a211..000000000000 --- a/sdk/face/ai-vision-face-rest/test/public/livenessSession.spec.ts +++ /dev/null @@ -1,506 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { createRecorder, createClient } from "./utils/recordedClient.js"; -import { assert, beforeEach, afterEach, it, describe } from "vitest"; -import { Recorder, isPlaybackMode } from "@azure-tools/test-recorder"; - -import { FaceClient, LivenessResponseBodyOutput, isUnexpected } from "../../src/index.js"; - -// The crypto module is not available in browser environment, so implement a simple randomUUID function. -const randomUUID = (): string => - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/x/g, () => - Math.floor(Math.random() * 16).toString(16), - ); - -describe("Session", () => { - const livenessResponseBodyOutput: LivenessResponseBodyOutput[] = [ - { - livenessDecision: "spoofface", - target: { - faceRectangle: { - top: 782, - left: 260, - width: 858, - height: 984, - }, - fileName: "video.webp", - timeOffsetWithinFile: 0, - imageType: "Color", - }, - modelVersionUsed: "2022-10-15-preview.04", - }, - { - livenessDecision: "spoofface", - target: { - faceRectangle: { - top: 782, - left: 260, - width: 858, - height: 984, - }, - fileName: "video.webp", - timeOffsetWithinFile: 0, - imageType: "Color", - }, - modelVersionUsed: "2022-10-15-preview.04", - }, - ]; - - let recorder: Recorder; - let client: FaceClient; - - beforeEach(async (context) => { - recorder = await createRecorder(context); - client = await createClient(recorder); - }); - - afterEach(async () => { - if (recorder?.recordingId) { - await recorder.stop(); - } - }); - - it("TestDeleteAllSessions", async () => { - const getLivenessSessionsResponse = await client - .path("/detectLiveness/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - assert.equal(getLivenessSessionsResponse.status, "200"); - console.log(`Number of sessions: ${getLivenessSessionsResponse.body.length}`); - const deleteLivenessSessionResponses = await Promise.all( - getLivenessSessionsResponse.body.map((livenessSessionItemOutput) => - client - .path("/detectLiveness/singleModal/sessions/{sessionId}", livenessSessionItemOutput.id) - .delete(), - ), - ); - assert.isTrue(deleteLivenessSessionResponses.every((response) => response.status === "200")); - }); - - it("TestCreateSession", async () => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId", randomUUID()); - - const createLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - assert.isNotEmpty(createLivenessSessionResponse.body.sessionId); - assert.isNotEmpty(createLivenessSessionResponse.body.authToken); - - const { sessionId } = createLivenessSessionResponse.body; - - const getLivenessSessionResultResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - assert.equal(getLivenessSessionResultResponse.status, "200"); - assert.equal(getLivenessSessionResultResponse.body.deviceCorrelationId, deviceCorrelationId); - - const deleteLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - }); - - it("TestListSessions", async () => { - const createSession = async (): Promise<[string, string]> => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId", randomUUID()); - const createLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - return [createLivenessSessionResponse.body.sessionId, deviceCorrelationId]; - }; - - const sessions = Object.fromEntries(await Promise.all([createSession(), createSession()])); - console.log(sessions); - - const getLivenessSessionsResponse = await client - .path("/detectLiveness/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - assert.equal(getLivenessSessionsResponse.status, "200"); - assert.equal(getLivenessSessionsResponse.body.length, 2); - for (const livenessSessionItemOutput of getLivenessSessionsResponse.body) { - assert.isNotEmpty(livenessSessionItemOutput.createdDateTime); - assert.isAtLeast(livenessSessionItemOutput.authTokenTimeToLiveInSeconds ?? 0, 60); - assert.isAtMost(livenessSessionItemOutput.authTokenTimeToLiveInSeconds ?? 0, 86400); - assert.isTrue(livenessSessionItemOutput.id in sessions); - assert.equal( - livenessSessionItemOutput.deviceCorrelationId, - sessions[livenessSessionItemOutput.id], - ); - } - - await Promise.all( - Object.keys(sessions).map(async (sessionId) => { - const deleteLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - }), - ); - }); - - it.runIf(isPlaybackMode())("TestGetSessionResult", async () => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId"); - const sessionId = recorder.variable("sessionId"); - - const getLivenessSessionResultResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - assert.equal(getLivenessSessionResultResponse.status, "200"); - - const livenessSessionOutput = getLivenessSessionResultResponse.body; - assert.equal(livenessSessionOutput.deviceCorrelationId, deviceCorrelationId); - assert.equal(livenessSessionOutput.id, sessionId); - assert.equal(livenessSessionOutput.status, "ResultAvailable"); - assert.equal(livenessSessionOutput.result?.sessionId, sessionId); - assert.deepEqual(livenessSessionOutput.result?.response.body, livenessResponseBodyOutput[0]); - }); - - it.runIf(isPlaybackMode())("TestGetSessionAuditEntries", async () => { - const sessionId = recorder.variable("sessionId"); - - const getLivenessSessionAuditEntriesResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}/audit", sessionId) - .get(); - if (isUnexpected(getLivenessSessionAuditEntriesResponse)) { - throw new Error(getLivenessSessionAuditEntriesResponse.body.error.message); - } - assert.equal(getLivenessSessionAuditEntriesResponse.status, "200"); - assert.isTrue( - getLivenessSessionAuditEntriesResponse.body.every((entry) => entry.sessionId === sessionId), - ); - assert.deepEqual( - getLivenessSessionAuditEntriesResponse.body.map((entry) => entry.response.body), - livenessResponseBodyOutput, - ); - }); - - it("TestDeleteSession", async () => { - const createLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId: recorder.variable("deviceCorrelationId", randomUUID()), - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - - const { sessionId } = createLivenessSessionResponse.body; - - const deleteLivenessSessionResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - - const getLivenessSessionResultResponse = await client - .path("/detectLiveness/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (!isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(`Session ${sessionId} should not be found.`); - } - assert.equal(getLivenessSessionResultResponse.status, "404"); - assert.equal(getLivenessSessionResultResponse.body.error.code, "SessionNotFound"); - }); -}); - -describe("SessionWithVerify", () => { - const livenessResponseBodyOutput: LivenessResponseBodyOutput[] = [ - { - livenessDecision: "spoofface", - target: { - faceRectangle: { - top: 782, - left: 260, - width: 858, - height: 984, - }, - fileName: "video.webp", - timeOffsetWithinFile: 0, - imageType: "Color", - }, - modelVersionUsed: "2022-10-15-preview.04", - verifyResult: { - verifyImage: { - faceRectangle: { - top: 302, - left: 93, - width: 601, - height: 681, - }, - qualityForRecognition: "high", - }, - matchConfidence: 0.99736166, - isIdentical: true, - }, - }, - { - livenessDecision: "spoofface", - target: { - faceRectangle: { - top: 782, - left: 260, - width: 858, - height: 984, - }, - fileName: "video.webp", - timeOffsetWithinFile: 0, - imageType: "Color", - }, - modelVersionUsed: "2022-10-15-preview.04", - verifyResult: { - verifyImage: { - faceRectangle: { - top: 302, - left: 93, - width: 601, - height: 681, - }, - qualityForRecognition: "high", - }, - matchConfidence: 0.99736166, - isIdentical: true, - }, - }, - ]; - - let recorder: Recorder; - let client: FaceClient; - - beforeEach(async (context) => { - recorder = await createRecorder(context); - client = await createClient(recorder); - }); - - afterEach(async () => { - if (recorder?.recordingId) { - await recorder.stop(); - } - }); - - it("TestDeleteAllVerifySessions", async () => { - const getLivenessSessionsResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - assert.equal(getLivenessSessionsResponse.status, "200"); - console.log(`Number of sessions: ${getLivenessSessionsResponse.body.length}`); - const deleteLivenessSessionResponses = await Promise.all( - getLivenessSessionsResponse.body.map((livenessSessionItemOutput) => - client - .path( - "/detectLivenessWithVerify/singleModal/sessions/{sessionId}", - livenessSessionItemOutput.id, - ) - .delete(), - ), - ); - assert.isTrue(deleteLivenessSessionResponses.every((response) => response.status === "200")); - }); - - it("TestCreateVerifySession", async () => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId", randomUUID()); - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - assert.isNotEmpty(createLivenessSessionResponse.body.sessionId); - assert.isNotEmpty(createLivenessSessionResponse.body.authToken); - - const { sessionId } = createLivenessSessionResponse.body; - - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - assert.equal(getLivenessSessionResultResponse.status, "200"); - assert.equal(getLivenessSessionResultResponse.body.deviceCorrelationId, deviceCorrelationId); - - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - }); - - it("TestListVerifySessions", async () => { - const createSession = async (): Promise<[string, string]> => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId", randomUUID()); - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId, - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - return [createLivenessSessionResponse.body.sessionId, deviceCorrelationId]; - }; - - const sessions = Object.fromEntries(await Promise.all([createSession(), createSession()])); - console.log(sessions); - - const getLivenessSessionsResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .get(); - if (isUnexpected(getLivenessSessionsResponse)) { - throw new Error(getLivenessSessionsResponse.body.error.message); - } - assert.equal(getLivenessSessionsResponse.status, "200"); - assert.equal(getLivenessSessionsResponse.body.length, 2); - for (const livenessSessionItemOutput of getLivenessSessionsResponse.body) { - assert.isNotEmpty(livenessSessionItemOutput.createdDateTime); - assert.isAtLeast(livenessSessionItemOutput.authTokenTimeToLiveInSeconds ?? 0, 60); - assert.isAtMost(livenessSessionItemOutput.authTokenTimeToLiveInSeconds ?? 0, 86400); - assert.isTrue(livenessSessionItemOutput.id in sessions); - assert.equal( - livenessSessionItemOutput.deviceCorrelationId, - sessions[livenessSessionItemOutput.id], - ); - } - - await Promise.all( - Object.keys(sessions).map(async (sessionId) => { - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - }), - ); - }); - - it.runIf(isPlaybackMode())("TestGetVerifySessionResult", async () => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId"); - const sessionId = recorder.variable("sessionId"); - - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - assert.equal(getLivenessSessionResultResponse.status, "200"); - - const livenessSessionOutput = getLivenessSessionResultResponse.body; - assert.equal(livenessSessionOutput.deviceCorrelationId, deviceCorrelationId); - assert.equal(livenessSessionOutput.id, sessionId); - assert.equal(livenessSessionOutput.status, "ResultAvailable"); - assert.equal(livenessSessionOutput.result?.sessionId, sessionId); - assert.deepEqual(livenessSessionOutput.result?.response.body, livenessResponseBodyOutput[0]); - }); - - it.runIf(isPlaybackMode())("TestGetVerifySessionAuditEntries", async () => { - const sessionId = recorder.variable("sessionId"); - - const getLivenessSessionAuditEntriesResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}/audit", sessionId) - .get(); - if (isUnexpected(getLivenessSessionAuditEntriesResponse)) { - throw new Error(getLivenessSessionAuditEntriesResponse.body.error.message); - } - assert.equal(getLivenessSessionAuditEntriesResponse.status, "200"); - assert.isTrue( - getLivenessSessionAuditEntriesResponse.body.every((entry) => entry.sessionId === sessionId), - ); - assert.deepEqual( - getLivenessSessionAuditEntriesResponse.body.map((entry) => entry.response.body), - livenessResponseBodyOutput, - ); - }); - - it("TestDeleteVerifySession", async () => { - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - body: { - livenessOperationMode: "Passive", - deviceCorrelationId: recorder.variable("deviceCorrelationId", randomUUID()), - }, - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - - const { sessionId } = createLivenessSessionResponse.body; - - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (!isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(`Session ${sessionId} should not be found.`); - } - assert.equal(getLivenessSessionResultResponse.status, "404"); - assert.equal(getLivenessSessionResultResponse.body.error.code, "SessionNotFound"); - }); -}); diff --git a/sdk/face/ai-vision-face-rest/test/public/longRunningOperation.spec.ts b/sdk/face/ai-vision-face-rest/test/public/longRunningOperation.spec.ts deleted file mode 100644 index aa8341239745..000000000000 --- a/sdk/face/ai-vision-face-rest/test/public/longRunningOperation.spec.ts +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { createRecorder, createClient } from "./utils/recordedClient.js"; -import { assert, beforeEach, afterEach, it, describe } from "vitest"; -import { Recorder } from "@azure-tools/test-recorder"; - -import { FaceClient, getLongRunningPoller, isUnexpected } from "../../src/index.js"; - -// The crypto module is not available in browser environment, so implement a simple randomUUID function. -const randomUUID = (): string => - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/x/g, () => - Math.floor(Math.random() * 16).toString(16), - ); - -describe("PersonDirectory", () => { - let recorder: Recorder; - let client: FaceClient; - - beforeEach(async (context) => { - recorder = await createRecorder(context); - client = await createClient(recorder); - }); - - afterEach(async () => { - if (recorder?.recordingId) { - await recorder.stop(); - } - }); - - it("CreateDynamicPersonGroup", async () => { - const dynamicPersonGroupId = recorder.variable("dynamicPersonGroupId", randomUUID()); - const createDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .put({ - body: { name: dynamicPersonGroupId }, - }); - assert.equal(createDynamicPersonGroupResponse.status, "200"); - - const deleteDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .delete(); - const deleteDynamicPersonGroupPoller = await getLongRunningPoller( - client, - deleteDynamicPersonGroupResponse, - ); - await deleteDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(deleteDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - }); - - it("CreateDynamicPersonGroupWithPerson", async () => { - const createPersonResponse = await client.path("/persons").post({ - body: { name: "test" }, - }); - if (isUnexpected(createPersonResponse)) { - throw new Error(createPersonResponse.body.error.message); - } - const { personId } = createPersonResponse.body; - - const dynamicPersonGroupId = recorder.variable("dynamicPersonGroupId", randomUUID()); - const createDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .put({ - body: { - name: dynamicPersonGroupId, - addPersonIds: [personId], - }, - }); - assert.equal(createDynamicPersonGroupResponse.status, "202"); - - const createPersonPoller = await getLongRunningPoller(client, createPersonResponse); - await createPersonPoller.pollUntilDone(); - assert.equal(createPersonPoller.getOperationState().status, "succeeded"); - - const createDynamicPersonGroupPoller = await getLongRunningPoller( - client, - createDynamicPersonGroupResponse, - ); - await createDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(createDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - - const deletePersonResponse = await client.path("/persons/{personId}", personId).delete(); - const deletePersonPoller = await getLongRunningPoller(client, deletePersonResponse); - await deletePersonPoller.pollUntilDone(); - assert.equal(deletePersonPoller.getOperationState().status, "succeeded"); - - const deleteDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .delete(); - const deleteDynamicPersonGroupPoller = await getLongRunningPoller( - client, - deleteDynamicPersonGroupResponse, - ); - await deleteDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(deleteDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - }); - - it("UpdateDynamicPersonGroup", async () => { - const dynamicPersonGroupId = recorder.variable("dynamicPersonGroupId", randomUUID()); - await client.path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId).put({ - body: { name: dynamicPersonGroupId }, - }); - - const updateDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .patch({ - body: { name: "foo" }, - }); - assert.equal(updateDynamicPersonGroupResponse.status, "200"); - - const deleteDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .delete(); - const deleteDynamicPersonGroupPoller = await getLongRunningPoller( - client, - deleteDynamicPersonGroupResponse, - ); - await deleteDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(deleteDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - }); - - it("UpdateDynamicPersonGroupWithPersonChange", async () => { - const dynamicPersonGroupId = recorder.variable("dynamicPersonGroupId", randomUUID()); - await client.path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId).put({ - body: { name: dynamicPersonGroupId }, - }); - - const createPersonResponse = await client.path("/persons").post({ - body: { name: "test" }, - }); - if (isUnexpected(createPersonResponse)) { - throw new Error(createPersonResponse.body.error.message); - } - const { personId } = createPersonResponse.body; - - const updateDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .patch({ - body: { - addPersonIds: [personId], - }, - }); - assert.equal(updateDynamicPersonGroupResponse.status, "202"); - - const createPersonPoller = await getLongRunningPoller(client, createPersonResponse); - await createPersonPoller.pollUntilDone(); - assert.equal(createPersonPoller.getOperationState().status, "succeeded"); - - const updateDynamicPersonGroupPoller = await getLongRunningPoller( - client, - updateDynamicPersonGroupResponse, - ); - await updateDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(updateDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - - const deletePersonResponse = await client.path("/persons/{personId}", personId).delete(); - const deletePersonPoller = await getLongRunningPoller(client, deletePersonResponse); - await deletePersonPoller.pollUntilDone(); - assert.equal(deletePersonPoller.getOperationState().status, "succeeded"); - - const deleteDynamicPersonGroupResponse = await client - .path("/dynamicpersongroups/{dynamicPersonGroupId}", dynamicPersonGroupId) - .delete(); - const deleteDynamicPersonGroupPoller = await getLongRunningPoller( - client, - deleteDynamicPersonGroupResponse, - ); - await deleteDynamicPersonGroupPoller.pollUntilDone(); - assert.equal(deleteDynamicPersonGroupPoller.getOperationState().status, "succeeded"); - }); -}); diff --git a/sdk/face/ai-vision-face-rest/test/public/node/livenessSession.spec.ts b/sdk/face/ai-vision-face-rest/test/public/node/livenessSession.spec.ts deleted file mode 100644 index c1fd6cfc759e..000000000000 --- a/sdk/face/ai-vision-face-rest/test/public/node/livenessSession.spec.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { randomUUID } from "crypto"; -import { readFileSync } from "fs"; - -import { createRecorder, createClient } from "../utils/recordedClient.js"; -import { assert, beforeEach, afterEach, it, describe } from "vitest"; -import { Recorder } from "@azure-tools/test-recorder"; - -import { FaceClient, isUnexpected } from "../../../src/index.js"; - -describe("SessionWithVerify", () => { - let recorder: Recorder; - let client: FaceClient; - - beforeEach(async (context) => { - recorder = await createRecorder(context); - client = await createClient(recorder); - }); - - afterEach(async () => { - if (recorder?.recordingId) { - await recorder.stop(); - } - }); - - it("TestCreateVerifySessionWithImage", async () => { - const deviceCorrelationId = recorder.variable("deviceCorrelationId", randomUUID()); - const createLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions") - .post({ - contentType: "multipart/form-data", - body: [ - { - name: "VerifyImage", - body: readFileSync("samples-dev/data/detection1.jpg"), - }, - { - name: "Parameters", - body: { - livenessOperationMode: "Passive", - sendResultsToClient: false, - authTokenTimeToLiveInSeconds: 60, - deviceCorrelationId: deviceCorrelationId, - }, - }, - ], - }); - if (isUnexpected(createLivenessSessionResponse)) { - throw new Error(createLivenessSessionResponse.body.error.message); - } - assert.equal(createLivenessSessionResponse.status, "200"); - assert.isNotEmpty(createLivenessSessionResponse.body.sessionId); - assert.isNotEmpty(createLivenessSessionResponse.body.authToken); - assert.isNotEmpty(createLivenessSessionResponse.body.verifyImage?.faceRectangle); - assert.isNotEmpty(createLivenessSessionResponse.body.verifyImage?.qualityForRecognition); - - const { sessionId } = createLivenessSessionResponse.body; - - const getLivenessSessionResultResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .get(); - if (isUnexpected(getLivenessSessionResultResponse)) { - throw new Error(getLivenessSessionResultResponse.body.error.message); - } - assert.equal(getLivenessSessionResultResponse.status, "200"); - assert.equal(getLivenessSessionResultResponse.body.deviceCorrelationId, deviceCorrelationId); - - const deleteLivenessSessionResponse = await client - .path("/detectLivenessWithVerify/singleModal/sessions/{sessionId}", sessionId) - .delete(); - if (isUnexpected(deleteLivenessSessionResponse)) { - throw new Error(deleteLivenessSessionResponse.body.error.message); - } - assert.equal(deleteLivenessSessionResponse.status, "200"); - }); -}); diff --git a/sdk/face/ai-vision-face-rest/test/public/sampleTest.spec.ts b/sdk/face/ai-vision-face-rest/test/public/sampleTest.spec.ts new file mode 100644 index 000000000000..d4919ac91ac5 --- /dev/null +++ b/sdk/face/ai-vision-face-rest/test/public/sampleTest.spec.ts @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { createRecorder } from "./utils/recordedClient.js"; +import { assert, beforeEach, afterEach, it, describe } from "vitest"; + +describe("My test", () => { + // let recorder: Recorder; + + beforeEach(async function () { + // recorder = await createRecorder(this); + }); + + afterEach(async function () { + // await recorder.stop(); + }); + + it("sample test", async function () { + assert.equal(1, 1); + }); +}); diff --git a/sdk/face/ai-vision-face-rest/test/public/utils/recordedClient.ts b/sdk/face/ai-vision-face-rest/test/public/utils/recordedClient.ts index 5f4a8c8635e5..6e425fdcfdf9 100644 --- a/sdk/face/ai-vision-face-rest/test/public/utils/recordedClient.ts +++ b/sdk/face/ai-vision-face-rest/test/public/utils/recordedClient.ts @@ -5,25 +5,14 @@ import { Recorder, RecorderStartOptions, VitestTestContext, - assertEnvironmentVariable, } from "@azure-tools/test-recorder"; -import { AzureKeyCredential } from "@azure/core-auth"; -import createFaceClient, { FaceClient, FaceClientOptions } from "../../../src/index.js"; - -const envSetupForPlayback: Record = { - FACE_ENDPOINT: "https://faceendpoint.cognitiveservices.azure.com/", - FACE_APIKEY: "faceapikey", +const replaceableVariables: Record = { + SUBSCRIPTION_ID: "azure_subscription_id", }; const recorderEnvSetup: RecorderStartOptions = { - envSetupForPlayback, - // Ref: https://github.com/Azure/azure-sdk-tools/blob/main/tools/test-proxy/Azure.Sdk.Tools.TestProxy/Common/SanitizerDictionary.cs - removeCentralSanitizers: [ - "AZSDK2030", // HeaderRegexSanitizer("operation-location", value: "https://example.com") - "AZSDK3430", // BodyKeySanitizer("$..id") - "AZSDK3496", // BodyKeySanitizer("$..resourceLocation") - ], + envSetupForPlayback: replaceableVariables, }; /** @@ -31,32 +20,10 @@ const recorderEnvSetup: RecorderStartOptions = { * Should be called first in the test suite to make sure environment variables are * read before they are being used. */ -export async function createRecorder(context: VitestTestContext): Promise { +export async function createRecorder( + context: VitestTestContext, +): Promise { const recorder = new Recorder(context); await recorder.start(recorderEnvSetup); - await recorder.addSanitizers( - { - removeHeaderSanitizer: { headersForRemoval: ["Ocp-Apim-Subscription-Key"] }, - generalSanitizers: [ - { - regex: true, - target: "https://[a-zA-Z0-9-]*\\.cognitiveservices\\.azure\\.com/", - value: "https://fakeendpoint.cognitiveservices.azure.com/", - }, - ], - bodyKeySanitizers: [{ jsonPath: "authToken", value: "fakeauthtoken" }], - }, - ["record", "playback"], - ); return recorder; } - -export async function createClient( - recorder?: Recorder, - options?: FaceClientOptions, -): Promise { - const endpoint = assertEnvironmentVariable("FACE_ENDPOINT"); - const apikey = assertEnvironmentVariable("FACE_APIKEY"); - const credential = new AzureKeyCredential(apikey); - return createFaceClient(endpoint, credential, recorder?.configureClientOptions(options ?? {})); -} diff --git a/sdk/face/ai-vision-face-rest/tsconfig.json b/sdk/face/ai-vision-face-rest/tsconfig.json index 75ce705069dc..a6575847a41e 100644 --- a/sdk/face/ai-vision-face-rest/tsconfig.json +++ b/sdk/face/ai-vision-face-rest/tsconfig.json @@ -4,14 +4,13 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "rootDir": ".", - "paths": { "@azure-rest/ai-vision-face": ["./src/index"] } + "skipLibCheck": true }, "include": [ "./src/**/*.ts", "./src/**/*.mts", "./src/**/*.cts", "test/**/*.ts", - "./test/**/*.ts", - "samples-dev/**/*.ts" + "./test/**/*.ts" ] -} +} \ No newline at end of file diff --git a/sdk/face/ai-vision-face-rest/tsp-location.yaml b/sdk/face/ai-vision-face-rest/tsp-location.yaml index 3c246b130875..bfd5613df9ae 100644 --- a/sdk/face/ai-vision-face-rest/tsp-location.yaml +++ b/sdk/face/ai-vision-face-rest/tsp-location.yaml @@ -1,5 +1,4 @@ -additionalDirectories: [] directory: specification/ai/Face -commit: 1d2253d1e221541cf05ae5d0dd95bd28c0846238 -repo: Azure/azure-rest-api-specs - +commit: 8efaa61aa60b750f83b68893abb0481c9dbf5c13 +repo: /mnt/vss/_work/1/s/azure-rest-api-specs +additionalDirectories: diff --git a/sdk/face/ai-vision-face-rest/vitest.browser.config.ts b/sdk/face/ai-vision-face-rest/vitest.browser.config.ts index 33366e6842aa..5e0dc418cfa2 100644 --- a/sdk/face/ai-vision-face-rest/vitest.browser.config.ts +++ b/sdk/face/ai-vision-face-rest/vitest.browser.config.ts @@ -32,6 +32,6 @@ export default defineConfig({ reporter: ["text", "json", "html"], reportsDirectory: "coverage-browser", }, - testTimeout: 60000, + testTimeout: 1200000, }, }); diff --git a/sdk/face/ai-vision-face-rest/vitest.config.ts b/sdk/face/ai-vision-face-rest/vitest.config.ts index 35b425436c9f..f8ab2a758bf9 100644 --- a/sdk/face/ai-vision-face-rest/vitest.config.ts +++ b/sdk/face/ai-vision-face-rest/vitest.config.ts @@ -2,6 +2,7 @@ // Licensed under the MIT License. import { defineConfig } from "vitest/config"; +import { relativeRecordingsPath } from "@azure-tools/test-recorder"; export default defineConfig({ test: { @@ -27,6 +28,6 @@ export default defineConfig({ reporter: ["text", "json", "html"], reportsDirectory: "coverage", }, - testTimeout: 60000, + testTimeout: 1200000, }, });