diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 002b3c1a4f27..12ebf790f68e 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -11715,7 +11715,7 @@ packages: dev: false file:projects/abort-controller.tgz: - resolution: {integrity: sha512-5SQ2VOSLdJ9YuZeYoc+9HlTupWC4dM9Hqqp+DneLOvgeS/3N6dbEyHrlvcVKcsOdlw5+VdFiSMR+nrI9uifilQ==, tarball: file:projects/abort-controller.tgz} + resolution: {integrity: sha512-t2N03m2Q5O1f2XqDWqIw/LdOg1+7nT3PpBIXgT3U268H2kCSKbjSjIqK4ucEMMFe7Bml9snewVFmxPckUkq58w==, tarball: file:projects/abort-controller.tgz} name: '@rush-temp/abort-controller' version: 0.0.0 dependencies: @@ -11750,7 +11750,7 @@ packages: dev: false file:projects/agrifood-farming.tgz: - resolution: {integrity: sha512-2Tw2vVl4liajcKpa0jnb3FJYV4Zgf87HWBTGkLGEqPHxJ7/M2TbK9guKm6/cIKdUwi3vdOsdxGDnZ9o4JWdtSg==, tarball: file:projects/agrifood-farming.tgz} + resolution: {integrity: sha512-qsbgUXp/2RcQCa+sDOQ6/J2CKlvsxRR6R2XGX3gjxSRNOSTf3TaBr3T6AEL9ZINSaPPLzVLJr2L3sqdWgt6dRw==, tarball: file:projects/agrifood-farming.tgz} name: '@rush-temp/agrifood-farming' version: 0.0.0 dependencies: @@ -11797,7 +11797,7 @@ packages: dev: false file:projects/ai-anomaly-detector.tgz: - resolution: {integrity: sha512-70Gk1gY+TS+T4iZDM79vBBDkmnk3TWh/KVzui4HVVDaRmLoS3TiJeWgCQDErAZ4Nkhwil8Z96vrOfjNmLRfH2w==, tarball: file:projects/ai-anomaly-detector.tgz} + resolution: {integrity: sha512-rzByqDmaaneWm0SE34/dARzxW8OHa7PXg6TwMalLADA5iauKvhp0O86igHMyCrDbTvLLH4iGXxt6B7J8Mg9IRQ==, tarball: file:projects/ai-anomaly-detector.tgz} name: '@rush-temp/ai-anomaly-detector' version: 0.0.0 dependencies: @@ -11844,7 +11844,7 @@ packages: dev: false file:projects/ai-content-safety.tgz: - resolution: {integrity: sha512-+ZubJgUKJpj5LvlUyz52Ds5rbw5OIvPPpMChF9bjVYft6qcY69C81UtUV7tlNx5lvWzbXly4El1zeJgN6TWn0A==, tarball: file:projects/ai-content-safety.tgz} + resolution: {integrity: sha512-b3ksHaPHKhw7AND4BCk1aRpiC47MZoEhbk223qDOFkmu0PDnEpPqOPWlSA89meXc5/89H9dBoJl06bquFmFagg==, tarball: file:projects/ai-content-safety.tgz} name: '@rush-temp/ai-content-safety' version: 0.0.0 dependencies: @@ -11889,7 +11889,7 @@ packages: dev: false file:projects/ai-document-intelligence.tgz: - resolution: {integrity: sha512-vz9jPN1VeITQ9J8Z5W4FaW4TpWHGyOH4BrudrSX3clGLVdFDY9tzUVyAC5a4EQA5mJluMpVCtLzLNHhBe8Ki4w==, tarball: file:projects/ai-document-intelligence.tgz} + resolution: {integrity: sha512-cbX3F12y9Yq0fCDXKAntgROx1E6zWDA+WXSnTf5B3FVNckm1x9OCFz1FBaYIuFPr6zR3r5jz0jbAAnJ9KHFxGw==, tarball: file:projects/ai-document-intelligence.tgz} name: '@rush-temp/ai-document-intelligence' version: 0.0.0 dependencies: @@ -11952,7 +11952,7 @@ packages: dev: false file:projects/ai-document-translator.tgz: - resolution: {integrity: sha512-GB4F37Agq20zlNVQttSMq9f7/22kWm0ut8v4AiAiCMRLFm+7EKYQiQcY2dPUd+paygunKor168mJM7l49HLf4Q==, tarball: file:projects/ai-document-translator.tgz} + resolution: {integrity: sha512-bgqrkta2DzAJ15+YteEQCibw05OMI2TzbLlDE6SpGUg1gXAdCymm4dxpduNKiesFmC51WcP+ohZkuNGryFgBmg==, tarball: file:projects/ai-document-translator.tgz} name: '@rush-temp/ai-document-translator' version: 0.0.0 dependencies: @@ -11997,7 +11997,7 @@ packages: dev: false file:projects/ai-form-recognizer.tgz: - resolution: {integrity: sha512-izUpXM5lDqrG/FkQWd8JMRh85pd61fDefl5mYiTYQu57bLlc9Tnp29eTBNlNg1x63Il3oM1gsvLxD75TtoCwag==, tarball: file:projects/ai-form-recognizer.tgz} + resolution: {integrity: sha512-uUPHW/g4qfJv9xoilcgVHKr1QNvf/rW/ARCXsd1axpRlATZSs+dDu0mS7/MH0yZZjd6a00C/caY+P6B6Ac2s/A==, tarball: file:projects/ai-form-recognizer.tgz} name: '@rush-temp/ai-form-recognizer' version: 0.0.0 dependencies: @@ -12045,7 +12045,7 @@ packages: dev: false file:projects/ai-inference.tgz: - resolution: {integrity: sha512-C4EqlGgeIbJY0+yopCkm83HlIOoW0a7IcD3AJfssZ3VwavSBnXJ1kKlhL6fDi65PloumqNWONTRdqIrw6bKwAw==, tarball: file:projects/ai-inference.tgz} + resolution: {integrity: sha512-7KzF0Ua3Veeky0DNJ5LpW2FHqcnF6zp4W+zHNIPHVUS3UPsShfQYp+zeyubWAntZB5bTWN60lSqaNe89eJzctA==, tarball: file:projects/ai-inference.tgz} name: '@rush-temp/ai-inference' version: 0.0.0 dependencies: @@ -12087,7 +12087,7 @@ packages: dev: false file:projects/ai-language-conversations.tgz: - resolution: {integrity: sha512-U4hFRyz3RnKK09u8g05r3LSXfLSbU/nOnNAQl/euAN2FTXB5uV/i/KBzoDNmuiL4QgJqG1DKJR5tmxkqGRwrnA==, tarball: file:projects/ai-language-conversations.tgz} + resolution: {integrity: sha512-1MHjPdQAJiC79NNOmcp0ik0PMHTEUa5S1cnf3c7H8V0X61WP8FZfv0Z55pLf7yzXZlCjsRcBL9hQCyZnreua7Q==, tarball: file:projects/ai-language-conversations.tgz} name: '@rush-temp/ai-language-conversations' version: 0.0.0 dependencies: @@ -12136,7 +12136,7 @@ packages: dev: false file:projects/ai-language-text.tgz: - resolution: {integrity: sha512-q3dXSmrguMJ2s7uEFSTlzGgHWZGetXkjKAjDxMuADz02eLOLOIvSRBGEZmLunr88dLK6T5VT2Oi0zJd3vCb0tA==, tarball: file:projects/ai-language-text.tgz} + resolution: {integrity: sha512-A0kTkhDM8gDmqPLqPMNvEZAJIlr0S0plbLaTrTFPgOqV7tQ5+bvXJ4Z0ivvy3KqrHEdtSfo/mzu2PoY2FgKIzA==, tarball: file:projects/ai-language-text.tgz} name: '@rush-temp/ai-language-text' version: 0.0.0 dependencies: @@ -12186,7 +12186,7 @@ packages: dev: false file:projects/ai-language-textauthoring.tgz: - resolution: {integrity: sha512-wXY0hmfLnoX/QUm7162liqVwLbbK+5Wz5HKkQ13kFx0VD46+RulZvEzCGpLJzuZwZMcVe5Fmx5/cc99apBZHjA==, tarball: file:projects/ai-language-textauthoring.tgz} + resolution: {integrity: sha512-7aAZaIE6ahWWMxXrKlZM93wDSgZZOKX4LslsHX/sraizWXyR22lMKTdKijRHuVBA5xjBRVYOZluYrJx8A6zMRg==, tarball: file:projects/ai-language-textauthoring.tgz} name: '@rush-temp/ai-language-textauthoring' version: 0.0.0 dependencies: @@ -12213,7 +12213,7 @@ packages: dev: false file:projects/ai-metrics-advisor.tgz: - resolution: {integrity: sha512-qAI5xIRUS+Ty+eY9S+gLEkotKTSab8Q6+dOGlKaPg72hfPCITvmMUp55CT/ymb9lII1e5TJucB68eoIK7KUOOA==, tarball: file:projects/ai-metrics-advisor.tgz} + resolution: {integrity: sha512-Tj+0tIDSDdm2LdIuXTejBPxBgy0gsPU8mBBVBbHKeIb+FasY6yYhc0od5JqAC3l9u5zHXynQydpiYr20Zndb6w==, tarball: file:projects/ai-metrics-advisor.tgz} name: '@rush-temp/ai-metrics-advisor' version: 0.0.0 dependencies: @@ -12258,7 +12258,7 @@ packages: dev: false file:projects/ai-text-analytics.tgz: - resolution: {integrity: sha512-9AE3KXidyFXViHMYmRWM7WJEg53GZT/h6s+HW5ZEBT566w3KqBU+p+F73H2prhtB7a2qliFImje5qZtaIXAGrA==, tarball: file:projects/ai-text-analytics.tgz} + resolution: {integrity: sha512-pktlY1MIP1+oLYzxroYsIAe/W9oxBZ0XziTtxGTWI1AXowXMsF0wtPGp5g+m7SXEtd3p1kGQjF+ZnZSbLUUwYw==, tarball: file:projects/ai-text-analytics.tgz} name: '@rush-temp/ai-text-analytics' version: 0.0.0 dependencies: @@ -12305,7 +12305,7 @@ packages: dev: false file:projects/ai-translation-document.tgz: - resolution: {integrity: sha512-EEwkqS2wW2H4NIdi1wihLIaybaUGQ/8F7v0CQAHycmxJ4xLrE4rRL0Wa455Qvn6Af67mzg9iULbzjsSXDodnMA==, tarball: file:projects/ai-translation-document.tgz} + resolution: {integrity: sha512-Tw+2Hq6vZWvExcnQQePXdpahwrWGNqiuMH4Yz6JA88hZ0xuDGmibDAZggsm01JgJ3T1FD558AHhoOJETxtzUvA==, tarball: file:projects/ai-translation-document.tgz} name: '@rush-temp/ai-translation-document' version: 0.0.0 dependencies: @@ -12352,7 +12352,7 @@ packages: dev: false file:projects/ai-translation-text.tgz: - resolution: {integrity: sha512-p3TGmnsHnU7VgkCFrN0Z1ZvV6Wi8RaNMXC7dVMl6pdBsmQfhXvTvU6v5MJB6wG2VosDPuObYl0xZBmA8+/dzyg==, tarball: file:projects/ai-translation-text.tgz} + resolution: {integrity: sha512-qP0fJHmK6pvXHkr/+8VRiaEnMSIDLKA6e/BLWa4191Rs7sY7JHN65mpnaJr6f5AGarsM9DioGCR4vVNVlOZN2A==, tarball: file:projects/ai-translation-text.tgz} name: '@rush-temp/ai-translation-text' version: 0.0.0 dependencies: @@ -12397,7 +12397,7 @@ packages: dev: false file:projects/ai-vision-face.tgz: - resolution: {integrity: sha512-WVW75pbkZJ6N4c9sdY+fn24vbWueRiLYWUcktvHvJuDjET9JmoOc4/h8TRIJwc/3lxTMFoDqVbvpxB1t+Ut1yQ==, tarball: file:projects/ai-vision-face.tgz} + resolution: {integrity: sha512-QJ30PW51/kj1Qy8M+vju6MQkiLfwVwDKUlvLieElC5vd8qPq5kZ7b1CVnLpH5hosCHC+RqZxRus5DVw+nrqVKg==, tarball: file:projects/ai-vision-face.tgz} name: '@rush-temp/ai-vision-face' version: 0.0.0 dependencies: @@ -12437,7 +12437,7 @@ packages: dev: false file:projects/ai-vision-image-analysis.tgz: - resolution: {integrity: sha512-quBse7zWSrsGm/dUbG82gOGODp1xzhRmtleMYICuiH0NRa42ieWERLSQoGboWZcnt1AvnPDJEGPB1r18CGC0lQ==, tarball: file:projects/ai-vision-image-analysis.tgz} + resolution: {integrity: sha512-QfHG2jBEfs0+PK0aTSGABk2KzFAsXxMeIhh2holZ5g8odJR316/mei4xFHXTIY01L69SZPb9aSiWu+gMAv8LDw==, tarball: file:projects/ai-vision-image-analysis.tgz} name: '@rush-temp/ai-vision-image-analysis' version: 0.0.0 dependencies: @@ -12482,7 +12482,7 @@ packages: dev: false file:projects/api-management-custom-widgets-scaffolder.tgz: - resolution: {integrity: sha512-bk111O/cjShY+qA1axkdLiP5O8JNvYQlOF9fRplp95Ehh3JLkgJ2GZXT/1fCpoQEtdVngLReigaz+bLc2aJ9yg==, tarball: file:projects/api-management-custom-widgets-scaffolder.tgz} + resolution: {integrity: sha512-XMdrub7S8KrXg9Z7DTZwGBli7ZxXKttvMcZWNoUC5j4/ps0vNpy0aS41oTdzwmi4FjGwhSxF6vGKT85cd5oh+g==, tarball: file:projects/api-management-custom-widgets-scaffolder.tgz} name: '@rush-temp/api-management-custom-widgets-scaffolder' version: 0.0.0 dependencies: @@ -12525,7 +12525,7 @@ packages: dev: false file:projects/api-management-custom-widgets-tools.tgz: - resolution: {integrity: sha512-+XCmKtOCgvIai0ldV0vKlQ08n4Wtx708j/iqDS2SSzZ87yN/BfigjIZoiOmcpCXkirPR6H9oJ5Pq12nwGnvQGQ==, tarball: file:projects/api-management-custom-widgets-tools.tgz} + resolution: {integrity: sha512-z6bwbpMyzlg0tw5yOv5PpArO+pLxBuTlrmg4mfF6BkY6QRtculBzRbRqynUn+a5ad9Wp3nP+78f3VB9ivP6Rrw==, tarball: file:projects/api-management-custom-widgets-tools.tgz} name: '@rush-temp/api-management-custom-widgets-tools' version: 0.0.0 dependencies: @@ -12564,7 +12564,7 @@ packages: dev: false file:projects/app-configuration.tgz: - resolution: {integrity: sha512-GNm9EJlFjXy76j3naUD3x3E8b6cSxGH/Zv+6E3n+uh8X9cKfLrlPEFE90PctShfjVtU1zzfczWRjY1pner6jqw==, tarball: file:projects/app-configuration.tgz} + resolution: {integrity: sha512-ZS2tVcfCyGSzFxeEx10vvJ2M0aeau+oBI7RxIu+96q/F+G/CifNNQ08WJGLxqqWJ0A2QqYoL7smGLOVGzUJFXQ==, tarball: file:projects/app-configuration.tgz} name: '@rush-temp/app-configuration' version: 0.0.0 dependencies: @@ -12605,7 +12605,7 @@ packages: dev: false file:projects/arm-advisor.tgz: - resolution: {integrity: sha512-ONDZvrOim69rDzQBWt543U5MKPMRStHQEzC16TH/oI8ZygTY84QYTcIWz3FDRwS4lBSZ0Z72TqugbDODzM3++w==, tarball: file:projects/arm-advisor.tgz} + resolution: {integrity: sha512-7uVXn38MP0I7Z+N8ZhIfrCABbTGDyGUx32sDJnBKYUPjlVqNrYWpVg60fHO+ctJiyYCKkVMK2j7ylLFXwa6nLg==, tarball: file:projects/arm-advisor.tgz} name: '@rush-temp/arm-advisor' version: 0.0.0 dependencies: @@ -12633,7 +12633,7 @@ packages: dev: false file:projects/arm-agrifood.tgz: - resolution: {integrity: sha512-i1ek0oxoPQwE8tPgFTLIuXwiZKWiasqgMRQr+/dRqKSgGy/hhzs+Gn/jGaotoSZUy0x2RRPZbj9py37h6hlUEg==, tarball: file:projects/arm-agrifood.tgz} + resolution: {integrity: sha512-jsPaiebyJktur3n88Qm3T2GQXvUADvxtcUeJ4SrQ6dMJ/kG2RkXv0DZLKTqmN24+yutdmTtRMjDDTcMU2YcPow==, tarball: file:projects/arm-agrifood.tgz} name: '@rush-temp/arm-agrifood' version: 0.0.0 dependencies: @@ -12662,7 +12662,7 @@ packages: dev: false file:projects/arm-analysisservices.tgz: - resolution: {integrity: sha512-qsgQGqt6ljAq0Hmtzp7XWSxvjd9MCE7+q/kjfndlJYx8J6TDMY1smP/aWemHcF7Xmd/bwVjTnPCuTmxWggIpXQ==, tarball: file:projects/arm-analysisservices.tgz} + resolution: {integrity: sha512-a0Ja/CJHta1gcIVwDv6n+U42KnLIqrw1IBqfl1D+bsVN5wpkDOAvt++qpxh1Ky+8aWkjWgg21U59YsfOnhOzAg==, tarball: file:projects/arm-analysisservices.tgz} name: '@rush-temp/arm-analysisservices' version: 0.0.0 dependencies: @@ -12691,7 +12691,7 @@ packages: dev: false file:projects/arm-apicenter.tgz: - resolution: {integrity: sha512-Qh+lHGerbgZWF7GP5VhTWJSQxHXOMs/54f5LUl2Kf4S+vX+Fw4unC2sJYHwF+/o76PuOo1ZDhsSeEhQk+3PiQQ==, tarball: file:projects/arm-apicenter.tgz} + resolution: {integrity: sha512-uNfhigCN7B1SkHgHM3lhp4R2TdkSf9m4wLxwAgXifm7rnOl0hyQfGw8ygjkOMxuFCPwgX9rM/eXlGw7kQzfcKA==, tarball: file:projects/arm-apicenter.tgz} name: '@rush-temp/arm-apicenter' version: 0.0.0 dependencies: @@ -12721,7 +12721,7 @@ packages: dev: false file:projects/arm-apimanagement.tgz: - resolution: {integrity: sha512-ZqZou4qud1Z3UFDwOTQW7s3qhGgOB2KzueMtCmx5r21gUDQg/y/hMGXbcfeEaGEbpHe8Gxqtw17gcJWfl6trVQ==, tarball: file:projects/arm-apimanagement.tgz} + resolution: {integrity: sha512-xef6Zjq6D7heDmdMuBaHpNBGbiD1pb5i1Moz4aF+t3BGK0ucDsGBYXME4DwbmgUb2uhsyR9yhS88MPq4X6Y/Nw==, tarball: file:projects/arm-apimanagement.tgz} name: '@rush-temp/arm-apimanagement' version: 0.0.0 dependencies: @@ -12751,7 +12751,7 @@ packages: dev: false file:projects/arm-appcomplianceautomation.tgz: - resolution: {integrity: sha512-Pd/JqBu05RGe4wqjJVLLa90k+z/AqUhtcGVxmQ9dRJwh8zxDVNHclr7pFXofuO4bQFsy9aQABOYF38wVric9uw==, tarball: file:projects/arm-appcomplianceautomation.tgz} + resolution: {integrity: sha512-5mpGjNpV24Yt2Y7vOFW3X84kN5Bvlm+XzAStkgpeNxDBcGyhwYW7ksiU1HgBIHEp87aeQbrukd3v3o6AfyHl7Q==, tarball: file:projects/arm-appcomplianceautomation.tgz} name: '@rush-temp/arm-appcomplianceautomation' version: 0.0.0 dependencies: @@ -12782,7 +12782,7 @@ packages: dev: false file:projects/arm-appconfiguration.tgz: - resolution: {integrity: sha512-LmhRDolg8axc1KaQr6KvRBgfNM1lC3o6SviyAAreWU0wnh7C1gTGLqjhgjhUk724hG22qykhI8nZWkybJwvrTA==, tarball: file:projects/arm-appconfiguration.tgz} + resolution: {integrity: sha512-lCQNAsbeCwjO9ysZRusChuTJJqx3ZnJxNsrW2iwgJojrw7fU618rnfEL7oWAqO4U/XjNdSIHgR1Njt0emKrnLQ==, tarball: file:projects/arm-appconfiguration.tgz} name: '@rush-temp/arm-appconfiguration' version: 0.0.0 dependencies: @@ -12812,7 +12812,7 @@ packages: dev: false file:projects/arm-appcontainers.tgz: - resolution: {integrity: sha512-SMgeN7K2D/LNYdTE9QSMvv0neVWexFww3XY7QWQDfJBXcaBca1Ja1rrFuAp3io9wG/bsb4TJ9tjF4jYc7TugPA==, tarball: file:projects/arm-appcontainers.tgz} + resolution: {integrity: sha512-OLDQ9cIJXarZUMBqrsu4Yxni7ctTNO+xJHgapzZ42fI1r0sX+6GCHxn2KeTeLImDs2i+unsZMtiPGybNhlFnUw==, tarball: file:projects/arm-appcontainers.tgz} name: '@rush-temp/arm-appcontainers' version: 0.0.0 dependencies: @@ -12843,7 +12843,7 @@ packages: dev: false file:projects/arm-appinsights.tgz: - resolution: {integrity: sha512-PqNCW0YBSbm10wfJ7Ekze7VWgyYrLRLOhgvyFKEitS+E8RZzsgwmCuBexSv6hJlmtpZ6gHuFTFm/OfXDm09ktA==, tarball: file:projects/arm-appinsights.tgz} + resolution: {integrity: sha512-cnk29PDE3tFVEYSD/sPzYfBzjIL5KOnIxycYJlvMs2sBSfbeN/THEe34sNLOOVQTDyyZQwNyy0M2cwBm0PLbkg==, tarball: file:projects/arm-appinsights.tgz} name: '@rush-temp/arm-appinsights' version: 0.0.0 dependencies: @@ -12870,7 +12870,7 @@ packages: dev: false file:projects/arm-appplatform.tgz: - resolution: {integrity: sha512-qT22GdfjSRZcMFcDK0cD5ymkHstpHYz4RkfETJZd+oluUFldDlTQoyeP//uOTAAvVPfjIikFl3B1Ko9eZOXZ0w==, tarball: file:projects/arm-appplatform.tgz} + resolution: {integrity: sha512-s6Dm7EaIZ0EpvEBmjvWfdxordEua5TIcwc/Cp8y6dvHN4lEZ1tBRd2YG5zNyd+XNWsjFXCWqVi0mbKHhiF3F7g==, tarball: file:projects/arm-appplatform.tgz} name: '@rush-temp/arm-appplatform' version: 0.0.0 dependencies: @@ -12900,7 +12900,7 @@ packages: dev: false file:projects/arm-appservice-1.tgz: - resolution: {integrity: sha512-kQe3MOm7L8EPmfEZEjXBAkXwCCET+Yq9p/LLYKUykS42Nr95zB3QvUQhAnZ83lgSz2OXCbEq/gmEZk6hKZNcYw==, tarball: file:projects/arm-appservice-1.tgz} + resolution: {integrity: sha512-XXXsV4q4EQNoLKXSx1noyz448MgLXaTTAcXKm9dlvOVQM0XABZTCM48ivwIPq2vXvSVnFifK+3FX4Irs3ykUtQ==, tarball: file:projects/arm-appservice-1.tgz} name: '@rush-temp/arm-appservice-1' version: 0.0.0 dependencies: @@ -12931,7 +12931,7 @@ packages: dev: false file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-DVWWsXM84QXXu1e/Xc6M2QSwtF3uACo44vxXY+f8eaI5lmQb0K65YnGn/SltOvCavdUi/ci828R6/1WbxAEHWA==, tarball: file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-ECcJDZNgAm39MjQX5+HTa8lpZRO9c+MdOiR8XBGrDv13jWy//2KVpk7S+nPIH4mGqVs904/zfFmVQOrD7Wr2gQ==, 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: @@ -12961,7 +12961,7 @@ packages: dev: false file:projects/arm-appservice.tgz: - resolution: {integrity: sha512-yjfMdED/EYOLCEz+8gc00WPVFsvPTLWOhUQDXnqfWOSib2atSvSbvWxNeCT5jyVM9RF82bCiLQ7fAtAsrmZWEA==, tarball: file:projects/arm-appservice.tgz} + resolution: {integrity: sha512-2akMZ2GrgqZ4b59N6IMfJYG3jD6p4bHujN0dsqpEkvwPpTfZQYcc9gGW6xeZJzdJjOXhcubKO7sM4WFZPCwMjQ==, tarball: file:projects/arm-appservice.tgz} name: '@rush-temp/arm-appservice' version: 0.0.0 dependencies: @@ -13007,7 +13007,7 @@ packages: dev: false file:projects/arm-astro.tgz: - resolution: {integrity: sha512-BkU280DnWj0UmhHVAVaoIwi7NfOWsuyp+nV49cWTcyuTK75RfVqsy1o5ctw0ASyFqZ7w8R42W8IK0OFwwGEMHA==, tarball: file:projects/arm-astro.tgz} + resolution: {integrity: sha512-nF21ZZdOGg9T+tyQwgFYHgn8VNsymT+aMOcH3LgU10a2NmYGOayAh6RD6WNCjYwaMHDgFbhyWx3lO8QEnlmoUQ==, tarball: file:projects/arm-astro.tgz} name: '@rush-temp/arm-astro' version: 0.0.0 dependencies: @@ -13037,7 +13037,7 @@ packages: dev: false file:projects/arm-attestation.tgz: - resolution: {integrity: sha512-7/MEkicR8Ch4QFzgEvj4q+2HCLnBGFlICmcQsb7wPKkRTL65nBT5zOmMr3hIr7qPhXsYlVTq8+KCZ90XNflxDQ==, tarball: file:projects/arm-attestation.tgz} + resolution: {integrity: sha512-gqtK+R5NlVQ6UmRdJQljN2z/DUtY+eMpjDaf5TVgMqqNMe9rEfxQCsglTK5Ri2iBbyjwDjNaZXprI4SRNeQ9dg==, tarball: file:projects/arm-attestation.tgz} name: '@rush-temp/arm-attestation' version: 0.0.0 dependencies: @@ -13064,7 +13064,7 @@ packages: dev: false file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-7TLK9EBIt/ZuDkyTnYVES3qLrFyhUVr6D6FTKf7PV59FuzWvva3mfsZAJMdZ16O3nv/RWvnSp+UUhGHpIzQj8w==, tarball: file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-Edd07Pv1abh7Q/emiojC6/bTKFP34XgWhxXvuAqwaMm7p1QlEtuQ8cLPbQCrvIugJij8aHcRB3acYNwLWUvC2g==, 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: @@ -13092,7 +13092,7 @@ packages: dev: false file:projects/arm-authorization.tgz: - resolution: {integrity: sha512-tfepyJDCO5hqCTLdhg68cVHYdJt4YQxgBc9d5YwOgYTJT43/YqjraQnX/22NgU4pKpTAzZfEpi2dVZV+PDPTLA==, tarball: file:projects/arm-authorization.tgz} + resolution: {integrity: sha512-QUXBw75W/xuESE7mouVPCVoBTu6aCXpVXnn2PujkrFGm2n5aDXUkzrklJOagfFDHxffGZHNJR9bKUZwkWZ9zCA==, tarball: file:projects/arm-authorization.tgz} name: '@rush-temp/arm-authorization' version: 0.0.0 dependencies: @@ -13122,7 +13122,7 @@ packages: dev: false file:projects/arm-automanage.tgz: - resolution: {integrity: sha512-KJzz8fCv09Iyh78FSK11aVd4Xc0bItlDEb0N9pBdoa94N4bPCyZgJQCPgf2oQWJNygUzfhrEfnqRQ5M7NDgMww==, tarball: file:projects/arm-automanage.tgz} + resolution: {integrity: sha512-RqF7sWkucg+paJB9mIO6cN2ULzL9TJDZkipdMnDby3US53GQFoIeMJ5PvYu5V9WsajHwWJgkvchAMT9Ep16iZA==, tarball: file:projects/arm-automanage.tgz} name: '@rush-temp/arm-automanage' version: 0.0.0 dependencies: @@ -13150,7 +13150,7 @@ packages: dev: false file:projects/arm-automation.tgz: - resolution: {integrity: sha512-mXhiPEWjDJqAGw6oFlns7O+Gh5Wr5nGeXjHEMTAeVOA2Ve38pNy/I+1Zk4VtyG1nFltJ/QrWJxmEC0VmkBYFeA==, tarball: file:projects/arm-automation.tgz} + resolution: {integrity: sha512-CTauQD4cEtFdQm0QpTfYI0DXAw/aE9w8ZYwcxY8fkPKaVtCJ2mmc5ghSogk5dSjeJQBjBBTfiPVIho14t+uNwQ==, tarball: file:projects/arm-automation.tgz} name: '@rush-temp/arm-automation' version: 0.0.0 dependencies: @@ -13180,7 +13180,7 @@ packages: dev: false file:projects/arm-avs.tgz: - resolution: {integrity: sha512-+IFz0D29ExLZpKlyxsw0lApXJb7w9Z4vXIsp4VclJOVYjA3ki/xHvIVYgNUgj1FM4t3jUgZHzBzmVa4LEw5xHQ==, tarball: file:projects/arm-avs.tgz} + resolution: {integrity: sha512-aVbAeRY+1Nji7SMcF1eh7H94NNAJLm9mnAckJklxyCjycvNkD8zddSRc9XoIyT0BXy8x/e+vrJYpUkwAttUPPA==, tarball: file:projects/arm-avs.tgz} name: '@rush-temp/arm-avs' version: 0.0.0 dependencies: @@ -13211,7 +13211,7 @@ packages: dev: false file:projects/arm-azureadexternalidentities.tgz: - resolution: {integrity: sha512-i+fwANat6eviAY700xtVUslIYRG/EBechZcHIRl2r91Yip2clTlGSpB3koHx57zMDOR5ithqYuuiwgWtcRzRyw==, tarball: file:projects/arm-azureadexternalidentities.tgz} + resolution: {integrity: sha512-LboCP/Yr2jO/MKTuLVFTrf43Y9fU6NDTCEsgx1ogNNfZ29g5Wqgb4JkidpaBC9vv0pjtdbh5tD3zMg35sFe3WA==, tarball: file:projects/arm-azureadexternalidentities.tgz} name: '@rush-temp/arm-azureadexternalidentities' version: 0.0.0 dependencies: @@ -13240,7 +13240,7 @@ packages: dev: false file:projects/arm-azurestack.tgz: - resolution: {integrity: sha512-N5cccsxzqlInPk7M1kMdiGZPPG91peL4FGuoL42vwXtLJc/C11JMBSipNbPPl2Hc28aYeBKcOSJVERwvUXIjHw==, tarball: file:projects/arm-azurestack.tgz} + resolution: {integrity: sha512-0mbOPd9c/AT7c2t8J8IDoUe6Zm0YmZpcwwApqq2zERVyD9n+WOgvGaCNa6G2PxN3gTpFEPvLokDZNjfSRCbBzg==, tarball: file:projects/arm-azurestack.tgz} name: '@rush-temp/arm-azurestack' version: 0.0.0 dependencies: @@ -13267,7 +13267,7 @@ packages: dev: false file:projects/arm-azurestackhci.tgz: - resolution: {integrity: sha512-k838V47XP/HxDMeD4fiNtdEwsPE/JTgLyob01bMYrPNxUTy/O/SXde0Wr3RsgcALPe3VUqsEin0Mq/RAv7TD7A==, tarball: file:projects/arm-azurestackhci.tgz} + resolution: {integrity: sha512-bsJRg4MkRLuhqXBY+qFlolaUjmWrJ21C+NJY9LY7WuMjhgoTgbcCxlBiBC1B0WqpJzqWIulQD06tpAeiXiBo3w==, tarball: file:projects/arm-azurestackhci.tgz} name: '@rush-temp/arm-azurestackhci' version: 0.0.0 dependencies: @@ -13297,7 +13297,7 @@ packages: dev: false file:projects/arm-baremetalinfrastructure.tgz: - resolution: {integrity: sha512-jdMMUOeUEWhlQ/aXd5+7i8i49BK8ha4M+AgDepfREAWn1saCpUE8RVKijvEZqikfh4BS5L32sI4JXiI1sKaaGQ==, tarball: file:projects/arm-baremetalinfrastructure.tgz} + resolution: {integrity: sha512-O0WjisLnirZaKLl1bfQ6VhweynhDE3pXOgMMhsGwy7wjAzKpkW4APklwMKdNQ2i8UpwQEl9j5vGJFOwLk5NDvA==, tarball: file:projects/arm-baremetalinfrastructure.tgz} name: '@rush-temp/arm-baremetalinfrastructure' version: 0.0.0 dependencies: @@ -13327,7 +13327,7 @@ packages: dev: false file:projects/arm-batch.tgz: - resolution: {integrity: sha512-3aUIlwYUbSPurjG9yccsqEZNXcvrq5jiPHjchk7qIeNyNozjqZJeDdi6uVKCCbnuXfxpH/Yw7B5cPQsiLvZkrw==, tarball: file:projects/arm-batch.tgz} + resolution: {integrity: sha512-3F4c2h2nkA1K1Cm7LPyjdhyz2Rs2p3JH6xhxN6jGAWaNlgqE1nxVzF/xS4lJyJKCc6VXcx1svN7zbiGbbs89Ag==, tarball: file:projects/arm-batch.tgz} name: '@rush-temp/arm-batch' version: 0.0.0 dependencies: @@ -13357,7 +13357,7 @@ packages: dev: false file:projects/arm-billing.tgz: - resolution: {integrity: sha512-XqVfHJQp30vLd/KaGRST9KZcwTOziUBxt+R6TCq5ul7xeY8fKnJD51WVoS7nfX4EA+r6b090AfWKsa+eBIcimA==, tarball: file:projects/arm-billing.tgz} + resolution: {integrity: sha512-FARPUh7FdBujg4dHXxguxHOlHOiRabQvrjuPUVXw5eabf7QhTy2FhjqOgYrnQRsIDpZh2a4pSiEfPiEbw0SQzA==, tarball: file:projects/arm-billing.tgz} name: '@rush-temp/arm-billing' version: 0.0.0 dependencies: @@ -13386,7 +13386,7 @@ packages: dev: false file:projects/arm-billingbenefits.tgz: - resolution: {integrity: sha512-zPOa9UDM7jV3n8ERiszjwDOoc1pZFh3v49EwXAMzIXCwVWMRyneZ2DhGRLWGoGTxuyNtMPXWiEeFt0NKOSbw3A==, tarball: file:projects/arm-billingbenefits.tgz} + resolution: {integrity: sha512-apIk0547dfQi4KBASblct0DzcWxZ1cXoeWOtmdRBR8zMQWQWhPXD5Gb8FEB21CgMnLp5EhD7GfsCmWapVheq8A==, tarball: file:projects/arm-billingbenefits.tgz} name: '@rush-temp/arm-billingbenefits' version: 0.0.0 dependencies: @@ -13415,7 +13415,7 @@ packages: dev: false file:projects/arm-botservice.tgz: - resolution: {integrity: sha512-hu3i3Ofv7/CKCncDACaI5l0u9H9/MHAIczAGozaQj+moBzBHQQExgrLi8O5mycR+Fjn+tRAioau37QaOCizr4g==, tarball: file:projects/arm-botservice.tgz} + resolution: {integrity: sha512-wMCVMuBEdhyh2pXUSDexEvjfqXjqNzr8Y8KnT9jMQ4knY8idnXDP0WNSVhs5Zq8l89rZN13XHzXWwoTf2zUJPQ==, tarball: file:projects/arm-botservice.tgz} name: '@rush-temp/arm-botservice' version: 0.0.0 dependencies: @@ -13445,7 +13445,7 @@ packages: dev: false file:projects/arm-cdn.tgz: - resolution: {integrity: sha512-3gYIjQuSTOLvxf3QjgF48JT+dEZbJYdk4jF098AkeSmYwrXvOLSGghpldwRpjVuVJlqiwNZRwR3o7R5FXHb/sQ==, tarball: file:projects/arm-cdn.tgz} + resolution: {integrity: sha512-qb9ts7b8hCxIcC+UoonLr7GJTyVE2w4JSzxUYD/cq+d5N7MrKw/MQ6X48jT1TQWX2IJFqyF+4rVUiovt75b3wA==, tarball: file:projects/arm-cdn.tgz} name: '@rush-temp/arm-cdn' version: 0.0.0 dependencies: @@ -13475,7 +13475,7 @@ packages: dev: false file:projects/arm-changeanalysis.tgz: - resolution: {integrity: sha512-fWlQBPipM3/lpPJEHMI8jsfQwft2ek7atdJLQ3lowOE4Z8uHKDG+ilJqiv1EE95NBrmuF+doeuefBAnZS+ZKCw==, tarball: file:projects/arm-changeanalysis.tgz} + resolution: {integrity: sha512-GFfbNDyWcUJbnJn194KZaCemMPGs9IAYlU0vFE4xOO5vuFduQRDSO4cc50fXst2rXPFqlAIE0rK8SOM0fKr3QA==, tarball: file:projects/arm-changeanalysis.tgz} name: '@rush-temp/arm-changeanalysis' version: 0.0.0 dependencies: @@ -13502,7 +13502,7 @@ packages: dev: false file:projects/arm-changes.tgz: - resolution: {integrity: sha512-RFhj9PYgucMkojmG/xWi+do0jmguJR5N6CVU/5dpEPMSNTFSOZpJmfhxlhbSCzKFHWC9WtEvecRQKNNNVowjwA==, tarball: file:projects/arm-changes.tgz} + resolution: {integrity: sha512-seCCegGmOhz6G5p3LB85+3cvpwfJt4vTDDj8dLjKKa0m9ptXuAH8q0z86iQ+TbKVxsO2UpTl+UXUZjyxtkOtNA==, tarball: file:projects/arm-changes.tgz} name: '@rush-temp/arm-changes' version: 0.0.0 dependencies: @@ -13529,7 +13529,7 @@ packages: dev: false file:projects/arm-chaos.tgz: - resolution: {integrity: sha512-3hM3+gdZSqsMiZrXetEK26zwL7KyXZp4THJw7SueBiHoD9zoZe+c8U11KMpN4IDJiFOq7/bDBLo0ag8PnzPZzA==, tarball: file:projects/arm-chaos.tgz} + resolution: {integrity: sha512-QXFVLF2dA2LGC5B+0uw8mlQcjJKpkJ8TpRff22N4pros7Dflf6GdxnbYA5dM9I2yPiCkHmQHnHkkDVIuEggqzQ==, tarball: file:projects/arm-chaos.tgz} name: '@rush-temp/arm-chaos' version: 0.0.0 dependencies: @@ -13560,7 +13560,7 @@ packages: dev: false file:projects/arm-cognitiveservices.tgz: - resolution: {integrity: sha512-y9yTVZHuFJI8dPwzEvercZND+2IfBtS4POhKWZt/y6kxrPTlZmxw+opxEDBzl8Yjlvef50gRtFFuIAv3UqAP7g==, tarball: file:projects/arm-cognitiveservices.tgz} + resolution: {integrity: sha512-dl27cjyX71D1d4m38cXejpA1O2i4DFb2MTAH/CND4bavP3LaQbIYkpqXSZUc7EoNXoI6jMZMRGcKgqMVUgNLQQ==, tarball: file:projects/arm-cognitiveservices.tgz} name: '@rush-temp/arm-cognitiveservices' version: 0.0.0 dependencies: @@ -13590,7 +13590,7 @@ packages: dev: false file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-abUvhMDWA+f2jmsVFo3u2Uhgle7OPoyEn0Qm2itWEPLW6KcC3zWsUP87ASqlSOVAcXi+uqqaLYCasMXtNee0uQ==, tarball: file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-bz+19yI1HQFlgrZQQZjZNOSHf+Hh4CrvP+nyOLusea0AWaJs1aChxIMmfs6VkRsc5Ewz/pGmFz0WJPmkMJSTeQ==, 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: @@ -13618,7 +13618,7 @@ packages: dev: false file:projects/arm-commerce.tgz: - resolution: {integrity: sha512-C+jpx3gDx5Lyb8oXrbNqttOQnlPoGY97pYY0wyzyABCjLSzV8LGnxK0HbPP+Bs9/IS/KuWoiPrTEW00sgh8jBw==, tarball: file:projects/arm-commerce.tgz} + resolution: {integrity: sha512-LWkAeSCgEawOR2ndN6jJCHy3rg3Rx12DrpITnO8m0UrYoM/I+igLnAmtzFrWuaPPrYIboLBzxNMokfFcXSLS/w==, tarball: file:projects/arm-commerce.tgz} name: '@rush-temp/arm-commerce' version: 0.0.0 dependencies: @@ -13645,7 +13645,7 @@ packages: dev: false file:projects/arm-commitmentplans.tgz: - resolution: {integrity: sha512-/Ob9UPZ/v732DkVwUELb9Eymmbdi7h+W6hdYWvY6QkLlrrtywdchXNcVAH5mRafuBfyJayI/+LP5pKwFrsbRpw==, tarball: file:projects/arm-commitmentplans.tgz} + resolution: {integrity: sha512-whETLRCVXON1vxsXT38mJ5yqCEdwAE+vAlBJEaFbFbSQsZ6xgLvavVlB0mmOqUNZOjI+QHKha9Vu0a/CDw/yZA==, tarball: file:projects/arm-commitmentplans.tgz} name: '@rush-temp/arm-commitmentplans' version: 0.0.0 dependencies: @@ -13672,7 +13672,7 @@ packages: dev: false file:projects/arm-communication.tgz: - resolution: {integrity: sha512-2xEGkC1vwagWSicT0dw8cB8tpRwVYDXf4NbYWW53tgeyrW4TIdUiqGDIghLJPiN4cvLhttOYfCXxjEPgFbfOLA==, tarball: file:projects/arm-communication.tgz} + resolution: {integrity: sha512-Rq0A6A/jA9bGHTJ8xX8n5QCJb2zKiZQINXv/oF1LEiNsCpmULW38CHvpcCzYzFevY7ZX/RCAp78d7ybuqqg1yw==, tarball: file:projects/arm-communication.tgz} name: '@rush-temp/arm-communication' version: 0.0.0 dependencies: @@ -13702,7 +13702,7 @@ packages: dev: false file:projects/arm-compute-1.tgz: - resolution: {integrity: sha512-htTzU/qeMbztclayDaALb69likrxG5yfqsxktJ13IrT2EfCQT0inWi5E74C+k9nztbPUvj7111EL4w5Pxi9OaQ==, tarball: file:projects/arm-compute-1.tgz} + resolution: {integrity: sha512-AM0dsiMAJJ2gP64uWD5ysDFbFhSeYjtTasktK5CUVdqxAXZQuTkLgYw7a0tULebPWwF46L3mrmqQYzz/Gs/dTw==, tarball: file:projects/arm-compute-1.tgz} name: '@rush-temp/arm-compute-1' version: 0.0.0 dependencies: @@ -13734,7 +13734,7 @@ packages: dev: false file:projects/arm-compute-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-fNsQuQcpvlHm5zbEFeZydIMJO1FKgjveSOBvuzk4Z8Ls5lHDUys/i3lQdIg0h0RyVp55OrpOsqxGnkWf8uC6jA==, tarball: file:projects/arm-compute-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-BbmJHyqUYQSUU+BFZdrNijIZh4ffin6Yr6225Nm47Q79+rUflF0lhHz0y7/DZ98dvET8pMy2bayEVQaL3cyoRA==, 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: @@ -13764,7 +13764,7 @@ packages: dev: false file:projects/arm-compute.tgz: - resolution: {integrity: sha512-7FI/MhP2kRDY0FUaisuP/hIpX62E1NL4eyyPhadmBb4gCYxrukQq7TeE098mPu6VXdp2vrmfaWBviCp27HSM/Q==, tarball: file:projects/arm-compute.tgz} + resolution: {integrity: sha512-VYWMdomJKQucZjeoj7vC5sLt+WfOvXijJPZAPSphCz4IYA2GMLSzOOI3plFcTyaIc/DQmoUe8yofCNLc2wb4kA==, tarball: file:projects/arm-compute.tgz} name: '@rush-temp/arm-compute' version: 0.0.0 dependencies: @@ -13811,7 +13811,7 @@ packages: dev: false file:projects/arm-computefleet.tgz: - resolution: {integrity: sha512-KGi5c4wRvovPp5nrSnxE0EOM0KODxoABZTkdsJc/BWIoSD5eaXqsMsg7s4m0eufwCUDQjOXl/S0h3pUiFQkbCw==, tarball: file:projects/arm-computefleet.tgz} + resolution: {integrity: sha512-0cpA+/toEHnG0G1/Q+ywSJT7So1FT5GnGdVFS0fUVtedU6fALGp2UMQUYZYZUATeSe29r7q458SQdqyB5JeAww==, tarball: file:projects/arm-computefleet.tgz} name: '@rush-temp/arm-computefleet' version: 0.0.0 dependencies: @@ -13850,7 +13850,7 @@ packages: dev: false file:projects/arm-confidentialledger.tgz: - resolution: {integrity: sha512-zxZU/JNsnSaYxiS4gMIh80c4JtSyr80YyLEMDCWMNlHq+C+be/nXEt6p5bpi7kn//tjrzt14eMZnTCi3pE3K2Q==, tarball: file:projects/arm-confidentialledger.tgz} + resolution: {integrity: sha512-/+COUhTsLVbHeC7HbjPJjUTImMuZwOLH+9XuTudUccVUTz53dY6opFZNtUM7GVaywFK1fGXY2N92bN7H7z3Ilw==, tarball: file:projects/arm-confidentialledger.tgz} name: '@rush-temp/arm-confidentialledger' version: 0.0.0 dependencies: @@ -13881,7 +13881,7 @@ packages: dev: false file:projects/arm-confluent.tgz: - resolution: {integrity: sha512-z/AubcnKHzpxf/9w781YbGNb53vuciy1f76Ar+Do5o5Berokb8x6ocuWrJs+kIDgy0igy7ju0Bt88Sf2avMikw==, tarball: file:projects/arm-confluent.tgz} + resolution: {integrity: sha512-2o273gtGPTC2K2/i46A21qYt2qP4tcRSqAfJJP4LqWdzkdt8+XBFjlExZzEmLmuZnnlszOwLurb5b944u+l7HA==, tarball: file:projects/arm-confluent.tgz} name: '@rush-temp/arm-confluent' version: 0.0.0 dependencies: @@ -13911,7 +13911,7 @@ packages: dev: false file:projects/arm-connectedvmware.tgz: - resolution: {integrity: sha512-PjgIWOJHPB3uSxF1IR1NtM5TfRZ7cGTOylTsjMaA5vvIgMfwcdtq2ADpnhfUPkqcjGJJwcA3vzieQUxb3AbNhg==, tarball: file:projects/arm-connectedvmware.tgz} + resolution: {integrity: sha512-w1T74Hc0+RFb5V3bH0jQuBBUCENQ3/MRlEIOYf3x0nZQ3OzHSAfA1Q6uMm82oZzJ+VF9VLUCBGfxo6wfwmFn0Q==, tarball: file:projects/arm-connectedvmware.tgz} name: '@rush-temp/arm-connectedvmware' version: 0.0.0 dependencies: @@ -13941,7 +13941,7 @@ packages: dev: false file:projects/arm-consumption.tgz: - resolution: {integrity: sha512-H3G/xqgawMywQnmbzgmiHgs3i0fO3Vji3LJHZxek4Ep4zkjyzif6svW5QQq0C8uF6fMGrGmyi9FisnIqImjhng==, tarball: file:projects/arm-consumption.tgz} + resolution: {integrity: sha512-Gcy5nXxsywa4b9F7LFIiS+QtQCf0L9YsdfqyYqLpY/2A/Ix0S34nyU1xhIH2dk2Qzyg93sbNFpOWzXMif2Vugw==, tarball: file:projects/arm-consumption.tgz} name: '@rush-temp/arm-consumption' version: 0.0.0 dependencies: @@ -13969,7 +13969,7 @@ packages: dev: false file:projects/arm-containerinstance.tgz: - resolution: {integrity: sha512-ki0IumWTAuuvtP5w6e5OEXc7U8NGGPUTJRfQrK74zPExsA60o71EM/2LNlp+Ac16fL6WJgHvueRFRhQyUvHuzg==, tarball: file:projects/arm-containerinstance.tgz} + resolution: {integrity: sha512-IeTmSosHKsNS/TA1NqQNs/nksO+D8+6b05enj5Tqe8JkVyyjWdgz0jCVap5GMOd9zmhSZgTlzBXzf7/8JlZAOg==, tarball: file:projects/arm-containerinstance.tgz} name: '@rush-temp/arm-containerinstance' version: 0.0.0 dependencies: @@ -13999,7 +13999,7 @@ packages: dev: false file:projects/arm-containerregistry.tgz: - resolution: {integrity: sha512-rnNxFSztZHA0UnR05hfe5N5CRQCEDCQsM9cWo+53EWcpc/OOos6gr8znKJoAMRF02hLQFKz7zXVHYyd5lPHiMw==, tarball: file:projects/arm-containerregistry.tgz} + resolution: {integrity: sha512-ou0H4p1Lf9vhdrNtJwDAs4apzn2PTEQ+i43Cjf+z3cYejA+mM69a9Ps0vjFniRH0xtYDzyMw+ILLORQKBx3MmQ==, tarball: file:projects/arm-containerregistry.tgz} name: '@rush-temp/arm-containerregistry' version: 0.0.0 dependencies: @@ -14029,7 +14029,7 @@ packages: dev: false file:projects/arm-containerservice-1.tgz: - resolution: {integrity: sha512-B9/qkrGTOKFMl1uKG6/YuYHwnQK58VyjOWRr6v5YqzdTXlMrxpc81HJTSnpRv6MloAEedISGePdfBULz1OMvuw==, tarball: file:projects/arm-containerservice-1.tgz} + resolution: {integrity: sha512-MSE9EQsFt80usJvYiYKfr8QgkOTk0uB7i+d1RvEgz0W1HSWx0r+5sI52jjaQo2s2l3Vb9f+p0N+Vn2Os9LhWPg==, tarball: file:projects/arm-containerservice-1.tgz} name: '@rush-temp/arm-containerservice-1' version: 0.0.0 dependencies: @@ -14060,7 +14060,7 @@ packages: dev: false file:projects/arm-containerservice.tgz: - resolution: {integrity: sha512-0JWrY8HNeTojCQQQuuqZ32zVkxL8Rnv2xlnIUMHLsE5ghlYs39pA6XEU0aeYxm+f1g50D4048djHAJ5lg0HAKA==, tarball: file:projects/arm-containerservice.tgz} + resolution: {integrity: sha512-7BoXb1vMgKl/PnaE7JZthEQMaxNxic7BttWWBLpU7ZMvCYhcM2Z7u0biB30PhTs142yT3G+JEp6R1JLpdPFu+Q==, tarball: file:projects/arm-containerservice.tgz} name: '@rush-temp/arm-containerservice' version: 0.0.0 dependencies: @@ -14106,7 +14106,7 @@ packages: dev: false file:projects/arm-containerservicefleet.tgz: - resolution: {integrity: sha512-Q0BxwTAQnv16ETxkfwg/n4NZAwSelH9Cv9XdsDcGrReeV1pXHlwg7dErxk6ey+ocHUVD7qA1wp21qzffwXSTyA==, tarball: file:projects/arm-containerservicefleet.tgz} + resolution: {integrity: sha512-Plqg8H1yVOsiNy5aqEAviSDO03X5onAnB2CYgd6U4qjY0ZvKJVyAcrgEdNqzU7WCqPCVgy605+iEX7xWxjpQUg==, tarball: file:projects/arm-containerservicefleet.tgz} name: '@rush-temp/arm-containerservicefleet' version: 0.0.0 dependencies: @@ -14137,7 +14137,7 @@ packages: dev: false file:projects/arm-cosmosdb.tgz: - resolution: {integrity: sha512-/Cb2yd9t9k3cmTg9QUJrli800W8j+28xZxoGfymYrZfHxm2geOtI4euBHu9lNCjNcI2TeZX8uuR3BIl9hIQOYg==, tarball: file:projects/arm-cosmosdb.tgz} + resolution: {integrity: sha512-EcEo0Mm8/H7VWVbwvb0BVt/nk3JFgPvVRp39nDyt9jY/pevKEPihUH1BfmhuOCQdNaZWhhI4QOzLsFGHweHYCA==, tarball: file:projects/arm-cosmosdb.tgz} name: '@rush-temp/arm-cosmosdb' version: 0.0.0 dependencies: @@ -14168,7 +14168,7 @@ packages: dev: false file:projects/arm-cosmosdbforpostgresql.tgz: - resolution: {integrity: sha512-lX1LJoAhDJjNaSE5A3yi4qJ8BSHkKkV20RZMigPUnz/1ThN0CVUWH2MN4HAZtmPer6xvUMczjJ+wyjekKpK2bA==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} + resolution: {integrity: sha512-qcPKWxfssW4deS2vRfGT1AixQhA2XK/BBSCxm1G7fo7A4Jqw0GBXRYbYtCVw6rzX5RHouZXYa7LAmJxPGpQ6wQ==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} name: '@rush-temp/arm-cosmosdbforpostgresql' version: 0.0.0 dependencies: @@ -14198,7 +14198,7 @@ packages: dev: false file:projects/arm-costmanagement.tgz: - resolution: {integrity: sha512-ICAyriWE/1Jebu5380CxWafhOlbO2j+8AmeLt3n70whmJb5UD2V51XYTO5xaqLwGrWmHieAu0g0EYuluewaDWg==, tarball: file:projects/arm-costmanagement.tgz} + resolution: {integrity: sha512-5lpA8pqyyAM2ac2mD8Etgdb6v9PzqcrM+DEp4w7lnQNVj9cNtExLPemZT+jQL+hxaJSQL5Xuvak60S7d1QbXAw==, tarball: file:projects/arm-costmanagement.tgz} name: '@rush-temp/arm-costmanagement' version: 0.0.0 dependencies: @@ -14228,7 +14228,7 @@ packages: dev: false file:projects/arm-customerinsights.tgz: - resolution: {integrity: sha512-LZLPHeTQuFJL3fPsooEXPQSe+KWznuY0q4Wiicxqa1CLHzL5NnUrpDi3juuOh5JUCctiVj4qPa2W04n23b2A8A==, tarball: file:projects/arm-customerinsights.tgz} + resolution: {integrity: sha512-rB62XQy8dvXMz4M/7aeeFyB23YakTjOxwE6FgpqoJCzE6ZjsoXmq+Ji0AoaanssRvJkETEg5z2IksAg2+vURlQ==, tarball: file:projects/arm-customerinsights.tgz} name: '@rush-temp/arm-customerinsights' version: 0.0.0 dependencies: @@ -14257,7 +14257,7 @@ packages: dev: false file:projects/arm-dashboard.tgz: - resolution: {integrity: sha512-s/5AttuZg8VGAqE5bB4lXAC2glSpE3Fem/i6oquOwA50duTuCdiMvuiXc/ctmfoT7F+YM1TD/+pwCXTxXyk2tA==, tarball: file:projects/arm-dashboard.tgz} + resolution: {integrity: sha512-ADCtf6wHVl4+mj0XkmgezMbzyz1dJbEZWEXokWIuAIUNeMfPomxXikfPVgIWxB5tPFSxHDS7+L2HrfII5sb21A==, tarball: file:projects/arm-dashboard.tgz} name: '@rush-temp/arm-dashboard' version: 0.0.0 dependencies: @@ -14287,7 +14287,7 @@ packages: dev: false file:projects/arm-databox.tgz: - resolution: {integrity: sha512-Nv3Ub6mRlmbPyFq7Em22lQGHv3iI5kJhTKChNIXhp5BCjGwektVQhjrZ2grjO1gwBv+BTDkfiOMsvwEqiZc8Bw==, tarball: file:projects/arm-databox.tgz} + resolution: {integrity: sha512-Jl0QbnBUPsstqrSz0FBnacdEPWP4pXxLGmCIqcEy5dOqQFh0jxUfQMKe1nFttPrQIsXvSPPZ1dq+Xzg3voJlUA==, tarball: file:projects/arm-databox.tgz} name: '@rush-temp/arm-databox' version: 0.0.0 dependencies: @@ -14317,7 +14317,7 @@ packages: dev: false file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-iF38cTOLQCdEZFr1xo4K9+83MQJJWq00aF9+6syKOCB2AJMxZ4E9Z6QyP/sDCBFJdVdoxF8FX3SLvQdBlz1t3g==, tarball: file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-3apwrQnikZL/C1EwsqxokVNwTTuxIgCBimntJkPzmTt6Sl1r3EnvkpCEq3nV9K2PFRLcwomKRGDo/4AFlpqG2g==, 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: @@ -14347,7 +14347,7 @@ packages: dev: false file:projects/arm-databoxedge.tgz: - resolution: {integrity: sha512-lVHnZW1D9P6WuVY1yYsvXo3VNP4QB9BkVE/19PyFPQQ/HAB9YLDOsWrkVwJuhYSYGpImuA7PT+EKYYaRbHgwxg==, tarball: file:projects/arm-databoxedge.tgz} + resolution: {integrity: sha512-pd8wV626yBwXSHjpO3zbIUBBvayYezwyB2iFk3kckdVDaJC4sYdwlr1k+0cmUel5VEM2hzP9ZcrJ8BLzpHHWeQ==, tarball: file:projects/arm-databoxedge.tgz} name: '@rush-temp/arm-databoxedge' version: 0.0.0 dependencies: @@ -14376,7 +14376,7 @@ packages: dev: false file:projects/arm-databricks.tgz: - resolution: {integrity: sha512-tUasK3ua2kjINJZkPGzMcPP6I58AryQuPRH8TMQDznPh60vKKxLPA5QHx8nSSG0qugZkX/0ahb7KbrftgNxlyg==, tarball: file:projects/arm-databricks.tgz} + resolution: {integrity: sha512-ukffrFz9KXG84YZnYgyMVU2WxzeM+UafOjUKGXBQuPDRaRdr4fyH2WbE18S8KSzhgSM2uh9Bajon4PXnfYA5eA==, tarball: file:projects/arm-databricks.tgz} name: '@rush-temp/arm-databricks' version: 0.0.0 dependencies: @@ -14406,7 +14406,7 @@ packages: dev: false file:projects/arm-datacatalog.tgz: - resolution: {integrity: sha512-+W7Fi+B5qVpGDKk8dzHL5qkJGNnB/BkryLKfxxPDLzNOLjhlU/Xq90MVlDxYmj1HnAQRWZ/ZlgLILQQjj4PR/w==, tarball: file:projects/arm-datacatalog.tgz} + resolution: {integrity: sha512-6Xh58jdmq7AmyrpgyMtP2og8OJmKzGfI4A2o78o9ntzfKPgFg5GvVweJYinUFrHhgVy8wllq8m+DbNmwYJ/SeA==, tarball: file:projects/arm-datacatalog.tgz} name: '@rush-temp/arm-datacatalog' version: 0.0.0 dependencies: @@ -14435,7 +14435,7 @@ packages: dev: false file:projects/arm-datadog.tgz: - resolution: {integrity: sha512-tWQ6xPYw4sqDI7Dr1jEKm7amuwojB2LYeaFnClsQkm0GAoia87JGNlWTJTd+UltPWpLsNnBUsLBbeBIxBFNb0Q==, tarball: file:projects/arm-datadog.tgz} + resolution: {integrity: sha512-4vtDGxEr7bIHpf8wrPt8hOm4Iot3u7ATo7PcgFJ22B1QRo6+fjDt5B8aXBbvx6wUD4pdn8lyxpWNIKDaEwZ0JA==, tarball: file:projects/arm-datadog.tgz} name: '@rush-temp/arm-datadog' version: 0.0.0 dependencies: @@ -14465,7 +14465,7 @@ packages: dev: false file:projects/arm-datafactory.tgz: - resolution: {integrity: sha512-Jx47zRvgQVatq+t+0Sz4w2FGrkpnN+ZovYRIiaE6PXH01ZjvI3z8+eesGhylvYKWzLq15lmPmOoOZsG1Qf5Spw==, tarball: file:projects/arm-datafactory.tgz} + resolution: {integrity: sha512-Q/UgF/jHUhFWs4a2VHg5BPu4EacOjaoAJqlLqGFX3ZwG0GZDoRx8FtqHRw8p4jzKB5vuOrEV/3GzXjtsgu1WWg==, tarball: file:projects/arm-datafactory.tgz} name: '@rush-temp/arm-datafactory' version: 0.0.0 dependencies: @@ -14496,7 +14496,7 @@ packages: dev: false file:projects/arm-datalake-analytics.tgz: - resolution: {integrity: sha512-6pqdujvH7QAEVcGKtGa+Qvy3jc4Jvq6ROXRx52o8gU1qP1pffb/2QKTgDYIFVSWJOtvn7vKWsSv++K3JGYRp0w==, tarball: file:projects/arm-datalake-analytics.tgz} + resolution: {integrity: sha512-BwKg050DuWAe2bNSn0L7Y6/gxF5is/sUEyI6ey6pbro0hFwUYwrYuWbPvoEXJ0XQh4F3+KAfRuIaBXqwUG0NAw==, tarball: file:projects/arm-datalake-analytics.tgz} name: '@rush-temp/arm-datalake-analytics' version: 0.0.0 dependencies: @@ -14525,7 +14525,7 @@ packages: dev: false file:projects/arm-datamigration.tgz: - resolution: {integrity: sha512-TNCRVby5YXY0c2e7shxpP9fLOiMuAPzrad82L5d/PsWCiFxay/kHltRhC9yfEuJOLi9SPaHherVuIsUxFyKozA==, tarball: file:projects/arm-datamigration.tgz} + resolution: {integrity: sha512-IEsrSpKapYUOg8ZJtoftvyu8cucFaJYNhfA7aIcIVop729u4EGFXXhRvFhSU8TdU904tqTrdfKU+QQIsrqEeAQ==, tarball: file:projects/arm-datamigration.tgz} name: '@rush-temp/arm-datamigration' version: 0.0.0 dependencies: @@ -14554,7 +14554,7 @@ packages: dev: false file:projects/arm-dataprotection.tgz: - resolution: {integrity: sha512-LdVQlNk85WkLK9UFEnJJKKKUL2eAwL6Mqs6VgOGojOomnnQGZg/kNYOgdtbvJ/V0th5JLVzDSD55d+xfUO49vg==, tarball: file:projects/arm-dataprotection.tgz} + resolution: {integrity: sha512-mPMDI8V3PEYMWzKfjL/WqtwL2gZjPrAQNoT8PZOO4Du7TC4r9oVMjoPoPtPIqEYTMGuCh80/gto9RGc+jL0xxg==, tarball: file:projects/arm-dataprotection.tgz} name: '@rush-temp/arm-dataprotection' version: 0.0.0 dependencies: @@ -14585,7 +14585,7 @@ packages: dev: false file:projects/arm-defendereasm.tgz: - resolution: {integrity: sha512-98fr3fMGLC57z4fOkxQpGGkppirHPusHmoYQqJJ1FJxmacoAygaezvyR7QJ0P/2dYd9MQAVVshAItBnRCX55+w==, tarball: file:projects/arm-defendereasm.tgz} + resolution: {integrity: sha512-7ZapL0RxM8uEdo9Rw4fqFSSwB9+oVkAO1tBNtqmGgo4pQSJqAfEounweI8xswwkiraFYuc/BxStTTI6S2D5Z/A==, tarball: file:projects/arm-defendereasm.tgz} name: '@rush-temp/arm-defendereasm' version: 0.0.0 dependencies: @@ -14615,7 +14615,7 @@ packages: dev: false file:projects/arm-deploymentmanager.tgz: - resolution: {integrity: sha512-bnUVyGPtkPe8LNSyCy1yClVXU8St7RlUkXoNBlihb5TyJFsyPuXKgYXpcYh9iyHpiKqoLiS7Cj4gPM0C0nmkKA==, tarball: file:projects/arm-deploymentmanager.tgz} + resolution: {integrity: sha512-RxofYNGQ4TP+HYcb8QI86FIpjvnsmd6s1Lc9SpdDJ+v7xTfZa5lq6Qy/w3pDGeBRlPDm9dZm1K+q79p3JeAqYA==, tarball: file:projects/arm-deploymentmanager.tgz} name: '@rush-temp/arm-deploymentmanager' version: 0.0.0 dependencies: @@ -14644,7 +14644,7 @@ packages: dev: false file:projects/arm-desktopvirtualization.tgz: - resolution: {integrity: sha512-mGgbpMxIDwwPkf1n/Qpmb8nIWXxfBmYKxjaYcxWabnoNdL2keoT0+jqT1fsIU2ttLUMm5Zj4pI6+2pGCI02+DQ==, tarball: file:projects/arm-desktopvirtualization.tgz} + resolution: {integrity: sha512-KO7SOu5mwyQwRnZp5ptYmnZ6oHUIMHsxwKWASnilMZuqST0RRWg3B35U9fhFA/ELowa5fUc+LpnDczPD58r+LQ==, tarball: file:projects/arm-desktopvirtualization.tgz} name: '@rush-temp/arm-desktopvirtualization' version: 0.0.0 dependencies: @@ -14672,7 +14672,7 @@ packages: dev: false file:projects/arm-devcenter.tgz: - resolution: {integrity: sha512-WzOYyZ7sYCs47LFx+uqBrSXVF+Rkif62PG7vbbljUQSsBkrnhtXwMD76F6w2iYLF6nbRbsvkyhoXlBzT/M8tiw==, tarball: file:projects/arm-devcenter.tgz} + resolution: {integrity: sha512-JurFyM3b6qbeR5PO5zx2jDzOwiMPPUn/RAi0UeM62muO2TmoeBUKLkjbJhCTRillgWeJHVNFIplnyuY54mBLlw==, tarball: file:projects/arm-devcenter.tgz} name: '@rush-temp/arm-devcenter' version: 0.0.0 dependencies: @@ -14703,7 +14703,7 @@ packages: dev: false file:projects/arm-devhub.tgz: - resolution: {integrity: sha512-EdaLVv3eLxnjLGMlbdpAddyXwOZfPmne9ziabI5duyiaNj3LGB3XFzDFXxB5Q14PELzsp7pxO9j8dTOb63tWoQ==, tarball: file:projects/arm-devhub.tgz} + resolution: {integrity: sha512-uM9sv49gEdbbukbPXUkGwEr57/C8G4voHCZVwjayArvzQxpmw0vCRWgmdNtHFUMNF8qxAne7E9v5b0oge6KgsA==, tarball: file:projects/arm-devhub.tgz} name: '@rush-temp/arm-devhub' version: 0.0.0 dependencies: @@ -14731,7 +14731,7 @@ packages: dev: false file:projects/arm-deviceprovisioningservices.tgz: - resolution: {integrity: sha512-lQqDbv7g9n5GKZZ6XzHJ/1krYnpj7WD+L9eUGsDCYNIvfS820VCD2NWILorCZ1HM3aH60jS+1vE2yYq6rUriVQ==, tarball: file:projects/arm-deviceprovisioningservices.tgz} + resolution: {integrity: sha512-D1j7w251vbrba8H1bHgnWhFID6Nf0yN2d2IaXcyB4zNibyi0D8ZI8SvBidMrsGXOo+yAD/jCSp1Ta4n+xgy+Dg==, tarball: file:projects/arm-deviceprovisioningservices.tgz} name: '@rush-temp/arm-deviceprovisioningservices' version: 0.0.0 dependencies: @@ -14761,7 +14761,7 @@ packages: dev: false file:projects/arm-deviceregistry.tgz: - resolution: {integrity: sha512-k8vk0idHyonOoNArlqW4tLfeAxfW8FCbnXT0OzkiNQKp45c6YSsFT1htPCQEQmLDMoDWfuUsmAvrNMdKlEZD6g==, tarball: file:projects/arm-deviceregistry.tgz} + resolution: {integrity: sha512-uorbaXlwdBW4pHmu5isNUlJSOqG2W/3hDKtz+t+cmKhs+exRSXDtKUTjQVQliSIEKvVFnKlguoD85DXlOFi6Bw==, tarball: file:projects/arm-deviceregistry.tgz} name: '@rush-temp/arm-deviceregistry' version: 0.0.0 dependencies: @@ -14792,7 +14792,7 @@ packages: dev: false file:projects/arm-deviceupdate.tgz: - resolution: {integrity: sha512-z6sZ0yLyraPVZIG8aB/OCRUf1V1BKgZmZSmoM88wL1miK+yYSVvRJcNPDW72x4btKJXhfQTGrCjIjyBE9vCPmA==, tarball: file:projects/arm-deviceupdate.tgz} + resolution: {integrity: sha512-sxFBXsSKlNJMjF2Z/fHgJ74YDfmEOpvhJBJWng55rnryYJpx18+0tvuY4o7kDQKfo5fNk/dVYJKyBA6mz1Q8tw==, tarball: file:projects/arm-deviceupdate.tgz} name: '@rush-temp/arm-deviceupdate' version: 0.0.0 dependencies: @@ -14822,7 +14822,7 @@ packages: dev: false file:projects/arm-devopsinfrastructure.tgz: - resolution: {integrity: sha512-Xmke4vEWYHy+QQ+/iYtu7ywr+ynW+EXriwXzdXW2rQ8himsYCsyQRz2GXCwJBKYBl1mmtDwAUE4SGZ9NMKFwQA==, tarball: file:projects/arm-devopsinfrastructure.tgz} + resolution: {integrity: sha512-4zHK93tKjUT4Aksx+xEV/eCXF5V/jP0XNr6J0V4yt7oWNIh4OEgNpl0i5XG8MRVBVjpxRoWnixbZgnm+nZNogg==, tarball: file:projects/arm-devopsinfrastructure.tgz} name: '@rush-temp/arm-devopsinfrastructure' version: 0.0.0 dependencies: @@ -14853,7 +14853,7 @@ packages: dev: false file:projects/arm-devspaces.tgz: - resolution: {integrity: sha512-jlFWQo4HQ3JQyIXMlCCenE0wkocWFAkYr/CWnc0NQkX5AsiO/jnh9PMYvFqQuEdyS2jqYGYyu7C3nKUZNHEtzQ==, tarball: file:projects/arm-devspaces.tgz} + resolution: {integrity: sha512-mIcMSxyuO791Tup/qBtwba/rS/Pbz5qAWnZMacRfMAtRBGIc1/F7MnqNeJVNbMnOu9IuvAzbAN05dLOM2YkRqA==, tarball: file:projects/arm-devspaces.tgz} name: '@rush-temp/arm-devspaces' version: 0.0.0 dependencies: @@ -14882,7 +14882,7 @@ packages: dev: false file:projects/arm-devtestlabs.tgz: - resolution: {integrity: sha512-gTx80BQNVPreQoy/L1z1UA3lDxk8fXJkRPr9JeqSgoy5vwXN37+fsHcaied4c6lhQjHLj1n2JH3Rbd8iZk1zIw==, tarball: file:projects/arm-devtestlabs.tgz} + resolution: {integrity: sha512-c7ox4i6D023X+c7vBcY9EF4LP/lQiI9vpslVpCLzYIqY++5AmBtKrzxyumlOnMkQuFFYK9LuRR7T7Jtz8f4ReA==, tarball: file:projects/arm-devtestlabs.tgz} name: '@rush-temp/arm-devtestlabs' version: 0.0.0 dependencies: @@ -14911,7 +14911,7 @@ packages: dev: false file:projects/arm-digitaltwins.tgz: - resolution: {integrity: sha512-hACmyDTZT5Nue06GH53PNJ4TWpcKbpHpzB/e4J/ojnEFMlTW4oTLU6aWCEKsElp2BQ2xJ/p2l+3uktEQ+2cx/Q==, tarball: file:projects/arm-digitaltwins.tgz} + resolution: {integrity: sha512-eQT/IMro7HG/g0+aj5gAv1oiShbvUeRzPbGBgWDg4pgpDLBsSTFK//ARjCI7M/qM9Z3XvNjUSTznM8N6LbR6UQ==, tarball: file:projects/arm-digitaltwins.tgz} name: '@rush-temp/arm-digitaltwins' version: 0.0.0 dependencies: @@ -14941,7 +14941,7 @@ packages: dev: false file:projects/arm-dns-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-6jkA53NekdbstrWe3SvTUdK+CcIEJjdyuwKyqmZlOuVm04+0EZgCjmijZYN/3quQCrFnukBHwrP4d2VVbxwtgA==, tarball: file:projects/arm-dns-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-T0wRLScYsY4szLLWEDd+V9ap7cyXs8jRV93nyNtSV5I9LvyV7tTrFDkFmNvnFHoUYvdmK4TfWPkSv9Vv4COwCg==, 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: @@ -14971,7 +14971,7 @@ packages: dev: false file:projects/arm-dns.tgz: - resolution: {integrity: sha512-HEM58a7DcKeutSbQVeZ3jdVaBeQbGn/4b8C58+XTVwaEljTCMbma2Nas20P3ehm2Wy9p3R9kz1ioUA9afWpjdg==, tarball: file:projects/arm-dns.tgz} + resolution: {integrity: sha512-TQido9uO82arRWzrTN0K1remElEhm2ouPkrvQEtOtQRIUl/84aLjasJjjsF2RDLRhwnm7PjDIo/oozZVAQXFyQ==, tarball: file:projects/arm-dns.tgz} name: '@rush-temp/arm-dns' version: 0.0.0 dependencies: @@ -15000,7 +15000,7 @@ packages: dev: false file:projects/arm-dnsresolver.tgz: - resolution: {integrity: sha512-DeLf7+7CkmmVIUt9YZSfoBhkxZNdk3QdqtlS8krdPjms6MZczMyc4xtFuXWbXrE8ejCrBvhAur1caIV576e+Gg==, tarball: file:projects/arm-dnsresolver.tgz} + resolution: {integrity: sha512-cXYXTCEm/jh3jlVQ8d7a1dCCqELzBsFshdreRd5Ly2NOx/IQ26C9fs20Txh16GN6b895cyziWsQd2zXefJajjg==, tarball: file:projects/arm-dnsresolver.tgz} name: '@rush-temp/arm-dnsresolver' version: 0.0.0 dependencies: @@ -15030,7 +15030,7 @@ packages: dev: false file:projects/arm-domainservices.tgz: - resolution: {integrity: sha512-7EqjjV4zyIaCTWxDU+h1f6asLud4RJF4fMBQ4uGizNy0Y4kxBWWa7zG9UJ3MsSkD6U3q+GSGx35QGYt2WaIYUA==, tarball: file:projects/arm-domainservices.tgz} + resolution: {integrity: sha512-56Z4MCVLd1HbrkYnH8JbLj7z1J9OPSPw/9kSyCNju0k5RB8LcJZt6gU8PNmfabcIhr98j9FeReHOIBbTxjzphw==, tarball: file:projects/arm-domainservices.tgz} name: '@rush-temp/arm-domainservices' version: 0.0.0 dependencies: @@ -15059,7 +15059,7 @@ packages: dev: false file:projects/arm-dynatrace.tgz: - resolution: {integrity: sha512-Uoemd4Ar2HBsOdh/+FqGAG1YW4h9Qk2GuV/QMlI9ahEvpQz1HeUAGM6azHHbNxDdBV5Lvd3p3JZvMO6QrQFTQQ==, tarball: file:projects/arm-dynatrace.tgz} + resolution: {integrity: sha512-7X2We+Y8snc3mGhkUhpBka7+vg42/KySiScTOBtj185VYJJ/LgCGCif+TXh6qY3w3Gh2MKA05FXhkpWeUgJx2g==, tarball: file:projects/arm-dynatrace.tgz} name: '@rush-temp/arm-dynatrace' version: 0.0.0 dependencies: @@ -15089,7 +15089,7 @@ packages: dev: false file:projects/arm-edgezones.tgz: - resolution: {integrity: sha512-a1ODenPYrH2Pc+Zf6INTAZNtAsti9ACPy8Vpz0cnZuLrDyUIm+eQJ3ynakAtYVqc3AEuBsBH3s+3G1CNZLqioA==, tarball: file:projects/arm-edgezones.tgz} + resolution: {integrity: sha512-lp8JhRQXr8dqHDjYDq3RUhpI2/vvzIxeQk655dFsc0Xw+QVvLlI/XrKdud+pD2CkBS81UYEg3VCJs4MC6HE3Bw==, tarball: file:projects/arm-edgezones.tgz} name: '@rush-temp/arm-edgezones' version: 0.0.0 dependencies: @@ -15128,7 +15128,7 @@ packages: dev: false file:projects/arm-education.tgz: - resolution: {integrity: sha512-x6BSagYZf8VqOMvVwS2MCGtyhVMapl42fkbhFnOZ3QWsD0wzV8erSQ8Yc+xkuZJ2YomexmEaWbimbNCHcyNGrA==, tarball: file:projects/arm-education.tgz} + resolution: {integrity: sha512-6s1hwNP3POhgx1UP1s5nCcMk9lCYjVLKaZq96w+AHz3a4CUSAMnrAWepnfqSHXOyzY8JGfUSsVIJ0QlnCbLHaA==, tarball: file:projects/arm-education.tgz} name: '@rush-temp/arm-education' version: 0.0.0 dependencies: @@ -15156,7 +15156,7 @@ packages: dev: false file:projects/arm-elastic.tgz: - resolution: {integrity: sha512-PSzS1KszY3iCaTiQ8PdeNs1dmiUfcvVfUYaOxivul9DmZGa7Fzn7N1w6PXjBcwmK9HhAPa4iFsrCJB/L58IsJQ==, tarball: file:projects/arm-elastic.tgz} + resolution: {integrity: sha512-2FKz7gVut3EymfgeZeq6x+sZtiOjZbQIv6ei1YmBfQ+8GObnZvyNY9l7i8DcrLlRUm/c3XpAbnfZWSXjMK4tJA==, tarball: file:projects/arm-elastic.tgz} name: '@rush-temp/arm-elastic' version: 0.0.0 dependencies: @@ -15186,7 +15186,7 @@ packages: dev: false file:projects/arm-elasticsan.tgz: - resolution: {integrity: sha512-4MMnTd/nW32J1g50ddHY5IdpRQf+v/I3sNjzV3Ba66iuJ0NGEnPp7bAxYU48fxowbaRUQxICJzV2bOSsfAVRmA==, tarball: file:projects/arm-elasticsan.tgz} + resolution: {integrity: sha512-Dq0oe3mUlmgcZODwRVKN6dmH57NPB2jSsbeoFVORgq7fUSpvOatHlJ6rlD7bARKiPY1z0sSKw4zT1FGP6XgsBA==, tarball: file:projects/arm-elasticsan.tgz} name: '@rush-temp/arm-elasticsan' version: 0.0.0 dependencies: @@ -15216,7 +15216,7 @@ packages: dev: false file:projects/arm-eventgrid.tgz: - resolution: {integrity: sha512-ffWmdtpwL+nEAZ2QP/XA8o3d6Aj4hV4mXQwBVcc+mmUTooGQaKDeRmtM22yHvgsue1adeRspsiEro1C72uxRfw==, tarball: file:projects/arm-eventgrid.tgz} + resolution: {integrity: sha512-4YK9IynwJXon9hJnbaeH4il+Yq2RjMdtBTxhzG52gkxmrNU8Lmyhf1gg2GYo+7sGjzweXu+bmoG7aYnQEDRuIg==, tarball: file:projects/arm-eventgrid.tgz} name: '@rush-temp/arm-eventgrid' version: 0.0.0 dependencies: @@ -15246,7 +15246,7 @@ packages: dev: false file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-gKfci7TRJeVa2haPo9T+5O0bCejD+6KISf9tm2zK73w9UdnQ5HjzNoeMK8pULQRRtW1DBIYdIGhpD0wQcq0i2A==, tarball: file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-q4eSlXelnKFJrtia8RshRPcr7JmE2I1M0l3XJS9CVDgHcq6c9xtMY+8naxW94MK2C4eT2gXc5ahteYeegSBUrA==, 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: @@ -15276,7 +15276,7 @@ packages: dev: false file:projects/arm-eventhub.tgz: - resolution: {integrity: sha512-lfSe6nQ7fPzbc+L69MCp4abRS9+vrcP1wgn5rtTcwpOAPTk1LmK6+3WOalQcpLwkbXkU/XKce1h0nKfh0iJJBg==, tarball: file:projects/arm-eventhub.tgz} + resolution: {integrity: sha512-NK8mDnu6HDMOlxun9X23Jc7OciDr5lidWZb/j0XdcRVaOWKdj4KHU6Pm6oIHAHdRQkJ320EqyErR1zd3uWiElw==, tarball: file:projects/arm-eventhub.tgz} name: '@rush-temp/arm-eventhub' version: 0.0.0 dependencies: @@ -15307,7 +15307,7 @@ packages: dev: false file:projects/arm-extendedlocation.tgz: - resolution: {integrity: sha512-euvVbog11FaHgYwp9+Y1UGHlbQ+MCA/UWJF5rutfFaIGSvwXbinRDjCID22NBEbbLvgynb4M+P1tBMldTgaf/g==, tarball: file:projects/arm-extendedlocation.tgz} + resolution: {integrity: sha512-/1oB6Ijpuu0oWvGgxE1qz+FvBRcGQorcbD9w9rnBoph/sHRVSc/ri43q/dZrUHd/0UiyiEtg8r37cEPdld4/vQ==, tarball: file:projects/arm-extendedlocation.tgz} name: '@rush-temp/arm-extendedlocation' version: 0.0.0 dependencies: @@ -15337,7 +15337,7 @@ packages: dev: false file:projects/arm-features.tgz: - resolution: {integrity: sha512-JC146AMN2BHFjNnvPP9OFtoz6VpyauZ8Xy1HzlFBtKvRWBbzr2T/ZyQM6tZD6VQqyly61yboTKL+ii7NgHoHzQ==, tarball: file:projects/arm-features.tgz} + resolution: {integrity: sha512-MGfIHL8E9i2mEsSj2AttXklT/ZhCUZ19LiTlRCilTPfp+Nv+pTncUpKdKRjD+TpDDBKwtt8g1tNbCzqNdUkXMA==, tarball: file:projects/arm-features.tgz} name: '@rush-temp/arm-features' version: 0.0.0 dependencies: @@ -15364,7 +15364,7 @@ packages: dev: false file:projects/arm-fluidrelay.tgz: - resolution: {integrity: sha512-ZegVJMtbz7wanxAKu2VuPOtxsN/8mUauieYW4EdHg5MkbWM3p9XHjjYeXLfZoawMVq/oJmVJet/E31sYu8/L1A==, tarball: file:projects/arm-fluidrelay.tgz} + resolution: {integrity: sha512-rXvs39Ibzkg1ZtOgo2uT9dmUDbx6VsRvngh/R2T0+M3PsV7JAOlVcMFkcaoREHabuqVmhb6kPtByc/4PmLLz0g==, tarball: file:projects/arm-fluidrelay.tgz} name: '@rush-temp/arm-fluidrelay' version: 0.0.0 dependencies: @@ -15392,7 +15392,7 @@ packages: dev: false file:projects/arm-frontdoor.tgz: - resolution: {integrity: sha512-DaJ5QSS7iZIxm8z8+bbSnYZQ55JuGoxN+2AIN/g9WLZs1Za1qIb5CyR/VxtGws/dfl4QA+/CNPmDY+8rTdGjTg==, tarball: file:projects/arm-frontdoor.tgz} + resolution: {integrity: sha512-Q+PsEBRiSD+MP92WrQ+lPLwf/EJ7xN1+s4jDikUujkb7rBZhjKoK2fpmipU0itBTSsk0w9GoGUdI06ou99zriA==, tarball: file:projects/arm-frontdoor.tgz} name: '@rush-temp/arm-frontdoor' version: 0.0.0 dependencies: @@ -15422,7 +15422,7 @@ packages: dev: false file:projects/arm-graphservices.tgz: - resolution: {integrity: sha512-5L9ydnPtfb1lsXMfxOBtubcmoFn18vOY9nFiutgQtRAqCidqtu1TBgqwr4W7WyM5yVHfSoqFibGn0W6K5DtDeQ==, tarball: file:projects/arm-graphservices.tgz} + resolution: {integrity: sha512-x9vMJoX3X95EfiVgv4Md4UtITfKsSlGx8njAAXOK7jJG6H1LT8q3TGGU9yr+revgdbM+tOyd7LPHSpYHloUz7w==, tarball: file:projects/arm-graphservices.tgz} name: '@rush-temp/arm-graphservices' version: 0.0.0 dependencies: @@ -15452,7 +15452,7 @@ packages: dev: false file:projects/arm-guestconfiguration.tgz: - resolution: {integrity: sha512-pwV6vn0IbJGXQuS/Oo6m1DkcH71ClCzZQM47ZzhZxLWX3JPq5ex+gDjPV6/jvwB3JlP2qGn1DDC4tw+4b4ARLg==, tarball: file:projects/arm-guestconfiguration.tgz} + resolution: {integrity: sha512-KL9d6HUsLs9MzQ/PQjuhRgFRGH8rPhZOiFEZ5jZoTZpRU1rMtHN+NzOcc46B2NG9XY6eaCeeLrWk2g3Gh9F1sw==, tarball: file:projects/arm-guestconfiguration.tgz} name: '@rush-temp/arm-guestconfiguration' version: 0.0.0 dependencies: @@ -15481,7 +15481,7 @@ packages: dev: false file:projects/arm-hanaonazure.tgz: - resolution: {integrity: sha512-eLmdDQCUnf2uwgVHYszlH5lHQ78p/m7JuCHEoPPTJCjcfQzMiTLJeIbMxJ+ihO/snTeFSXM1rWqk6vit2XD1sg==, tarball: file:projects/arm-hanaonazure.tgz} + resolution: {integrity: sha512-wZxajkX2ZA29UZ0z8VWxJ1lRVXCQ7tU8EwPt9C65tzBGzTcPmynTYrOPxf9jvHhEZ3v/PsfFRRw3hMseznWArw==, tarball: file:projects/arm-hanaonazure.tgz} name: '@rush-temp/arm-hanaonazure' version: 0.0.0 dependencies: @@ -15510,7 +15510,7 @@ packages: dev: false file:projects/arm-hardwaresecuritymodules.tgz: - resolution: {integrity: sha512-SxVTbdWxK7Fucy/5J028MoteqC3gQcJBGV7NN16+BdhQeW3C67ESFXy7E3zapWfZq8qBqBjw+M4r4hDPA1sirw==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} + resolution: {integrity: sha512-hBnfSYvy4U1rdxPIrXrbE3V/loLfiq0nz0D0cvuP9hDdCgwpm4uBE0z4Q4oAzPG/JIZlZGhpCBqbzZ6Qk1gMpg==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} name: '@rush-temp/arm-hardwaresecuritymodules' version: 0.0.0 dependencies: @@ -15540,7 +15540,7 @@ packages: dev: false file:projects/arm-hdinsight.tgz: - resolution: {integrity: sha512-A4Q0/EIreGCf/t+J6DolGF8wsuBun8IeEpiWzRSKp8fE/okeb/F/Cq+6rJjZmAXopoSaXUAbn+Nqu/z+yOW+wg==, tarball: file:projects/arm-hdinsight.tgz} + resolution: {integrity: sha512-eiFm7PPic2gShSdrXChLKrHzziw3RjxQ+cs7C3VChzB3M8ug+f8VOLNrUpc9lb9/AMjMxi6PjDQXAxKuj6M29A==, tarball: file:projects/arm-hdinsight.tgz} name: '@rush-temp/arm-hdinsight' version: 0.0.0 dependencies: @@ -15570,7 +15570,7 @@ packages: dev: false file:projects/arm-hdinsightcontainers.tgz: - resolution: {integrity: sha512-bb9vJOVtfI7fzJLpOWd0mvmNqkYBZDF7S1JV5BG0BWGUOXg8KddZ/D3PMY9muhnfotX8Lwrk+LJyPiI5sjifwg==, tarball: file:projects/arm-hdinsightcontainers.tgz} + resolution: {integrity: sha512-hm1Tc36raFlmTzX7tpUJGZdiAn+FK1f0Nr7Vzoy2D8b+3lXIZ+6zEinSI8nXRq/GWlGNqSpIAN4FAyOVbG+qQA==, tarball: file:projects/arm-hdinsightcontainers.tgz} name: '@rush-temp/arm-hdinsightcontainers' version: 0.0.0 dependencies: @@ -15600,7 +15600,7 @@ packages: dev: false file:projects/arm-healthbot.tgz: - resolution: {integrity: sha512-djZlyZzHlBCFIYcJ3NySW3fo+BlVJg4cjZoEbaw2sdiikwOeYL2t2lVgeEmpvIN8zT7PKHgt/BAvvRYsV0KCyQ==, tarball: file:projects/arm-healthbot.tgz} + resolution: {integrity: sha512-Un9Xwt4cbaqeYJ8q7I2VjYPsPPpRDA+F4xd5buuLouAZ0ClO8Gaxbl4lurygVW7NjgUICSFyE92q5SDyFZ3AkA==, tarball: file:projects/arm-healthbot.tgz} name: '@rush-temp/arm-healthbot' version: 0.0.0 dependencies: @@ -15629,7 +15629,7 @@ packages: dev: false file:projects/arm-healthcareapis.tgz: - resolution: {integrity: sha512-H2TxLJcRhEfs+RFIQe+ffVdrxW6uDcjzfqz6F8avIlJlAhNTz5JuFowd7BLCnU99dJ+q+Aj8psZcINkIIPuYQA==, tarball: file:projects/arm-healthcareapis.tgz} + resolution: {integrity: sha512-6r25yGtz+tFpT29HNr2hsonsx/pZSyrbKyLa/QOuAf1PZwidLMkiKrJP5zDsbdlluRSe2tZMxgp7ZLb/9HwsDA==, tarball: file:projects/arm-healthcareapis.tgz} name: '@rush-temp/arm-healthcareapis' version: 0.0.0 dependencies: @@ -15659,7 +15659,7 @@ packages: dev: false file:projects/arm-healthdataaiservices.tgz: - resolution: {integrity: sha512-CF1NDRC0Si5iOWo1neCbCN6TlFoUDMIspbbEYrjZ5hIFY8CbPG8hwvDMy7rRBrvt396JGlJ4slwOobF728jMEQ==, tarball: file:projects/arm-healthdataaiservices.tgz} + resolution: {integrity: sha512-G1zldD0alfR8kMUj59ex3H7X+PSn16c7wcRzEYK2FRcMl+hIJslhcxym931WVCkecPCdMUD123PmFC1PuS7xRQ==, tarball: file:projects/arm-healthdataaiservices.tgz} name: '@rush-temp/arm-healthdataaiservices' version: 0.0.0 dependencies: @@ -15698,7 +15698,7 @@ packages: dev: false file:projects/arm-hybridcompute.tgz: - resolution: {integrity: sha512-wVSrm4aoTJmUA1s14d3er3Gl9qTN+62er6kypTMV4tOc8+diDsA98xMlu0/GJFes8efUbc6QiJkymgo10+gDag==, tarball: file:projects/arm-hybridcompute.tgz} + resolution: {integrity: sha512-piHmNUXYyLYB3zYcjPVPoB2JlkIrf60nv+aGdOG/Uo5lqXDa4vjd2MY2yFITHVKZGDudVNZQPEWgi+27vwKzLg==, tarball: file:projects/arm-hybridcompute.tgz} name: '@rush-temp/arm-hybridcompute' version: 0.0.0 dependencies: @@ -15729,7 +15729,7 @@ packages: dev: false file:projects/arm-hybridconnectivity.tgz: - resolution: {integrity: sha512-J0NmmLjlF9UyHtazlLl3+2q5ql9QKOe32CwTYW4KyPC3GcHWQV9I+A+epI80pWsP2ZRACngdcunGhXnR562pZg==, tarball: file:projects/arm-hybridconnectivity.tgz} + resolution: {integrity: sha512-1lBPG78GcJzp2UAt2MFD2eH614bbwxd5E+Mtrskcik1ud+X2afpPYCCEh+jpfY0RCQPlelzVeajjyIHVNYWBhg==, tarball: file:projects/arm-hybridconnectivity.tgz} name: '@rush-temp/arm-hybridconnectivity' version: 0.0.0 dependencies: @@ -15757,7 +15757,7 @@ packages: dev: false file:projects/arm-hybridcontainerservice.tgz: - resolution: {integrity: sha512-ht2gOs6v/de7bvKzQqGcn7F1QAL0Dc0kRWKXL21bamQkBZP3xK8mEoBIYab/bOJY2TfYD/GvrTamTsRnvow5Kg==, tarball: file:projects/arm-hybridcontainerservice.tgz} + resolution: {integrity: sha512-1W5YjPnicefzPEWvpWRyqwe+1D/ZhSH58N5GAFgvoBsjw81E04i/NJbVkLCKCOJ1w/ok6yrsj8Re53Sx/KXWHw==, tarball: file:projects/arm-hybridcontainerservice.tgz} name: '@rush-temp/arm-hybridcontainerservice' version: 0.0.0 dependencies: @@ -15787,7 +15787,7 @@ packages: dev: false file:projects/arm-hybridkubernetes.tgz: - resolution: {integrity: sha512-v7BI3tLh9LWioPyw1bi7cqIl6qtiFLnymo0AXZ5RP8UJoAK75tFBQv2SDUs8YMwzRnnfFMKeLrVGz9a2weQpgg==, tarball: file:projects/arm-hybridkubernetes.tgz} + resolution: {integrity: sha512-RvxwgLVmfXu54T/ctLrBUFnVTKi2bLIxsYyuXagrnsKwp46ftByNLhXFJ3cS5HD9Ks+wwoFhlVIxTxPFqtYQrQ==, tarball: file:projects/arm-hybridkubernetes.tgz} name: '@rush-temp/arm-hybridkubernetes' version: 0.0.0 dependencies: @@ -15816,7 +15816,7 @@ packages: dev: false file:projects/arm-hybridnetwork.tgz: - resolution: {integrity: sha512-si3XV4/fqNlcVL4/y6Vca84ATqwLbyKfyPmHTCErA9xCE/aH3bWXwFjsL8fuJgNgUQQy1QIjO8wJMgJIV+O+ZQ==, tarball: file:projects/arm-hybridnetwork.tgz} + resolution: {integrity: sha512-ITLTEI5ghuWfP13b+ABHsD1F4njTNICDQArXeslsT49uH+KEN83aHn7Comw6vL8/27yS6hpUUDX2sQVfUvUktA==, tarball: file:projects/arm-hybridnetwork.tgz} name: '@rush-temp/arm-hybridnetwork' version: 0.0.0 dependencies: @@ -15846,7 +15846,7 @@ packages: dev: false file:projects/arm-imagebuilder.tgz: - resolution: {integrity: sha512-islzKXCverh55F/8bwNWnF4ocA6k4XZlCbinA4+4XRneUPoac7nP5XKWj3pfRAPS1p0R9hJwTLHPsAIvwLTxbg==, tarball: file:projects/arm-imagebuilder.tgz} + resolution: {integrity: sha512-pQoZ4wc8j0MjhyKzsQLomLQ1Opl4DtzihWSX2ZdbvXJkS7KYRE6YH1Vh/M1tfYgOeS6XLQuiB0E+0BXhspx4ww==, tarball: file:projects/arm-imagebuilder.tgz} name: '@rush-temp/arm-imagebuilder' version: 0.0.0 dependencies: @@ -15878,7 +15878,7 @@ packages: dev: false file:projects/arm-informaticadatamanagement.tgz: - resolution: {integrity: sha512-0LiOfzmcuztZNeC0aPA8aSrLQwpWuI2m9mtRslQFvuXtIio4lo8KCmWmn52V8Dm4b+6iBV92WnyDpdv6F1Vuew==, tarball: file:projects/arm-informaticadatamanagement.tgz} + resolution: {integrity: sha512-4ZoBX8l7MMUojMK0UPDFYD+WekFgLiDDH1gXAxCxbiQK7DsI6slk4e1jA92nZVKhcOeKjQlvxUazv3npWw/7aA==, tarball: file:projects/arm-informaticadatamanagement.tgz} name: '@rush-temp/arm-informaticadatamanagement' version: 0.0.0 dependencies: @@ -15909,7 +15909,7 @@ packages: dev: false file:projects/arm-iotcentral.tgz: - resolution: {integrity: sha512-/Qvnnq9+sxa4zdmQN5Eo/wvtOQWMQ79sMuhcLAJYDUVRPqO/EXu+0y26GmEHIKA5WVwk8X2flk994h41h1gs3w==, tarball: file:projects/arm-iotcentral.tgz} + resolution: {integrity: sha512-fosSiBVeZQ5JB05Itdf3WvfnHR/TefNuVz8d6g5sDnKl7E7T6T82s+k0YD5G/kRenAIBY5kmt4ZlrQxEBaAgJg==, tarball: file:projects/arm-iotcentral.tgz} name: '@rush-temp/arm-iotcentral' version: 0.0.0 dependencies: @@ -15938,7 +15938,7 @@ packages: dev: false file:projects/arm-iotfirmwaredefense.tgz: - resolution: {integrity: sha512-doiYgE57iB0TicEeHoMrq630z4WKYXK/ukWmVEHor/WRimO35ibH9I+KyJxLTdcEifSNWnz2ZeUTnijWuZKmtA==, tarball: file:projects/arm-iotfirmwaredefense.tgz} + resolution: {integrity: sha512-TfKu8JeMfAq72ebbUwKck2nTo2SWtoOQWh7jq07Hj8y9wLPslALsgA0qcq8Glp6Sn5tHNNMylFM2hJzizsoZAA==, tarball: file:projects/arm-iotfirmwaredefense.tgz} name: '@rush-temp/arm-iotfirmwaredefense' version: 0.0.0 dependencies: @@ -15966,7 +15966,7 @@ packages: dev: false file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-7qxWlLzN8YRbVTvvVQZlGC/Q6FKSvg159gIppOmZCEWSGcuUyYEltBMei5YMdMcMBjVUz8cGEgboxtxQRk0UKw==, tarball: file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-FcawHki0FZv8yC0S8k6sXEGB3nsU+tQNeGgX7B+vYqd7f3P3VgZN38c6NrUoh+OhhMf7ltR2Aowh34nKqVcqgg==, 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: @@ -15996,7 +15996,7 @@ packages: dev: false file:projects/arm-iothub.tgz: - resolution: {integrity: sha512-O/UxFqlG4xDI6fWlDg4tPSftTzbJyEQkiwzGOBxdA8CQRkJ3lRGc+AFnaP8h4J9tQYhjTmqQLnscuf/5x3HF6w==, tarball: file:projects/arm-iothub.tgz} + resolution: {integrity: sha512-6crX2NptM1qipMJXg/l8rBrmuQBmqWEtAaDPpZqJEeTkrlD5pLhku4lzWWqGTXWJHF+FxKhUwTnkA+t/IchOUw==, tarball: file:projects/arm-iothub.tgz} name: '@rush-temp/arm-iothub' version: 0.0.0 dependencies: @@ -16026,7 +16026,7 @@ packages: dev: false file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-bQrFhpP8CJJfhV/SLL2k9heS+qdcoJL1o8gBRCkLmsD0Gon6ydn9tlOADVmdCfjI5Yz54tZ7+6Abh2/ZedSsoA==, tarball: file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-OjdDNN+VYA9TfURM59pA9Obn9bnLeqPk/sEuOIx9w5J1McACr6yZ5yu9yi5bxUxLU0RHoHJ6Ni9SekY1RQmokg==, 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: @@ -16056,7 +16056,7 @@ packages: dev: false file:projects/arm-keyvault.tgz: - resolution: {integrity: sha512-d4SHaoFUpJ8ih0zU9UoXoyYctaT5i3Loy3CZbIyQzCIXGzfwLFWzL1e5H5n90oqZHTtyuYeIICJajnoY6/3MaQ==, tarball: file:projects/arm-keyvault.tgz} + resolution: {integrity: sha512-mAsdypSGZnV860kD/SzwQDh1oRZta3XsBNoodgaaboXIsy/IWLU5eyq52IpW8TKAikgn8+zuSdw5WNtlWMjzag==, tarball: file:projects/arm-keyvault.tgz} name: '@rush-temp/arm-keyvault' version: 0.0.0 dependencies: @@ -16086,7 +16086,7 @@ packages: dev: false file:projects/arm-kubernetesconfiguration.tgz: - resolution: {integrity: sha512-PeJIHi0FLgfPhWTxibDl9ERZsC2ab3ODUpudD+QNJrrfdRNWdV/hI1tFOTbmkkeszC1KOZnTL/Lnf1XP1heUGg==, tarball: file:projects/arm-kubernetesconfiguration.tgz} + resolution: {integrity: sha512-y3uDo/SkP9RO1w5oC8d4fTIK6sYoN2R8bDfoP+8iYO/UtZMWWYFqTP4uey7TrzvN24Q4zTtj0K7yGnlm4tzQ8w==, tarball: file:projects/arm-kubernetesconfiguration.tgz} name: '@rush-temp/arm-kubernetesconfiguration' version: 0.0.0 dependencies: @@ -16116,7 +16116,7 @@ packages: dev: false file:projects/arm-kusto.tgz: - resolution: {integrity: sha512-gqmPjiPvhj7qkkKamq+Oc+rKuEgiEX0WOJU1EV7v8McQ29mN4+9ijv0Zg27ny6Ak5PRs1OJkuajlrOE/a+FQcA==, tarball: file:projects/arm-kusto.tgz} + resolution: {integrity: sha512-1iLqzDmxcFYUWXhy+/4h2fBFd2zcflAIWO+l0oyAOFAdQ483TZhYnj9lZ6Rd3Bju+VJoqnRPFEaY3nsDARfUFQ==, tarball: file:projects/arm-kusto.tgz} name: '@rush-temp/arm-kusto' version: 0.0.0 dependencies: @@ -16146,7 +16146,7 @@ packages: dev: false file:projects/arm-labservices.tgz: - resolution: {integrity: sha512-s06WQJqFbyrJo5/Yx/tCqeTwOf7TSkXmR4yiVDLK+JMNo+jkJ0HIeZGsbs0HNUAHvc7bS46QB0YXqjk/DzeLpg==, tarball: file:projects/arm-labservices.tgz} + resolution: {integrity: sha512-XftGsqcYoMhDToF9DoN5u2nRV3n4po2YuQnK6Clmh9GhogTMjlZVgSDpo9m5BJXwNEuQ5aKCZ4lyJ/CpC/P+wg==, tarball: file:projects/arm-labservices.tgz} name: '@rush-temp/arm-labservices' version: 0.0.0 dependencies: @@ -16176,7 +16176,7 @@ packages: dev: false file:projects/arm-largeinstance.tgz: - resolution: {integrity: sha512-nxw49eTw7jgUG3juKHFKgTdCOdu3gclWovPnKmR8FVOQVV2e1cbG0kiqayVRbaky5LGJQufkqDG9Fjy/uUaE1Q==, tarball: file:projects/arm-largeinstance.tgz} + resolution: {integrity: sha512-CeP557neBJiOaz9VTIRAxvkAJZ3JSqzn/V7CbBbSfTzIRuE/7XtalUUC+Y8WMJ1ezCaCAxpbcdpFqxCBl7iQPA==, tarball: file:projects/arm-largeinstance.tgz} name: '@rush-temp/arm-largeinstance' version: 0.0.0 dependencies: @@ -16206,7 +16206,7 @@ packages: dev: false file:projects/arm-links.tgz: - resolution: {integrity: sha512-77W4N/QEPk1aUeJ0c7ZuvuEZoa8I2z35s1nsr/AE+vIYShd5nvvzkKpLZu8D9/jMueOUqcfIRMmkw6h5rjWLbA==, tarball: file:projects/arm-links.tgz} + resolution: {integrity: sha512-Y+DsaW/LpnG+5Qmc8a0VBSAdq+1su29A6BMyBHj+wMXpeZJ7HImBNBygbhIEcK1bmLkurFNofPkQHsCtNbPUPA==, tarball: file:projects/arm-links.tgz} name: '@rush-temp/arm-links' version: 0.0.0 dependencies: @@ -16233,7 +16233,7 @@ packages: dev: false file:projects/arm-loadtesting.tgz: - resolution: {integrity: sha512-Uys9CZWTv4+u4g3aPfxf1aeMp82W/tb7U9GKNWY1rMN7gBU/X1Yt3ypbjidVdBg6x6htCpeXMyIRM495PY4o4A==, tarball: file:projects/arm-loadtesting.tgz} + resolution: {integrity: sha512-bZ3xgB1ce48ivsojJyX2Z/bDBrbE3MBrL3b25iT2rL99ch8KfMq+TEag9qmK9PI00d2Vt2OyuHUYF2Xgd+1AoQ==, tarball: file:projects/arm-loadtesting.tgz} name: '@rush-temp/arm-loadtesting' version: 0.0.0 dependencies: @@ -16262,7 +16262,7 @@ packages: dev: false file:projects/arm-locks-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-397ngzkRIA8R4IHxVGDc64H7JorWl0dxb3LmppqSzzZZnu1dHONNdMOQ1qZ+V0LTQ/JHc+ktEAWQw4ri+YsHOA==, tarball: file:projects/arm-locks-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-teHSP9EbN1mfRR/lCbVqY0oRrIe0TmQSjIsvIPPY5vWhKRLqPZG7w3L28dBGVGbVl5xym1aFNdNA3UUqqM8K2Q==, 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: @@ -16290,7 +16290,7 @@ packages: dev: false file:projects/arm-locks.tgz: - resolution: {integrity: sha512-kCLLnPHTxyoHMXmAf3crhdzZU8fknOW6KzzhmY3pneYJeaYAaqEGe1G4O8fm0m3vvovZr0P0BRnnHXDkcKz90g==, tarball: file:projects/arm-locks.tgz} + resolution: {integrity: sha512-fjx7WwF1FZXvueJlmzW3YvUDLst/opNODcZ5Ynxg0yb6NdT5drCw/UqHI95meMkw3QSHSK9maPVpBNXlTJQ9LQ==, tarball: file:projects/arm-locks.tgz} name: '@rush-temp/arm-locks' version: 0.0.0 dependencies: @@ -16317,7 +16317,7 @@ packages: dev: false file:projects/arm-logic.tgz: - resolution: {integrity: sha512-ZtKW6fgn/4Pdgx8/Ja80iNjOAAw7KjsBSntt+z0AsPh48ZeKaYpsVUShezXGrtVKu+2ys0xWwtzfxvj8+yI6yQ==, tarball: file:projects/arm-logic.tgz} + resolution: {integrity: sha512-LIvScE9B4gqqPZNMMN3U31LaM0tx1pe5uNJQvMluH4GHsHwDcDas+Z9raikvHFwJN7KAyatyOSk3yaGSqeW40Q==, tarball: file:projects/arm-logic.tgz} name: '@rush-temp/arm-logic' version: 0.0.0 dependencies: @@ -16347,7 +16347,7 @@ packages: dev: false file:projects/arm-machinelearning.tgz: - resolution: {integrity: sha512-ivBIVTHfvuUmyylYEA5RXHcHqvRckkFNe9SE3elSZ4DT6E2r8k2tjjMTQgviOH/CCbgqKirUnXEJzsOmnHhLuA==, tarball: file:projects/arm-machinelearning.tgz} + resolution: {integrity: sha512-M5XIsO3iqa2ZE6Oz6L77iser+TQJsVUda306A42AVPTONARb8kZryDEuw1wIRW/UJ3O9nxEErWaZlj4KoT6EMA==, tarball: file:projects/arm-machinelearning.tgz} name: '@rush-temp/arm-machinelearning' version: 0.0.0 dependencies: @@ -16378,7 +16378,7 @@ packages: dev: false file:projects/arm-machinelearningcompute.tgz: - resolution: {integrity: sha512-Pzj6H7bmxBh5MVaE6b/ZC/8i6EfJm1ORXahqbbDa/McjzbfbktzRNRa9n5+TzomSou8EdoQRmjekG3+OPQbE9w==, tarball: file:projects/arm-machinelearningcompute.tgz} + resolution: {integrity: sha512-BYuhNPStN7SUpITR06rb8+1r1DaTJzxNDhrK/r+KM3RaIg7AUl0j80dgpFGS3cIXcLI05h+NSoK4cp/ap9vtqA==, tarball: file:projects/arm-machinelearningcompute.tgz} name: '@rush-temp/arm-machinelearningcompute' version: 0.0.0 dependencies: @@ -16407,7 +16407,7 @@ packages: dev: false file:projects/arm-machinelearningexperimentation.tgz: - resolution: {integrity: sha512-kAt9wUtbr/YDNSvhJXeFeMlRP/TQF6Rw3yXI+wIlQ9gbZMKUp4v9omKBK5wxjsMvM7HP5080HdKGjIst+OFNdA==, tarball: file:projects/arm-machinelearningexperimentation.tgz} + resolution: {integrity: sha512-SeKlFZD0c/o7e2wddKf9hrorOq6N6BnYj5AuDYUbJU1dXCKxm58yFK7GsSzaD6jgKiXHYJDs4YPSBErX6hGIfw==, tarball: file:projects/arm-machinelearningexperimentation.tgz} name: '@rush-temp/arm-machinelearningexperimentation' version: 0.0.0 dependencies: @@ -16435,7 +16435,7 @@ packages: dev: false file:projects/arm-maintenance.tgz: - resolution: {integrity: sha512-ORZ91RzlksgOwd86ITBlZPukgCaoHDS3mCy3GrhMlQBQedaM6gWxeb4jXKhuaBwB7FwZ37fXs0geZ0IfZdTiSA==, tarball: file:projects/arm-maintenance.tgz} + resolution: {integrity: sha512-P1/U3MpI2dKKpUJtvmJw6ooV3RbZO5E8HbaLBTWuX4dtfJn0SmXeQCUkNsjLh3F9bk/OzBzW4380xswaeexeHw==, tarball: file:projects/arm-maintenance.tgz} name: '@rush-temp/arm-maintenance' version: 0.0.0 dependencies: @@ -16464,7 +16464,7 @@ packages: dev: false file:projects/arm-managedapplications.tgz: - resolution: {integrity: sha512-Tgx2JI0Um66nz+Qvvf5IcIrFqK7m1UP2NrILFqiBnx2YzFdVlYqhkjnnpheYHSfWeFdwNEmmZkpgX9EiS62f1g==, tarball: file:projects/arm-managedapplications.tgz} + resolution: {integrity: sha512-CPa8cqojz6HZnY6P/sSYVlHzP91NNQe5BdDJ/CEqshUifWnZRdf/jEu4eZstZG+96v/2iTud0Ks0pibP1tC6lQ==, tarball: file:projects/arm-managedapplications.tgz} name: '@rush-temp/arm-managedapplications' version: 0.0.0 dependencies: @@ -16494,7 +16494,7 @@ packages: dev: false file:projects/arm-managednetworkfabric.tgz: - resolution: {integrity: sha512-Oa4tib1P3/Vl/5Zxcehhw/gZ8R9qHX5bqIX6AVlnMPBIE7dh4s1V3nARVhdvOoIW2T71qKkpS3sbrJprbeSIyw==, tarball: file:projects/arm-managednetworkfabric.tgz} + resolution: {integrity: sha512-HYuSPX8VhZnIx7CSh3UZrFjcf5gZ+BM/HSH3qyFXf1hltwAjsL9ybmVbVOQwkESVQNUiYQozkla9c1qUZYzcew==, tarball: file:projects/arm-managednetworkfabric.tgz} name: '@rush-temp/arm-managednetworkfabric' version: 0.0.0 dependencies: @@ -16524,7 +16524,7 @@ packages: dev: false file:projects/arm-managementgroups.tgz: - resolution: {integrity: sha512-KSBCI9eHOxUjjQmeQe1fPMySAX2Q3c1lzZQyOUGEYIMBOmG863BmvLzYjspeNU9wAH4Thg+067BmCrJlNVeELw==, tarball: file:projects/arm-managementgroups.tgz} + resolution: {integrity: sha512-9ZS5tvMtUp97EmDzp7I1P9HTS+UcRTomcebl8U1CZ9hsZFMmBs1K7x+CVStcqiDqBQPjUJlEbgXxxnR7UwdIqQ==, tarball: file:projects/arm-managementgroups.tgz} name: '@rush-temp/arm-managementgroups' version: 0.0.0 dependencies: @@ -16553,7 +16553,7 @@ packages: dev: false file:projects/arm-managementpartner.tgz: - resolution: {integrity: sha512-SYCt5jbdsnqn0cA06a3veCjG3KYMddxT8fxDxcNDXiul1FFW17hz3eowj9XU4nUgw6vaZsQLqKe2lr0C+1U0yw==, tarball: file:projects/arm-managementpartner.tgz} + resolution: {integrity: sha512-ekusxRpU6OgcziAqKtSlPiwAsUg6zvFBnT9e1LMPvhMffKamJVCPrRxL20cJsVBEjltmEJ4Hb63mVOYL38QImA==, tarball: file:projects/arm-managementpartner.tgz} name: '@rush-temp/arm-managementpartner' version: 0.0.0 dependencies: @@ -16581,7 +16581,7 @@ packages: dev: false file:projects/arm-maps.tgz: - resolution: {integrity: sha512-E8odHyxulJUFIBcJrZtdg0n31xTKBxIRMUb8NSWY1ltWfs7xK4Pe9jBLxjO3rcKNd/9ba6yg2ySlw/IPnaOxpQ==, tarball: file:projects/arm-maps.tgz} + resolution: {integrity: sha512-xOZK6H1/fQ4HTN1iBaKgnybbyMYAw1leEjvXZTlELyh7LGzI0aDLR2MUy5c9p+nFRRJ6JrHtF1H2VEaTYPbHYA==, tarball: file:projects/arm-maps.tgz} name: '@rush-temp/arm-maps' version: 0.0.0 dependencies: @@ -16609,7 +16609,7 @@ packages: dev: false file:projects/arm-mariadb.tgz: - resolution: {integrity: sha512-Ayr9QSTKJcl22+VC4z5L8sF3IZ3KWqdg4QfzTj9Jcw+9rkmeAljuhffChhFO0fHWZVCSKTc+vg0ukszMsM4LAA==, tarball: file:projects/arm-mariadb.tgz} + resolution: {integrity: sha512-lM0jUZoGL6lmrXuBaBqC32xrLXNNVhQK4rDSDrr5zCRiLcTOhx/Izq1UeH3MeZ6GktHpb44YxWsJ5Mwwy86yxw==, tarball: file:projects/arm-mariadb.tgz} name: '@rush-temp/arm-mariadb' version: 0.0.0 dependencies: @@ -16638,7 +16638,7 @@ packages: dev: false file:projects/arm-marketplaceordering.tgz: - resolution: {integrity: sha512-RCdmOBGZd+KCgKSzERWTS+o6ejsXkFrWgEDSn2+gLMKnhQAkEju8NW3HhJK3mRcL4+Fk71hBvARJZ3tERX9YKw==, tarball: file:projects/arm-marketplaceordering.tgz} + resolution: {integrity: sha512-llY6+RlVFzuBcEDYRJcepuvqt5pGbwgRO3miV++wjrOy7STHBqbNkpzpKt6YzmkD9OYQ6lOZSLGbuc5kpp/HSw==, tarball: file:projects/arm-marketplaceordering.tgz} name: '@rush-temp/arm-marketplaceordering' version: 0.0.0 dependencies: @@ -16666,7 +16666,7 @@ packages: dev: false file:projects/arm-mediaservices.tgz: - resolution: {integrity: sha512-JXngI++KGqABQ9KdSUTHDUofYRqFis84zld3zXaM0NhYOGzD/VQlt/nna37GeUxPCSzSwGu4wEQCZJmxSOFPcQ==, tarball: file:projects/arm-mediaservices.tgz} + resolution: {integrity: sha512-sbg58adT6WrntwJOrnTm/YB6Hw7uP7qFxoOYpRqTMNTj5Eju72OxjI8xTyLFXGGwmEbePB3Xfcx33nWfLo0wmw==, tarball: file:projects/arm-mediaservices.tgz} name: '@rush-temp/arm-mediaservices' version: 0.0.0 dependencies: @@ -16696,7 +16696,7 @@ packages: dev: false file:projects/arm-migrate.tgz: - resolution: {integrity: sha512-D2ziVjUauGJhs0mOugbCt0RaKbARoa/MzwaS3JMyUipuBjW8aP7NYTT5Xxv22L90cp8CS0/7lXeRTC+l0SHOtw==, tarball: file:projects/arm-migrate.tgz} + resolution: {integrity: sha512-kQsavrqMgvUmMmLVn1hB0k+Tv4JYGbtdu0StZP1G41cAavGEIPoN8gjo80Z+qlA5EoKZMTtsLa9pbYuSX5nG2w==, tarball: file:projects/arm-migrate.tgz} name: '@rush-temp/arm-migrate' version: 0.0.0 dependencies: @@ -16724,7 +16724,7 @@ packages: dev: false file:projects/arm-migrationdiscoverysap.tgz: - resolution: {integrity: sha512-/P6SYy2B34+g5i6qwjfh93l82yec2/Lggksin90VUk2Fk+XjOTI0bin66U5lGTK5NtKCFgMiK7qqfVwViXaDgQ==, tarball: file:projects/arm-migrationdiscoverysap.tgz} + resolution: {integrity: sha512-MFas9Xa5dhHjq09P9iuwEQJYJb1Fhad2QPY+C+o9ZmzrEeC0Npn//8gMvGWBFRS/3bKIM4IzDL8mqgQh9TieJA==, tarball: file:projects/arm-migrationdiscoverysap.tgz} name: '@rush-temp/arm-migrationdiscoverysap' version: 0.0.0 dependencies: @@ -16754,7 +16754,7 @@ packages: dev: false file:projects/arm-mixedreality.tgz: - resolution: {integrity: sha512-KIrpFbQr38stzzEaqXBeN2Oc/bn18FJ3FN/+dfyNTvA7uYfMbdjOBkEyNK3TuRV1N8HnECGkKtFEuXKMKAKJLw==, tarball: file:projects/arm-mixedreality.tgz} + resolution: {integrity: sha512-zJLTxA4/fqv6xj/LRPpeFgKxVT2qXYd3sKaDjziIxXaKZZFhxHfkVnda42B4Gs1NciT/vhfCMOW8m1+SCjqvdQ==, tarball: file:projects/arm-mixedreality.tgz} name: '@rush-temp/arm-mixedreality' version: 0.0.0 dependencies: @@ -16781,7 +16781,7 @@ packages: dev: false file:projects/arm-mobilenetwork.tgz: - resolution: {integrity: sha512-r5bB6QxOf0c+TNAEUyfVuu+lFYCsHmAIa4Jx9KyoUcJOFj07VzYzl3hn0WAA35iQznHwfvuEzQGCEXwlLiBxgg==, tarball: file:projects/arm-mobilenetwork.tgz} + resolution: {integrity: sha512-N41+/v5rZblZCQA7UILLXSZKe8Mf2H9zoCe8Lr+CoisBaD7CMqv+LXnt3HKAa4Gs//sLUD5jAl3D/7abg0TImw==, tarball: file:projects/arm-mobilenetwork.tgz} name: '@rush-temp/arm-mobilenetwork' version: 0.0.0 dependencies: @@ -16812,7 +16812,7 @@ packages: dev: false file:projects/arm-mongocluster.tgz: - resolution: {integrity: sha512-raFfgPs1Hu3wBb7VpV9CK2wHbzMDbwLT4QMo6MaQb+CjRWwNZKZPnRNYJn9apHdn2+cop3f3AZ2XtgcP6ACnGA==, tarball: file:projects/arm-mongocluster.tgz} + resolution: {integrity: sha512-ax+gaiEayEpP3OYAQNpTSDxMe3RfgZ71Q+9sY0nH7d0uadLHgbkTVDa2omSG7C7KqYx/E1JbObxiHf/K0cE5hQ==, tarball: file:projects/arm-mongocluster.tgz} name: '@rush-temp/arm-mongocluster' version: 0.0.0 dependencies: @@ -16851,7 +16851,7 @@ packages: dev: false file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-vqVU8FcJYyIkgypFpf97wUK6SVVl0LMYkmREj0Q7RuwXTSWxtowVzE2uT8Rd3IP0lxnlOcMsLDuVDFpOOYeo4g==, tarball: file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-iIVKSMObhPtllgldBh5d9PvGgh+4/0POUj8UdtW1VsK6bUAx+UtzTjsv2FjIMZ/0nuKBA0NQ678rKS5dppppbw==, 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: @@ -16879,7 +16879,7 @@ packages: dev: false file:projects/arm-monitor.tgz: - resolution: {integrity: sha512-iupFHZAXQ0A7LWOq0XZnS9HZiUXCm+vlkkmkv2q45NG9p0mC0VZKRjy/WUHw8b/M5S737+v43wNfFmCuSDb3pA==, tarball: file:projects/arm-monitor.tgz} + resolution: {integrity: sha512-K+9G34mEgOxgIoTZLVRz12Rde0+aAM0bJXmZV+Mz1rruwrsNjwMk6oh3vwtguLLhts+BN91pJ9YxkEk6GtcYyA==, tarball: file:projects/arm-monitor.tgz} name: '@rush-temp/arm-monitor' version: 0.0.0 dependencies: @@ -16909,7 +16909,7 @@ packages: dev: false file:projects/arm-msi.tgz: - resolution: {integrity: sha512-JEiQZ7JNjUaLblDWQ06Zj6R0sp1rzBJRL5nJLJzFi3TSeogLkGPWGKPH/kTQX1td8KR1xwTDlklW2VU0OjO0gw==, tarball: file:projects/arm-msi.tgz} + resolution: {integrity: sha512-Qvub62fkM9C9OM/EystDdNE7G7kcdCdW0omlH6KHr1ioCxeoHe7lQQT4ff2cqLFrOtQ6NYGRvZu6FkFWqolvDw==, tarball: file:projects/arm-msi.tgz} name: '@rush-temp/arm-msi' version: 0.0.0 dependencies: @@ -16937,7 +16937,7 @@ packages: dev: false file:projects/arm-mysql-flexible.tgz: - resolution: {integrity: sha512-gqfDjeftl6w5p10xBkccxb5JN3Z/GQKuwkMvK5lxSPLe7ItvCwV5lStvEN/k5SN0fF4qAxLZAdVgQy7l2MYHLg==, tarball: file:projects/arm-mysql-flexible.tgz} + resolution: {integrity: sha512-i2areQQUXO67Rc3EQUFcT7YS5oY8QqV1nh6mgUDbB4ELUwuacl3n419A2uW3gShCuEX6ZZoAzlC3CpGBicbvWw==, tarball: file:projects/arm-mysql-flexible.tgz} name: '@rush-temp/arm-mysql-flexible' version: 0.0.0 dependencies: @@ -16968,7 +16968,7 @@ packages: dev: false file:projects/arm-mysql.tgz: - resolution: {integrity: sha512-eWALfUMvA2FVHte+eYMBIa6JCB7Z7U97VO8/zz9Y8sP7okTCOloFsvMa4tTZTnHG/KuEFHq3zQpJ5jnSVmrE/Q==, tarball: file:projects/arm-mysql.tgz} + resolution: {integrity: sha512-BemZE1rhwi7g4Q7R+MV8HJdlq6uvPYmnFNGQiIZyOvMrlw+TB8sAcXWHzMDbTLU+hQ1doDG8XDjG9STHPr+yZg==, tarball: file:projects/arm-mysql.tgz} name: '@rush-temp/arm-mysql' version: 0.0.0 dependencies: @@ -16997,7 +16997,7 @@ packages: dev: false file:projects/arm-netapp.tgz: - resolution: {integrity: sha512-IEGA8a8gWKVvL693jv3yzXGR2X7G0nl+y1PfJ4jBEPtc9zdIiH1Pj0b7Bq19Z6xCOW/lJPPJ6G8fI9XKIneZJg==, tarball: file:projects/arm-netapp.tgz} + resolution: {integrity: sha512-JlcDJRWLklWlsRA6UjMRKuRVqhe/fZRGYsq0pZGbg/N8zMWI3BQH5q+2RmRKLbfuVXFlkbjsgIvKaY9fp05Kkg==, tarball: file:projects/arm-netapp.tgz} name: '@rush-temp/arm-netapp' version: 0.0.0 dependencies: @@ -17028,7 +17028,7 @@ packages: dev: false file:projects/arm-network-1.tgz: - resolution: {integrity: sha512-nGb7tSO54MnnBUXPNxfBIfWZUT/+wweKaCJaGDc9LocSoDT9hnmrAgFDQqcmOkzjwxWyvM8BsjB7zedacueRcg==, tarball: file:projects/arm-network-1.tgz} + resolution: {integrity: sha512-jzVX655DGAScA32dW/iYkMYwrm1AYinRpn1bkwNuX6gBHyPTH8Vp6GIu+68bsZeJDDgq2yySBfqUMmtWgYFl3Q==, tarball: file:projects/arm-network-1.tgz} name: '@rush-temp/arm-network-1' version: 0.0.0 dependencies: @@ -17059,7 +17059,7 @@ packages: dev: false file:projects/arm-network-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-bXcMkaPXXD1meUSCXIzVfGgmcsnMPTIdkPqmIRZ864UcMrF5lR2qk4xboSguyIIPeXTI6FjJlgcodFWfd1J/mA==, tarball: file:projects/arm-network-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-RxbOWeZwYYjUmH9aPP+pbuaNo6/wE3nAGR9A4IlAn12O8e/DEoL/GHD0QDQXCUXBxU3KpEwmqVxmyuCHUw+b3w==, 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: @@ -17089,7 +17089,7 @@ packages: dev: false file:projects/arm-network.tgz: - resolution: {integrity: sha512-d7/m+q1Ww3mt/hvDZ5Pzgvp0kP3XhQAd2mQQOYH0BZTJHHkwWbTqUUiOJ493rg3xKRzRWpPPPgoZVLWl00s9gw==, tarball: file:projects/arm-network.tgz} + resolution: {integrity: sha512-BwWptmMb8fZVh/LtwjHxY6bdyrwEH3fAO1GXX1m2FLA+zgwtvV7Ubqcv4OYHnuDyNo+SmShXS7KUUPOTPeBgqQ==, tarball: file:projects/arm-network.tgz} name: '@rush-temp/arm-network' version: 0.0.0 dependencies: @@ -17135,7 +17135,7 @@ packages: dev: false file:projects/arm-networkanalytics.tgz: - resolution: {integrity: sha512-UPRUpiaEKXGW7S8eAmOKTKtPfYweSbDteJndujiMXe7Ykd9Q65OsbG5kRL5xVPLFW92nrdxCf98wskCfF7Ed0Q==, tarball: file:projects/arm-networkanalytics.tgz} + resolution: {integrity: sha512-P7nNtXsPtppz3cJnxym2/tzb37SIY9bIym1dwyvK70GwcouC9i1hxzyWDo9nAp1GfZRj7A8iclRmaFCBrYblSw==, tarball: file:projects/arm-networkanalytics.tgz} name: '@rush-temp/arm-networkanalytics' version: 0.0.0 dependencies: @@ -17165,7 +17165,7 @@ packages: dev: false file:projects/arm-networkcloud.tgz: - resolution: {integrity: sha512-clwwgWtcUWUoBVVD5fscpZaukSlOx77XujZBubCXSz94dzYMuwQ6uzbqaH714dmLGFtGX0fEh84xJPZSYILsuA==, tarball: file:projects/arm-networkcloud.tgz} + resolution: {integrity: sha512-rpw1rhaHH5DbjV9CZzVcdESwR4wOsFa1BTffRibsKh6z+hi6nlqeje+U/GjIXquycvdATjTc2koXh/31aZNl5A==, tarball: file:projects/arm-networkcloud.tgz} name: '@rush-temp/arm-networkcloud' version: 0.0.0 dependencies: @@ -17195,7 +17195,7 @@ packages: dev: false file:projects/arm-networkfunction.tgz: - resolution: {integrity: sha512-Xoyz+XtG3PJ/U0Csqxi2kzLdtsmTcCd3Ly3lvusCsH5Fh2phh4QV2CNAoR0haLNcquKoFA566HOihDqQJDwErA==, tarball: file:projects/arm-networkfunction.tgz} + resolution: {integrity: sha512-tMd2qODOuhXdsgNrYx35EaYybcVP5D/Du4pAhToqTuxDfeftUA8Ry3FhrLZKUxkZCuAl1qhATsS5Jw76HfU+pA==, tarball: file:projects/arm-networkfunction.tgz} name: '@rush-temp/arm-networkfunction' version: 0.0.0 dependencies: @@ -17224,7 +17224,7 @@ packages: dev: false file:projects/arm-newrelicobservability.tgz: - resolution: {integrity: sha512-W4f1IqaxlRivbzfb4TF6tijNCgj+KEBD379z0t0lku5K6Om52AiqTS+CcgwQmpg6pREOPokp4j5RUfaM51HApQ==, tarball: file:projects/arm-newrelicobservability.tgz} + resolution: {integrity: sha512-O4w3wJjlBG8lJxb00WGPRmvBl8pUVFvsUn7KMszAyY5q1LoqRD/P/adX7omQvj+RBYzzLPkG9t9Rd+7sIwnZyA==, tarball: file:projects/arm-newrelicobservability.tgz} name: '@rush-temp/arm-newrelicobservability' version: 0.0.0 dependencies: @@ -17254,7 +17254,7 @@ packages: dev: false file:projects/arm-nginx.tgz: - resolution: {integrity: sha512-qVAjIstMnCDeC16WVu+q386pI/S3bFtobFjuP6YxWFRWUiczGYGRZQiEXIPRctVEptDwLMJs7hRGznIevzwpVA==, tarball: file:projects/arm-nginx.tgz} + resolution: {integrity: sha512-pLOdDp54GOwZc31b8TW/PSTjfpxMHN7CSfB3xCblsTskC611sVWqFNIV/vRxK1mDsbyY2NNFMq5ZKyTvoF0fXA==, tarball: file:projects/arm-nginx.tgz} name: '@rush-temp/arm-nginx' version: 0.0.0 dependencies: @@ -17284,7 +17284,7 @@ packages: dev: false file:projects/arm-notificationhubs.tgz: - resolution: {integrity: sha512-C4j8aKYOdwinRyuGeIgttHBVS1A0FtKk+f1aAyUoPKU/lsHlwgES/0Qhkd98qYQCL61VWf24yGLNcfx89n/Cug==, tarball: file:projects/arm-notificationhubs.tgz} + resolution: {integrity: sha512-qASxCpPXOL33i5ZL4+D6RNXo7ml424XNUE0Enx1iQ5+txftWvYwtOpmM4huS9oXRUFCkgmkIZ/LVVCL+MQ77Tg==, tarball: file:projects/arm-notificationhubs.tgz} name: '@rush-temp/arm-notificationhubs' version: 0.0.0 dependencies: @@ -17314,7 +17314,7 @@ packages: dev: false file:projects/arm-oep.tgz: - resolution: {integrity: sha512-yN7in7bSWktptr21JAHRiSY7SCAP6PFn/wZJXguNbMJ1coYdan8qGxDZ+Y98BrWZn/VsvmGIhVPU8Ioi8j70tA==, tarball: file:projects/arm-oep.tgz} + resolution: {integrity: sha512-UpRIO2UTpVF3sohVgYkOsdT98JCVzyueEl8qFk6fmzYlet5bdxODjFFnnl5RCbLfT1PQ/bxvpyv6Gn5TBTyJXQ==, tarball: file:projects/arm-oep.tgz} name: '@rush-temp/arm-oep' version: 0.0.0 dependencies: @@ -17343,7 +17343,7 @@ packages: dev: false file:projects/arm-operationalinsights.tgz: - resolution: {integrity: sha512-os3cEC+iqOVSKMxv1TUP9ftjvGSPXb9eXqk3zKwFk4/+aRGKHVgtl429gM0WIh90QDLNOANuRqQ8mAD89BuQZQ==, tarball: file:projects/arm-operationalinsights.tgz} + resolution: {integrity: sha512-h1KiF0snFuqby40JLK4/G5OS0gczssxCRgexGAx24xoFdoGQ6RO8mAORBmP5AeZSHNirifK8uXczb9OT/+EbIQ==, tarball: file:projects/arm-operationalinsights.tgz} name: '@rush-temp/arm-operationalinsights' version: 0.0.0 dependencies: @@ -17373,7 +17373,7 @@ packages: dev: false file:projects/arm-operations.tgz: - resolution: {integrity: sha512-vT+bM8W2s938i0AV7k+gk1JmKbl3dPKm/yF721Ub4iXplRGNeo3zNEzzFkyat3KTvFmtXlp6SQUen32/FL+H8A==, tarball: file:projects/arm-operations.tgz} + resolution: {integrity: sha512-imqDBA7XLP7ZTWoH+vP1TuFO4tpWzSjK0KDnokN7Qcd9yjI6ck3T61pb+kV8TEOoBnh0ph8FlIGrat7kE6yncA==, tarball: file:projects/arm-operations.tgz} name: '@rush-temp/arm-operations' version: 0.0.0 dependencies: @@ -17402,7 +17402,7 @@ packages: dev: false file:projects/arm-oracledatabase.tgz: - resolution: {integrity: sha512-W/eeXVqPXArSHG38qrmkZ7m8nwFE9ZnjQGoSYvAQSlao0N1Qa1ngVvTh+lDmMxwB0I+uljPIXJxWlN8uQuMPTw==, tarball: file:projects/arm-oracledatabase.tgz} + resolution: {integrity: sha512-MJ2Ba/mM+PlAwFlbctLzh4rw5YD54fY1n0w1Bl5jyicpRfnstlsc/kU7Nj7ACxC5yek3jcU7/ZX/eu8+pbmCTA==, tarball: file:projects/arm-oracledatabase.tgz} name: '@rush-temp/arm-oracledatabase' version: 0.0.0 dependencies: @@ -17433,7 +17433,7 @@ packages: dev: false file:projects/arm-orbital.tgz: - resolution: {integrity: sha512-Lz0US9aVz2x4qZHFD2BCG6KIrXbqOszYJYc2FS49wXFRgY4MU2HRiR8YPP1sWc+4QDYd+QKaFS91FN5cEZubrA==, tarball: file:projects/arm-orbital.tgz} + resolution: {integrity: sha512-b4WJVmbSpiZ6SsWKh5Z4aechH0sM6IKmzz/ilzZFpNLIdsYUNjroAC3MNHPphVf0ZTIMYIXP/4dqtiB6LL4aKA==, tarball: file:projects/arm-orbital.tgz} name: '@rush-temp/arm-orbital' version: 0.0.0 dependencies: @@ -17463,7 +17463,7 @@ packages: dev: false file:projects/arm-paloaltonetworksngfw.tgz: - resolution: {integrity: sha512-JqJkEWDufbXCx9Uo9qxQAqKCZ6sca6DIa0rM8PiFr9CQNBOWHxHP/uZk2sABKoMvH6IKrXL7KRfJ5J4Dalut9g==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} + resolution: {integrity: sha512-QC9PfRqSzyps9/+U0e9EV0dU+FZI9MTAILjqO5jnIvr65ityj0/USm4Zz7MHxiaZNegpW/+9Yz8w7xQy3ZkMuQ==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} name: '@rush-temp/arm-paloaltonetworksngfw' version: 0.0.0 dependencies: @@ -17493,7 +17493,7 @@ packages: dev: false file:projects/arm-peering.tgz: - resolution: {integrity: sha512-Mj/ZXu/A89dBVOGx3nrbeNY8x5ylytw3iCFOypfVe7ADf0G5DGgCRc85+tXwLadYC9+A3Ff7JdRYoopSkamINA==, tarball: file:projects/arm-peering.tgz} + resolution: {integrity: sha512-ozcef6TToSOq7CqUvKiRsZBdcUp3pU6MSfx8w2MZXOo3MGzQ3AMnWukrPYoU9nBi35YySyXvF6rYb68WHzj+1w==, tarball: file:projects/arm-peering.tgz} name: '@rush-temp/arm-peering' version: 0.0.0 dependencies: @@ -17520,7 +17520,7 @@ packages: dev: false file:projects/arm-playwrighttesting.tgz: - resolution: {integrity: sha512-1Cu2srWIlqMw2Qphnt8E3hstcdasUVvDtbaXH1PPN54jhQUViw1AiUM10W0gxeMzLnvKdUVnxUsCIn/NUynQVw==, tarball: file:projects/arm-playwrighttesting.tgz} + resolution: {integrity: sha512-SfLw2iA6ejViaiilnys6IsWVuaPcxRdPu+pIscYCeijd0HwMZJorXtc1eTFZ7SIn8PuDmGXXzHliIqsJxl4UsQ==, tarball: file:projects/arm-playwrighttesting.tgz} name: '@rush-temp/arm-playwrighttesting' version: 0.0.0 dependencies: @@ -17550,7 +17550,7 @@ packages: dev: false file:projects/arm-policy-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-UnTNCfdqB3lXg9eXx7PnVR3/IGm6n/wnbbtuclbJx6awi/S07a7jlRbSeZ+jba4s01fN+Si78BJibDNT1fi0EQ==, tarball: file:projects/arm-policy-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-9wo1hsVBeEN338Y03EVO2mJsiYsZgTL/CoGjIvqbmfZMPFriFiQNIgGEwKfQvdnRXJM2nadEo/zBBp8XS8vguA==, 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: @@ -17578,7 +17578,7 @@ packages: dev: false file:projects/arm-policy.tgz: - resolution: {integrity: sha512-/H2bvmE3EopNXHRnt3BLwbRHR5Y3CD+vQhEIMjaNUHE3QB56VhwFvXZIL2o7Q7oJLeK/PlF+e7u2JZHZtwA+7A==, tarball: file:projects/arm-policy.tgz} + resolution: {integrity: sha512-Z4HMl3VFgkEHROvE0FExAFkrcM3thPAtxzUFnr6zKCrjLviNH0tjFA715mJyqZKqn/xU0aRlANOogB09X8vZmA==, tarball: file:projects/arm-policy.tgz} name: '@rush-temp/arm-policy' version: 0.0.0 dependencies: @@ -17606,7 +17606,7 @@ packages: dev: false file:projects/arm-policyinsights.tgz: - resolution: {integrity: sha512-ggElmrDpSqiPAHhUemUGOrdTp0hFFP1ADpRpb8QC+8nsGb8EeT3iCZaBcVSRR2Dv87RILhVzOzjXRXmOg3ZeNg==, tarball: file:projects/arm-policyinsights.tgz} + resolution: {integrity: sha512-ExzAWoOvwWXObqNvQ6bLQ0Fs67HjZJn2femsEfZfxmGPTxfJVfsek98cuXklQEgLe96mllG5uM3QHUyjF1HKKg==, tarball: file:projects/arm-policyinsights.tgz} name: '@rush-temp/arm-policyinsights' version: 0.0.0 dependencies: @@ -17636,7 +17636,7 @@ packages: dev: false file:projects/arm-portal.tgz: - resolution: {integrity: sha512-1QapdGZkB+xlwdfxkZYIHcL/z+9X5LMq54Ysm+ckbsL66l4R7nKJUJ94EMtGK7dQYy71Zq54d7kAiKaKhIIw3Q==, tarball: file:projects/arm-portal.tgz} + resolution: {integrity: sha512-GJeR2EzzpTTKwedoXFiraBc/L6cdEMt3+BRAWSGWooPkis/csp7rvwKgrwUZ3yZ3ktB2pS/N03gQUinN1S+/3Q==, tarball: file:projects/arm-portal.tgz} name: '@rush-temp/arm-portal' version: 0.0.0 dependencies: @@ -17664,7 +17664,7 @@ packages: dev: false file:projects/arm-postgresql-flexible.tgz: - resolution: {integrity: sha512-NSIbK904401vTowcmbyrN6air9mB778Lw4dF+akIyx1RD15Ye2eEdXagrdzoxCeaf+pSrkAQK/ghRW8qmWT8Fw==, tarball: file:projects/arm-postgresql-flexible.tgz} + resolution: {integrity: sha512-42obwbCkSftt9nWFzb8iHFPqV7E/ArPOnAMS55z7qnfFfzSEO6cQ2dLtJ3n6t8F0yN7F16/pB7/P5CCBqfAxZA==, tarball: file:projects/arm-postgresql-flexible.tgz} name: '@rush-temp/arm-postgresql-flexible' version: 0.0.0 dependencies: @@ -17694,7 +17694,7 @@ packages: dev: false file:projects/arm-postgresql.tgz: - resolution: {integrity: sha512-Cd1CoTd5t3SnvR+KTZJCMP65q8drHeVKfSuRyMz0NntBn+xz2Ou/qwiV6T0+1AqEvlG2KCBNMcTTdcZEoECZ7Q==, tarball: file:projects/arm-postgresql.tgz} + resolution: {integrity: sha512-rUut4EsMqE0m7A6fpuDpjAX9uRIAgZFGuDP+yYyEcHB6ZST7xpmA97WXqJhECH4xyoyVVQ9/b6BetH/49cVHQA==, tarball: file:projects/arm-postgresql.tgz} name: '@rush-temp/arm-postgresql' version: 0.0.0 dependencies: @@ -17723,7 +17723,7 @@ packages: dev: false file:projects/arm-powerbidedicated.tgz: - resolution: {integrity: sha512-dlILYWypLv9jm+6xBYjloorL6ufiEikCv3PaPLz57X4eEVJcZigmOoLw8G1SEiIahsW/te6wrinHFIseMK75Lw==, tarball: file:projects/arm-powerbidedicated.tgz} + resolution: {integrity: sha512-g2Nz33tyJtj2dEp/wbmvlbxbcY8Yjw3+Cnry6VL/+s0AoIY7nkkYFdKT98rVlvXIN+KBN7Zs1T3MoXFlfHhFIQ==, tarball: file:projects/arm-powerbidedicated.tgz} name: '@rush-temp/arm-powerbidedicated' version: 0.0.0 dependencies: @@ -17753,7 +17753,7 @@ packages: dev: false file:projects/arm-powerbiembedded.tgz: - resolution: {integrity: sha512-lSscL3/6wrUi++hdQVBxR+VePqYFmpjzhZ/4pUtqm0W15XlXcXZccO7XMbhJtnwRTDGYUKpJ5rhR7uYu9337LA==, tarball: file:projects/arm-powerbiembedded.tgz} + resolution: {integrity: sha512-g5UQEJN6v86qTZkw2+VBwnJE1QJSD2ZbBZitwz01DigHRDbatVnmhEgjvM7lvDbFChomaWEPocWlZcbQBgMP6Q==, tarball: file:projects/arm-powerbiembedded.tgz} name: '@rush-temp/arm-powerbiembedded' version: 0.0.0 dependencies: @@ -17782,7 +17782,7 @@ packages: dev: false file:projects/arm-privatedns.tgz: - resolution: {integrity: sha512-DeLYIZhkysGVmRhymdQar8suXVHuSthEV2/909LcyshuvnT9reEA5pBUnpERwYILnE0v0Pe5cOiYM2zNu5K3jQ==, tarball: file:projects/arm-privatedns.tgz} + resolution: {integrity: sha512-te0zKXvLfbSL2nhRF7iu5i35dD8AnHcZkDr+aPyhTviHCpVna0zsrBUZ/McCYQZzNImcXICQy0vXG0Kv0oPHtA==, tarball: file:projects/arm-privatedns.tgz} name: '@rush-temp/arm-privatedns' version: 0.0.0 dependencies: @@ -17812,7 +17812,7 @@ packages: dev: false file:projects/arm-purview.tgz: - resolution: {integrity: sha512-B1h7MW0LspMCjkdtQLXgFe1+CHGq1y8+UGRm9OrWbC+qpQ33GoJX0RhONJJ61mT5JUSpsh0YZla/O8K61lZNfg==, tarball: file:projects/arm-purview.tgz} + resolution: {integrity: sha512-93WGpddENzgKRzQYsjYfSoTPOJAqSKrGkMcwLfOOEAI5FdXK3bW0wIqxSXGJGe6gimeouwHsebL8y/Ta6BbJ2A==, tarball: file:projects/arm-purview.tgz} name: '@rush-temp/arm-purview' version: 0.0.0 dependencies: @@ -17841,7 +17841,7 @@ packages: dev: false file:projects/arm-quantum.tgz: - resolution: {integrity: sha512-o7s/NDNGiGHq410Mkf/5TQDqgPd7LqdT99DoBGNIGEFiPnX3OLeGR/9ix5Yoamyc6V2vcpvz53wHba6CkMPtyQ==, tarball: file:projects/arm-quantum.tgz} + resolution: {integrity: sha512-bXlLybtVHrxeoeH7Autfo9oAeAgxtLiD4LifjhKJQFDMtKy7XwJeLEP8wjCLIUz4HjPqdATZOy91P+iipaXKWw==, tarball: file:projects/arm-quantum.tgz} name: '@rush-temp/arm-quantum' version: 0.0.0 dependencies: @@ -17871,7 +17871,7 @@ packages: dev: false file:projects/arm-qumulo.tgz: - resolution: {integrity: sha512-gYm9C1mxbgueCqF0iXFyNYlYxTSt3z+qziS108LyIOyQGplqBl37wIe2S5Nb0R87vWXYnYJHNhjVMMIvTrshPw==, tarball: file:projects/arm-qumulo.tgz} + resolution: {integrity: sha512-16kffyI39XON8XY0eZ8FV4msa7hdHziR5iXUAOOcVXnhrlyWeIeZ8BAWNRxdwfSRDIrnWzDx+aJTQnVRKL3E2Q==, tarball: file:projects/arm-qumulo.tgz} name: '@rush-temp/arm-qumulo' version: 0.0.0 dependencies: @@ -17902,7 +17902,7 @@ packages: dev: false file:projects/arm-quota.tgz: - resolution: {integrity: sha512-TcVpxc7YC3FWRwcUIO0Uto0RWVGgvHGZ+WvqOVtjLD93cgzO0gaognPjZ7dpaN+f3gyOGs0ksjiJl866jCimGg==, tarball: file:projects/arm-quota.tgz} + resolution: {integrity: sha512-xk059uR7eCCN3t024cWSE4S9muFzgPyN0kwgYPtQ9y/4+OQwdv8wvBqclcnw++X7ttxE5uPz9P6NgkNQS+HINA==, tarball: file:projects/arm-quota.tgz} name: '@rush-temp/arm-quota' version: 0.0.0 dependencies: @@ -17932,7 +17932,7 @@ packages: dev: false file:projects/arm-recoveryservices-siterecovery.tgz: - resolution: {integrity: sha512-Zy9s6Cc2SK2Y/qoQVc9ruyPwRaUbukYN4w7zELuTMsGOXAYzwW+GWqW53HVv9ATBkWcSPObZYIYfA9ahNq4Uhw==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} + resolution: {integrity: sha512-xcNv4RDnr33f5crsn2KZvyN0LDD1FGh2n8tcaQFLRAgZtK8y//XRiWtaFER7SKl3TaVrVjy2E9feEwAujZoW6g==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} name: '@rush-temp/arm-recoveryservices-siterecovery' version: 0.0.0 dependencies: @@ -17962,7 +17962,7 @@ packages: dev: false file:projects/arm-recoveryservices.tgz: - resolution: {integrity: sha512-hE9WTZh0MLaXAWCuHvQDjvzeQvxDn4t3x4Ws1o/sArO48yDG0+e9ZdCv/n3cX7NgxehtYb3142vlrosgojb3Ww==, tarball: file:projects/arm-recoveryservices.tgz} + resolution: {integrity: sha512-06A+DFamgjqnrd2zLMyYwoU48g7Bbwf/paXpGdKklU7SqcmCxUbtZUJTrZEtYngnXQSeAt58brXVBnGYE0evPA==, tarball: file:projects/arm-recoveryservices.tgz} name: '@rush-temp/arm-recoveryservices' version: 0.0.0 dependencies: @@ -17993,7 +17993,7 @@ packages: dev: false file:projects/arm-recoveryservicesbackup.tgz: - resolution: {integrity: sha512-aBxC2pHxknZk9hAvIHRmvw6o2Otg6NGB7/4HHdxTHdwd+5zthSZVMiNlN1lQr9rXZNpBhe9Ao/mm6C30S2/sgg==, tarball: file:projects/arm-recoveryservicesbackup.tgz} + resolution: {integrity: sha512-2noksR5ZT7zAwxoe62PnPvseK+9e3FTieCHLxCN6JOzEsLohvWLaKA3COBimtzZBsOeEkfNexOjKUXmyMKSvxA==, tarball: file:projects/arm-recoveryservicesbackup.tgz} name: '@rush-temp/arm-recoveryservicesbackup' version: 0.0.0 dependencies: @@ -18025,7 +18025,7 @@ packages: dev: false file:projects/arm-recoveryservicesdatareplication.tgz: - resolution: {integrity: sha512-s6rIHw/4pUPO7OWuP638NHaer/fWhpg0x+KLAxRHFtIC5d5i2+ipG/6YL9Tauhr0BozZWzWUMhFYE+ia9nEEKg==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} + resolution: {integrity: sha512-psblxki1Yi/bWothwmWqb+En3eL8BhAo7x1SuiHbKn600IaznqexgN/NB2KAB7qyRHUCa/IjiysgZ2dBZ1BqQQ==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} name: '@rush-temp/arm-recoveryservicesdatareplication' version: 0.0.0 dependencies: @@ -18055,7 +18055,7 @@ packages: dev: false file:projects/arm-redhatopenshift.tgz: - resolution: {integrity: sha512-G7cH1A3bimoSKhWgvtc1mrKbxDvfrT2DCAQK8MXGCP1bQr2BWhEWZe/kCOUIPRCte4R7aVB/ccqnIj7GgECWQw==, tarball: file:projects/arm-redhatopenshift.tgz} + resolution: {integrity: sha512-BwUzxC6iOJCCVzPqt2faC92BLQ74PN3hlhv1a1SsGdqWz8vXr7ONGB0YF7fiLtCvvn7RuileFsVfjXNrKy9qqA==, tarball: file:projects/arm-redhatopenshift.tgz} name: '@rush-temp/arm-redhatopenshift' version: 0.0.0 dependencies: @@ -18086,7 +18086,7 @@ packages: dev: false file:projects/arm-rediscache.tgz: - resolution: {integrity: sha512-iaPfdmOfF5ZnFRjtd6JqqvSlPn1JbSoqlEM7968JDg4kMbtRYJj/RSp2OaZ3HbFhcUhYRRC9T4GzDPGmfmqd3w==, tarball: file:projects/arm-rediscache.tgz} + resolution: {integrity: sha512-wjKgPDteXSNG7HsflXJ6v7ogpaDCk+Cbx5YNmOr2XQJ7STHcZKl8XlOXagYonaTB/ZXPFI2jDZxiv39SQZr0yA==, tarball: file:projects/arm-rediscache.tgz} name: '@rush-temp/arm-rediscache' version: 0.0.0 dependencies: @@ -18118,7 +18118,7 @@ packages: dev: false file:projects/arm-redisenterprisecache.tgz: - resolution: {integrity: sha512-aZLFBUEBCOzoZsTUJhc9cMShOYYGbV/6bEuR9NEAsP5N3CruGtH8LgZs3D0zsrPfjyGSaYZwqtIJMYbzzmUxdA==, tarball: file:projects/arm-redisenterprisecache.tgz} + resolution: {integrity: sha512-tn3eCGAuaZ5/WguvYXmmXZuRYRCie4bKR38XnA255/jD2njJ1qxuDCpH/nmT38r0R1L8jniBTlqP0+ylfgGbjg==, tarball: file:projects/arm-redisenterprisecache.tgz} name: '@rush-temp/arm-redisenterprisecache' version: 0.0.0 dependencies: @@ -18149,7 +18149,7 @@ packages: dev: false file:projects/arm-relay.tgz: - resolution: {integrity: sha512-Th9b0kM7MAcoZ612c8zz9auhr8Hqnb3yMr+KWdRnx9miUJaIjchsiHWANFuvfnHmx8P71p/TskXMbTj8OMWnPg==, tarball: file:projects/arm-relay.tgz} + resolution: {integrity: sha512-uwrO1rzLldkeACmDg6IrzkUcDhEPxYbT7Vd7uz6GJuleJo+U+rlKz4KngctChfIy+H5lXO8M1tG/8HFhO1BDhA==, tarball: file:projects/arm-relay.tgz} name: '@rush-temp/arm-relay' version: 0.0.0 dependencies: @@ -18179,7 +18179,7 @@ packages: dev: false file:projects/arm-reservations.tgz: - resolution: {integrity: sha512-xaeHLrGZsp6SoH1ojKtx/2HHnEN899g8w71qAZrAoaO3a+5eukKyC9Gfxb1iiKoxXvAqTXeN0TV3NEBGCIbOIg==, tarball: file:projects/arm-reservations.tgz} + resolution: {integrity: sha512-BqGc0TP5W8b1mEC2QK0JA/Mq+Qv8ITVZXexW4EHOKtDCDETYbwE+OIkAto3+411a6200kIUOzwyqViuUrRt6Bg==, tarball: file:projects/arm-reservations.tgz} name: '@rush-temp/arm-reservations' version: 0.0.0 dependencies: @@ -18209,7 +18209,7 @@ packages: dev: false file:projects/arm-resourceconnector.tgz: - resolution: {integrity: sha512-3/GLF0TEU0hxKhW0sP1uBMYfI5n5GSlQ26ls1EH5Jry2K+l9bQco4SvRGFNHHpqtqIjssgdxkhbDIDCpEDxRVg==, tarball: file:projects/arm-resourceconnector.tgz} + resolution: {integrity: sha512-AQ9gUwZYKgMz0em5ab5wekXZZ9aq1mYgME96Go11NxLDmt5CjLB+b0yqaJ1G+ij9sOCl4f0NwN70yyH9oJx7IQ==, tarball: file:projects/arm-resourceconnector.tgz} name: '@rush-temp/arm-resourceconnector' version: 0.0.0 dependencies: @@ -18239,7 +18239,7 @@ packages: dev: false file:projects/arm-resourcegraph.tgz: - resolution: {integrity: sha512-JdHzFd9wI6JJriyEvlkxEzkrAvHKS8sL1nqZ5F2w/0HctthIdjUM3WHTUPj7nf6NT/JsY11aB6rOUJrwJrrvCw==, tarball: file:projects/arm-resourcegraph.tgz} + resolution: {integrity: sha512-zmk1cZALrBRWYbPPc29vEhHTpdbh+K9cmQT+1xcYOVFAB8rz2U1ZGp+v+eZDCYKbokwkQxj6vO3VGwVmud6spA==, tarball: file:projects/arm-resourcegraph.tgz} name: '@rush-temp/arm-resourcegraph' version: 0.0.0 dependencies: @@ -18266,7 +18266,7 @@ packages: dev: false file:projects/arm-resourcehealth.tgz: - resolution: {integrity: sha512-y8trJZSTDn6b1D10IKVSmb4/+HMZEi5cHfjwJWA12pmEfy8vitnl+YPnab9LbG1tBZq/qKonXdUeGzJSQkZ4Gg==, tarball: file:projects/arm-resourcehealth.tgz} + resolution: {integrity: sha512-OmXdlZg6o/+pbuha9lGCccqxJKHHfvtRnKVEtd7ScUPrULI58nJvuiXOfMbSIMp95RED3alr8uoV1DH5X/2pJA==, tarball: file:projects/arm-resourcehealth.tgz} name: '@rush-temp/arm-resourcehealth' version: 0.0.0 dependencies: @@ -18294,7 +18294,7 @@ packages: dev: false file:projects/arm-resourcemover.tgz: - resolution: {integrity: sha512-x1C2jUcu6IrYMYwK0SjYkthOBecAhlf8/RKxawn4u+UmBJoTceamfVhg46RDC4Q2p4JqoWGa7rsHJvUVT16Aww==, tarball: file:projects/arm-resourcemover.tgz} + resolution: {integrity: sha512-1D4dAl0mmNVfUStY63phkh4tqdWFTWUTv2U+0ZgTHdE1JPtdfgl/0cuLsmI/CkkLJfPWcPY1lZuHnBkILy8bkA==, tarball: file:projects/arm-resourcemover.tgz} name: '@rush-temp/arm-resourcemover' version: 0.0.0 dependencies: @@ -18324,7 +18324,7 @@ packages: dev: false file:projects/arm-resources-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-3K2SKWxCM/vXM3wNJxxjfznuSvjK0mNAr3KTfkR8bLZsZw0IYSYcSVlI6V6cfjUi/6pgsfwviNlWmsPdJ+FdtA==, tarball: file:projects/arm-resources-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-kkwhL1lPRpgHIar/0p0nPu2s94ksLrvxuovYHcQmCI7+zwQuSnJBAoI/RN21uFBekdcbk5X9lVnZeZrsnBo8mw==, 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: @@ -18354,7 +18354,7 @@ packages: dev: false file:projects/arm-resources-subscriptions.tgz: - resolution: {integrity: sha512-ESdS8paAhHR5HfMV7Hk+WSg9BILEmbBPdCJB0321w0xUPEZsIX5dI5JwylMIoxoqI29qJflOPDmP9f83L4+Z7w==, tarball: file:projects/arm-resources-subscriptions.tgz} + resolution: {integrity: sha512-1rJhKQecqIun9TBKIJuCjb1JJpIHwhP04pqs9P0i0HBuy3Q3xxkJtx8mSAOe8Rw9daDBvZw8SwIN9+nrwf4URg==, tarball: file:projects/arm-resources-subscriptions.tgz} name: '@rush-temp/arm-resources-subscriptions' version: 0.0.0 dependencies: @@ -18382,7 +18382,7 @@ packages: dev: false file:projects/arm-resources.tgz: - resolution: {integrity: sha512-8TMFe//8E67q5Nze7yLR6VgxTPgEb1BIBF9AeBVV+Tcu8ijDgV/6siMyoOXafgdQkk2bO0tVO+SGfXQgIol+3g==, tarball: file:projects/arm-resources.tgz} + resolution: {integrity: sha512-6a16xYknvpbK19/9j06QEyv4YsWcLEoR9neVni4DcRgPbMELOh/a/9xeOo1Lisn6Jq7LQ4tbaHQWd5xbpgvpow==, tarball: file:projects/arm-resources.tgz} name: '@rush-temp/arm-resources' version: 0.0.0 dependencies: @@ -18412,7 +18412,7 @@ packages: dev: false file:projects/arm-resourcesdeploymentstacks.tgz: - resolution: {integrity: sha512-CViGJPj+s3oFWu5qa59wIKJpNb2JiytehpwUomjfLwJQc7A3qXexcefkLo1ATe/x3xa/8VtGEGmHmcCQD2AbhQ==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} + resolution: {integrity: sha512-59nSruSUUf0DBQysuEcADPS0mcz4ct3vHU16Zz2kcmjzO7TFQXA2xsFjNjeJaD2+C5r4XodX72Jn3yD0U22qrQ==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} name: '@rush-temp/arm-resourcesdeploymentstacks' version: 0.0.0 dependencies: @@ -18443,7 +18443,7 @@ packages: dev: false file:projects/arm-scvmm.tgz: - resolution: {integrity: sha512-Fkayn1s6liEmHj04cYJ492qlZh4so3USiiYydFKDLXq+iK5CraI8Y37o9nbgfigc80nJZM57OD13M7BHMEBoSw==, tarball: file:projects/arm-scvmm.tgz} + resolution: {integrity: sha512-Ww4OxXaLiQyIXp5EZLfQSG+T/l/3cXm3KG8/T99zwwXdmwPII9/Wsv8SZmid0SMY6GDdb+8E9ZoHGVjC+/yrtA==, tarball: file:projects/arm-scvmm.tgz} name: '@rush-temp/arm-scvmm' version: 0.0.0 dependencies: @@ -18474,7 +18474,7 @@ packages: dev: false file:projects/arm-search.tgz: - resolution: {integrity: sha512-n9+MFthVi0kPRyKbesnuxpozFIAXlDtN3AUHhnifFNmk1ljV9L9Qlo6F4jwEUiVDxc3q4Tewg2Z20NXpsl7jcQ==, tarball: file:projects/arm-search.tgz} + resolution: {integrity: sha512-8uv5If4Z3qbT8dx9W89TzHJJ7AR4OC6k1IlD++vK1O7FZe0oNHYWwfd3cVjI7TbaccMC+Syzr+lAuMdt9FqJMA==, tarball: file:projects/arm-search.tgz} name: '@rush-temp/arm-search' version: 0.0.0 dependencies: @@ -18505,7 +18505,7 @@ packages: dev: false file:projects/arm-security.tgz: - resolution: {integrity: sha512-Px/+niYXJJSBaYURVZ7Sy0ZUBrh5mL5YTdHXKcumWBVaNY6IwcdEbtR3ZfjWS1J2fkZNUCBe28PjEy4+oQBzow==, tarball: file:projects/arm-security.tgz} + resolution: {integrity: sha512-B70NAL/cD6aCD6ZFWPaQ2fCRsoA4j8ZnFsGa/y9vDILw/37omK/X06fg1L3eItXDa85rnxAKEyVISb4/CmSlMQ==, tarball: file:projects/arm-security.tgz} name: '@rush-temp/arm-security' version: 0.0.0 dependencies: @@ -18536,7 +18536,7 @@ packages: dev: false file:projects/arm-securitydevops.tgz: - resolution: {integrity: sha512-S4pcnEbybi5nmSjXtXKhIsTRuw7imOZmTcOg3bAPgz3KqoLVKXzNIaQ45IelRQ8XXWzbt2FLMruvJXZWGZa/dw==, tarball: file:projects/arm-securitydevops.tgz} + resolution: {integrity: sha512-8LQ0CNpQRwNCKE5gn+oP3618AYNtvqNec3Mxu5PGrWUs3i1IiQAOqpnLAl+NLFjYgq/5cD3gm8FVlnmKaRRX+g==, tarball: file:projects/arm-securitydevops.tgz} name: '@rush-temp/arm-securitydevops' version: 0.0.0 dependencies: @@ -18566,7 +18566,7 @@ packages: dev: false file:projects/arm-securityinsight.tgz: - resolution: {integrity: sha512-z7/bwVywKxYb8/nzlnRHG0naVcEeSHTzxDEQ0c1QiRmlvtuuVReA0sH0eBKCSUWqe2Gad9W6zFjyLoqUxg2iyg==, tarball: file:projects/arm-securityinsight.tgz} + resolution: {integrity: sha512-ECeHKmdNfMrlWU+ALpyQjR6P1EmyqVmwq333v5RV6lVJmh8P0P/BxUNCXpyzFW1fbzQrNz5PkcxeWk8Dn1OXeg==, tarball: file:projects/arm-securityinsight.tgz} name: '@rush-temp/arm-securityinsight' version: 0.0.0 dependencies: @@ -18596,7 +18596,7 @@ packages: dev: false file:projects/arm-selfhelp.tgz: - resolution: {integrity: sha512-qKw7XYBLOZ8gMshNFDUxW6hhf4A60cbTwLA+s1Fh/OPUKopWJ6u8z0uw40ZaodIosbk/c6XPhWaYtUImIblFsA==, tarball: file:projects/arm-selfhelp.tgz} + resolution: {integrity: sha512-Du6qiL/0d6POf7L+oG/79kFrVo1aq/OqOT9GcaPwMgsATyPRJ30MBVglpAz2Y/ZQ2PhOUZlC06LzxW6er51qTA==, tarball: file:projects/arm-selfhelp.tgz} name: '@rush-temp/arm-selfhelp' version: 0.0.0 dependencies: @@ -18627,7 +18627,7 @@ packages: dev: false file:projects/arm-serialconsole.tgz: - resolution: {integrity: sha512-GMojm865n40ZBB+4kLDKzAoO6dOa4U+Vz7zEFXNcbIHiQUoS6+PwzuDSPvOLSeNxHV7samqCTkge2FnmlQqr2A==, tarball: file:projects/arm-serialconsole.tgz} + resolution: {integrity: sha512-IE4+e1/ccdTPu/DGZ319e0G9sO5zDhKOHYAJ3ys2d1TEgzfyZq701uDZYWj2jRPp+wTbWI1OKHNUchLOv2XFiw==, tarball: file:projects/arm-serialconsole.tgz} name: '@rush-temp/arm-serialconsole' version: 0.0.0 dependencies: @@ -18654,7 +18654,7 @@ packages: dev: false file:projects/arm-servicebus.tgz: - resolution: {integrity: sha512-mX0dwH8mu+GrYq+JsD3AhOjm/K62WRtCNHRwHpyrwCtgc+VUuD6T/mpD3t/oERQ5NcMj/KubhdOk6iQci39eNQ==, tarball: file:projects/arm-servicebus.tgz} + resolution: {integrity: sha512-iKMaq8Mpd8NWdBvKvDKFX8HME7Vmks7T44pkpV8l7Py3eFY9JQSE6DVvrY9yD6EJWWxUkoswtZM7/UcoNr8gzw==, tarball: file:projects/arm-servicebus.tgz} name: '@rush-temp/arm-servicebus' version: 0.0.0 dependencies: @@ -18684,7 +18684,7 @@ packages: dev: false file:projects/arm-servicefabric-1.tgz: - resolution: {integrity: sha512-mhjzYzaHr459X1YZqYfeMyMf0WE9tGDIS0NolkxvsJHVS4GzfXLk+Qwv94I0Oczd8icANrt5bvtewhMJMN55cA==, tarball: file:projects/arm-servicefabric-1.tgz} + resolution: {integrity: sha512-VpD1QplYj7Nk8D1EVFya3hgMbFMKel3IDJZb2DZtxuO2TMU6aDBAm8Fh1ObDEaqFtKS4zG08zC3+Sa6vq/3wFg==, tarball: file:projects/arm-servicefabric-1.tgz} name: '@rush-temp/arm-servicefabric-1' version: 0.0.0 dependencies: @@ -18714,7 +18714,7 @@ packages: dev: false file:projects/arm-servicefabric.tgz: - resolution: {integrity: sha512-nBD/gkz9t+npnHpQxhMqmYsiM7g2ORRS9ZTuXy8esCn2ErOSZeus7nndC7bVRSaWUFjw3RCtEaKOGC+k5FeBPQ==, tarball: file:projects/arm-servicefabric.tgz} + resolution: {integrity: sha512-PYs4dUaMHAw61YrQ+9Gtrcvos/F+ue1jMFIG4K2F49lVjEJ8X3HddH7ewaUHP1GTzevTGSQeeOqipJJ289ui+w==, tarball: file:projects/arm-servicefabric.tgz} name: '@rush-temp/arm-servicefabric' version: 0.0.0 dependencies: @@ -18760,7 +18760,7 @@ packages: dev: false file:projects/arm-servicefabricmanagedclusters.tgz: - resolution: {integrity: sha512-TCi0jp2pkdiaCDttYrLe2lOgb2BLNKzfqy8sCBizSGqbapwU1zr2k1dsdlVPFaBmoPG6T3+MqqBukQ55Qde9NQ==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} + resolution: {integrity: sha512-aXLhNHWEstwVsLKpmTC2k/xVystn9qlcSGaDg+o6B5saAiAICgXAynb+8X4YUUkH/N7xVIGwB06GhYPhmkDwMw==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} name: '@rush-temp/arm-servicefabricmanagedclusters' version: 0.0.0 dependencies: @@ -18791,7 +18791,7 @@ packages: dev: false file:projects/arm-servicefabricmesh.tgz: - resolution: {integrity: sha512-VUYEVVtWCIYNADs1mvJKm6x/q9zkLVxBvBgFeh9X0pn5A0I28A8LN8NikklaByhLopV4Yfoqf8iNj07TErM7oA==, tarball: file:projects/arm-servicefabricmesh.tgz} + resolution: {integrity: sha512-DAoHYCxEbPvnDOv46/WhvUT+yt66a6vKoaGJpQvqDpKmmpToXECdoprk6D4y0TvRfA1qRjpF8VoNFHjtgOUynA==, tarball: file:projects/arm-servicefabricmesh.tgz} name: '@rush-temp/arm-servicefabricmesh' version: 0.0.0 dependencies: @@ -18819,7 +18819,7 @@ packages: dev: false file:projects/arm-servicelinker.tgz: - resolution: {integrity: sha512-BI03Uf+B32eQ1/UJ5zwaebq+GqL3BZKvZRhYiHKNZIZ5XkSCj/+RbzWxkrUIYpjvYK1kK8ZdxriBEEge5x+yCQ==, tarball: file:projects/arm-servicelinker.tgz} + resolution: {integrity: sha512-b4I+nEFdfBdbxwWL83hH8Cx8u1tnApKwJ4woUu5sW1oeBY+b1EBHqB1oMRn537e0OKZfa5rYLBVSLSSjXHCgFA==, tarball: file:projects/arm-servicelinker.tgz} name: '@rush-temp/arm-servicelinker' version: 0.0.0 dependencies: @@ -18849,7 +18849,7 @@ packages: dev: false file:projects/arm-servicemap.tgz: - resolution: {integrity: sha512-gMlBuke+uVxkC+RHCKU/uqQF3DDItNnnSY8u3/6am2rhQKMmAyNE9cwf9LeOuTaK9Vwyp40/domzBBT3WXHi9g==, tarball: file:projects/arm-servicemap.tgz} + resolution: {integrity: sha512-TuOms7H4yauZtgxdgm7wHhfCAg1aGoXBxp+pH1DJYcq5Dv0Hl8OLiASVR76MquUU0hgGWCY8HEk1rnY2gOBmnw==, tarball: file:projects/arm-servicemap.tgz} name: '@rush-temp/arm-servicemap' version: 0.0.0 dependencies: @@ -18877,7 +18877,7 @@ packages: dev: false file:projects/arm-servicenetworking.tgz: - resolution: {integrity: sha512-jTqnBRCg8w5P4b+b1zRL8OcqS/V7ZmJdoyobiF3nlybl7r3Yrn8QYjqsNSoDyTfZCPUobdfJXiw02OjvHBKT7A==, tarball: file:projects/arm-servicenetworking.tgz} + resolution: {integrity: sha512-i8zywAj3ogUJQ8TsnlaNoWGcHF4DklFscEdWVm0GJEf5kYSb9S6nXg40mVHqKtLLa1EiawVcXaMiHta7qlOlxQ==, tarball: file:projects/arm-servicenetworking.tgz} name: '@rush-temp/arm-servicenetworking' version: 0.0.0 dependencies: @@ -18907,7 +18907,7 @@ packages: dev: false file:projects/arm-signalr.tgz: - resolution: {integrity: sha512-zOj+xr0QvdXrIlVyYKgwydI81agrOmG5t5IPn1LBtXKhHc6awL3+j5mBc4UKVb33U4vujVMSAIznx8U/STDDRw==, tarball: file:projects/arm-signalr.tgz} + resolution: {integrity: sha512-q3he14cTJvsZlGmkKan1jmInCxqH8L9Qjiph4Kk9rNqDNOjDzWjfI5rblwT2rwzrDhwn3LA28zbl8mkEeFUneg==, tarball: file:projects/arm-signalr.tgz} name: '@rush-temp/arm-signalr' version: 0.0.0 dependencies: @@ -18937,7 +18937,7 @@ packages: dev: false file:projects/arm-sphere.tgz: - resolution: {integrity: sha512-jQJaQ8K8/TuACKtMzMaljQ+2Lqpx08OCBYb/Hi+D2/5UGS9iW7GEu1nXdyT+vltrr4YYCINZn6n4L2+CHHTlQw==, tarball: file:projects/arm-sphere.tgz} + resolution: {integrity: sha512-zu2ViWjA8Q+zH59tu1TFghRMTpx/o59Njik5kxjhJimusHi2WdVA2tFXy+43JOGZn2y/EOKTx8ByPe3QXXPgJg==, tarball: file:projects/arm-sphere.tgz} name: '@rush-temp/arm-sphere' version: 0.0.0 dependencies: @@ -18967,7 +18967,7 @@ packages: dev: false file:projects/arm-springappdiscovery.tgz: - resolution: {integrity: sha512-Zb4tvHVkQFwSBEoyOwiCg+1MXyU0xYDpG6OqyCuWiQvcdHM4UwXcwJSfJznS7GTTmQdCqegVXYLxUYJTpxoobw==, tarball: file:projects/arm-springappdiscovery.tgz} + resolution: {integrity: sha512-8I6C+bVGH81wWi93y4yWThAN6Jg45vsdz0QJ0aNh8pURiwRSLfYjqpcWFGrrvMtfLPsDvsDmya/sPDTxYfI56w==, tarball: file:projects/arm-springappdiscovery.tgz} name: '@rush-temp/arm-springappdiscovery' version: 0.0.0 dependencies: @@ -18997,7 +18997,7 @@ packages: dev: false file:projects/arm-sql.tgz: - resolution: {integrity: sha512-73Oet2aISNMPTPVJjDN0whP3J23ZtcbObc8wUifIqF/x+sKGEEWDwH2jdwcy4d+MJ0D99rsnTsEfPNK617tPAQ==, tarball: file:projects/arm-sql.tgz} + resolution: {integrity: sha512-jAEmxePLAQYwQA1+pc90ne5yg9S17zaCEdxcWSs+mzffP6aaMgCyTRVsMUWgn8KSw9Yi6zC0xzzf11OOYq3lKg==, tarball: file:projects/arm-sql.tgz} name: '@rush-temp/arm-sql' version: 0.0.0 dependencies: @@ -19028,7 +19028,7 @@ packages: dev: false file:projects/arm-sqlvirtualmachine.tgz: - resolution: {integrity: sha512-pYNGuK8/84ZrBuewv7yQqhdCo/IVcD+mfYYPZty0OdFkx3SKB3gzBmTQ5m++xVN1ErX3wNPnX6G9OXKLSLX0Ag==, tarball: file:projects/arm-sqlvirtualmachine.tgz} + resolution: {integrity: sha512-fqfFdEwf0t8GAOh7qfR5g5YhSs8Km6/IaoafYyQVwV6e2jgygHl6zyARRDv8cP2m/KWR6sxj/uo9e6/a/aHLgA==, tarball: file:projects/arm-sqlvirtualmachine.tgz} name: '@rush-temp/arm-sqlvirtualmachine' version: 0.0.0 dependencies: @@ -19058,7 +19058,7 @@ packages: dev: false file:projects/arm-standbypool.tgz: - resolution: {integrity: sha512-8XK6tR34ybn9FddKq0+JQ1bZbzRoW715/OlEZGVKxIYwW7ZIZtuTnrhyfhgy2V4dKzfdja3bAe3ytl+WcusCFw==, tarball: file:projects/arm-standbypool.tgz} + resolution: {integrity: sha512-ad0vpTy1Jgcz8oulGhJAF35Pd2E8h+1IjDqexQoVe9PU4g7piDgfmXu2Enf6ACydU7dentGyCikqr3pZyGDFhw==, tarball: file:projects/arm-standbypool.tgz} name: '@rush-temp/arm-standbypool' version: 0.0.0 dependencies: @@ -19089,7 +19089,7 @@ packages: dev: false file:projects/arm-storage-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-pPMG69GBIGTkkAtuzfE0wMCehJB4H2uRdCJvfrFqWL5+4gdqlAzxzw+Dy+3zfzZz+vEOAtlll43csdDB++ixwg==, tarball: file:projects/arm-storage-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-UY/523bFXh4JW89AWbDbZjZl8dsPEytPd2OjzZ8uYdEcPXsb2JiPeS6741E7kE2Z99pBC9DgwfeqMjPVa6PLyg==, 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: @@ -19118,7 +19118,7 @@ packages: dev: false file:projects/arm-storage.tgz: - resolution: {integrity: sha512-wu02t2M2e+U75bwlQZdo2YHXfAC4cbHGrhJO159LmJFet0/ICOxk5jUgduvhPS2WPOCHruqra4od6jcGxjJsmA==, tarball: file:projects/arm-storage.tgz} + resolution: {integrity: sha512-CrodZpd6ur66ptS0rc95Au7c0CwIRraHAuxmsgQdaqILR2zcprBEfsdnBWz8QSS6uzLDzZyJ5nl2HHgWZXYknQ==, tarball: file:projects/arm-storage.tgz} name: '@rush-temp/arm-storage' version: 0.0.0 dependencies: @@ -19148,7 +19148,7 @@ packages: dev: false file:projects/arm-storageactions.tgz: - resolution: {integrity: sha512-ftPPQPoyeEFHPiCjAqjV9TaxJpsoKPjcOWhFGIyyt7UjSnIsqtp4zm9G7SeGiOWTAuog7BoQ0IYWWseg9oi5vA==, tarball: file:projects/arm-storageactions.tgz} + resolution: {integrity: sha512-y9gBYrOwFnxR6w7ihJHFh+4Ua84IV71PG1QfYKpsYBaCl7Ye6YPSIdsU89rAkb46TKckwsOISqUqij+de8qkuA==, tarball: file:projects/arm-storageactions.tgz} name: '@rush-temp/arm-storageactions' version: 0.0.0 dependencies: @@ -19178,7 +19178,7 @@ packages: dev: false file:projects/arm-storagecache.tgz: - resolution: {integrity: sha512-RO0zn7zgnyBI+/G9/6GQWU/aaiXy4dW9Fqe13gNPaOWQL0Qx+9PFRWqy3Zd2uNoCxa3RjQnwrPuk8Rnsmg8EZg==, tarball: file:projects/arm-storagecache.tgz} + resolution: {integrity: sha512-1ZZEylMxUh/nPoxIKGSxpaVoHOcOOABS8qkwf4BlK/0y1/siwnBJSvqHgFcZ3D5YlbbIuj8rRVSNInaIuFUR5A==, tarball: file:projects/arm-storagecache.tgz} name: '@rush-temp/arm-storagecache' version: 0.0.0 dependencies: @@ -19209,7 +19209,7 @@ packages: dev: false file:projects/arm-storageimportexport.tgz: - resolution: {integrity: sha512-FrkH1kkYZWRTmhzUOuNymupxNYkUF/0zi9JWQyDQB3W65DcOZN0w9PxIMF1aTOKHe8s6UlDpbpr1zmvx2r5ZTw==, tarball: file:projects/arm-storageimportexport.tgz} + resolution: {integrity: sha512-yi5HpUSvqmLbhj5gcwqzn3k4pKGorFKZQN5VwuxnFsZos/hwSxe/UKLRE4xijisCJh8NytSx4CDP0SbFpvoXxA==, tarball: file:projects/arm-storageimportexport.tgz} name: '@rush-temp/arm-storageimportexport' version: 0.0.0 dependencies: @@ -19237,7 +19237,7 @@ packages: dev: false file:projects/arm-storagemover.tgz: - resolution: {integrity: sha512-eBTpDLGTC8bzTU5PxS+OILzHHcbDuRDDhLFgBmCUHKoY8wMKK4gLmz/u7l4IXfanLagxihCT395OAmknYxNEsQ==, tarball: file:projects/arm-storagemover.tgz} + resolution: {integrity: sha512-UsX6UCtWlnuZYFIzdOq/F7l72d4ku5XR/9dmaPqmgOz795hO3b5k3M69IBkdEeFMgHNmj5d+K/BIkRtVTA1+nQ==, tarball: file:projects/arm-storagemover.tgz} name: '@rush-temp/arm-storagemover' version: 0.0.0 dependencies: @@ -19268,7 +19268,7 @@ packages: dev: false file:projects/arm-storagesync.tgz: - resolution: {integrity: sha512-CVer+JDWP2v9lzFt+s/g9qVJs5OyMa0jtq6OIt0vEEY35B91/0ZX/6FaDZvOil6ogF/fn8HYsLUlpPqk+3GUAg==, tarball: file:projects/arm-storagesync.tgz} + resolution: {integrity: sha512-4U6POnxYGRyF5vQB9KeQGyWYW/adVrtQku+3xfe3Nj0QQ8VpmN5q5DVwbI+NDLIOvrXm0ReaQzFUtbhgIc9K9w==, tarball: file:projects/arm-storagesync.tgz} name: '@rush-temp/arm-storagesync' version: 0.0.0 dependencies: @@ -19297,7 +19297,7 @@ packages: dev: false file:projects/arm-storsimple1200series.tgz: - resolution: {integrity: sha512-HoMQdFdLZ9KsB/yvQRQeyCUeXSX2xtZKdqmy6WJgRsi3aMj8MUWduZC4LbbkDb7F/crUzsGJxhMYNm6zZn2G1g==, tarball: file:projects/arm-storsimple1200series.tgz} + resolution: {integrity: sha512-cTFxPvBEBJWkj19CYPT6zqIT9KLwgfdBW4g/w1Z2OEOme1eKMfI8UmpQo8WKk/6JCpXhQLcewHKkn9NJMpbs2A==, tarball: file:projects/arm-storsimple1200series.tgz} name: '@rush-temp/arm-storsimple1200series' version: 0.0.0 dependencies: @@ -19326,7 +19326,7 @@ packages: dev: false file:projects/arm-storsimple8000series.tgz: - resolution: {integrity: sha512-8Y3vrXijr+GNdjDTMU5lMX+lcplFw3T9h2j8XbvHqrzWwHAnN24GMJN1styPzvvTesGtXrsEDAbAIGTkMxswzg==, tarball: file:projects/arm-storsimple8000series.tgz} + resolution: {integrity: sha512-i1eh3ERKkdECOuc/BOb5exDZuL7aUTEKiXFpqLlKcfKgXz1pCEYPV8ekhK6U4QXuwNWPan3+y6TzeuoKxCjH3Q==, tarball: file:projects/arm-storsimple8000series.tgz} name: '@rush-temp/arm-storsimple8000series' version: 0.0.0 dependencies: @@ -19355,7 +19355,7 @@ packages: dev: false file:projects/arm-streamanalytics.tgz: - resolution: {integrity: sha512-mMgEakc8HukU0aZNHCjH4JtfdnAjluphyODqWpzS3haO6hwglmw9qTkRFD9OdeTQaNYX9G7tmlnj6KkL9+zJ6A==, tarball: file:projects/arm-streamanalytics.tgz} + resolution: {integrity: sha512-BftyU/D+V40GmtOKEIBcjM3NQvpPQGefxlOVErMEkTvkRf1Ha7KXL+gcwWfHIWmeDlBYlU9S38yR0veRGvaD3w==, tarball: file:projects/arm-streamanalytics.tgz} name: '@rush-temp/arm-streamanalytics' version: 0.0.0 dependencies: @@ -19385,7 +19385,7 @@ packages: dev: false file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-j6JXR3XLuIHwKdUq+YL1sFmI1MfvzIjwFhykeFn0BxUiaEzus6dF9IKfiRYz/oK7lU0EpqbASLAWlWsFtpn3ZA==, tarball: file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-FWSgHuhV2hoZPRYrBFbP0I8pIHfK0VWZ1ThRFMhUvBm5bePKJvDm9A8WxQ1UACBYQ+r4sSqccPYxLDAUXQHWjA==, 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: @@ -19413,7 +19413,7 @@ packages: dev: false file:projects/arm-subscriptions.tgz: - resolution: {integrity: sha512-yxZ6qrSI1iPNoZNTfWjavZhpkUinY4iPqwMSZxL1gQFqGShQOEfgCpBT0DiJXyIYhevwNlQzg8BFFVCLJVDs+w==, tarball: file:projects/arm-subscriptions.tgz} + resolution: {integrity: sha512-N8BQ0j0ydmfNDRBK6+IVsrcf3+UkmfGNMubsDDoN3FvFRuHIDEN8YLB8NyhvhrMYFaoHGgCR56//I5qlOrllSA==, tarball: file:projects/arm-subscriptions.tgz} name: '@rush-temp/arm-subscriptions' version: 0.0.0 dependencies: @@ -19442,7 +19442,7 @@ packages: dev: false file:projects/arm-support.tgz: - resolution: {integrity: sha512-h0HUrgnfJMgkcahpjb48+yRT+pQ//arYnNprAp0WTqgXEeHaXA02keI0rqTvuXM10BQV5CKiaFXWLh1XmK8Nmw==, tarball: file:projects/arm-support.tgz} + resolution: {integrity: sha512-mTNhSWriRWm1/pnKKWqwpFL91hPzZxtT3mrVgRhpQyEh2Nu5asIalfe0anZlF41QjSekjraARGS2epcNTRXRLQ==, tarball: file:projects/arm-support.tgz} name: '@rush-temp/arm-support' version: 0.0.0 dependencies: @@ -19472,7 +19472,7 @@ packages: dev: false file:projects/arm-synapse.tgz: - resolution: {integrity: sha512-PKSs1gos0LMkEvlgcKjm0Rx3t7kt9LrHd2zcHjDQQlj68x2AZqRqixXrs9G7+9InBWFyXL9E/K8q25KKkCe66w==, tarball: file:projects/arm-synapse.tgz} + resolution: {integrity: sha512-gnS+AzWwj3uKCAVg064c9Wzgm7hKJq+db8tLe/XAJxXqPWGG9nKtc0q0sC/AGLuT24De6jZGBvNiHb9KYWTsMg==, tarball: file:projects/arm-synapse.tgz} name: '@rush-temp/arm-synapse' version: 0.0.0 dependencies: @@ -19502,7 +19502,7 @@ packages: dev: false file:projects/arm-templatespecs.tgz: - resolution: {integrity: sha512-i/Zf3P6eq0cqB3hLbsmW5JYGoCsPzTebE/9W3vkLLgPytl6TAXkyVGk705Ubd0uAMOMF9PsAToALULf5zx1xwQ==, tarball: file:projects/arm-templatespecs.tgz} + resolution: {integrity: sha512-fK0qpWYE/TPivDe2HG8za6k/rWYQcjsVgKrkwJvTT77G237Bcp9AxuTOSBTr8rhAG43YmzuetLFf2F0a4t/jCw==, tarball: file:projects/arm-templatespecs.tgz} name: '@rush-temp/arm-templatespecs' version: 0.0.0 dependencies: @@ -19529,7 +19529,7 @@ packages: dev: false file:projects/arm-timeseriesinsights.tgz: - resolution: {integrity: sha512-qcaxrXXHz9j1L7wsQtOSwRBjCtqn049mL7cp2cBleXhZaxwHPBWlEL1yHfc1XXuBH+SGpEw9PsmSV0E7/4Lkhg==, tarball: file:projects/arm-timeseriesinsights.tgz} + resolution: {integrity: sha512-ootvGtM+S6EIlwQFOVaOZFUVjCN3Za3fD3S0j3PDVR4gsJfwnFRGwf/SdNLG1uwJpaGnmalvMjLGph7+E4xO1w==, tarball: file:projects/arm-timeseriesinsights.tgz} name: '@rush-temp/arm-timeseriesinsights' version: 0.0.0 dependencies: @@ -19559,7 +19559,7 @@ packages: dev: false file:projects/arm-trafficmanager.tgz: - resolution: {integrity: sha512-PXGzoriUH8pOZxxsnbDoYkn7UhQWLC0bydW1uXW1aKQNnSZhEWiQ7ebW+kTvJks40b4beaQXfho8nmv2EUI/yQ==, tarball: file:projects/arm-trafficmanager.tgz} + resolution: {integrity: sha512-3w4+wkFe6S1S57009dFn+AWddYAy73EJhKrrFoZFtgKcY0c9WiqHxQrNqibyB7VMUsGOy3czFdp9+maYnNLuoQ==, tarball: file:projects/arm-trafficmanager.tgz} name: '@rush-temp/arm-trafficmanager' version: 0.0.0 dependencies: @@ -19587,7 +19587,7 @@ packages: dev: false file:projects/arm-visualstudio.tgz: - resolution: {integrity: sha512-ZTBQ5hiO3FmkzfGVnh7eWH2t1rK9fuYbfs4Jh7id9eIv8Uool03CuqDX3HVWR4ybdNtvrO4eW9hxoBulKf43Qw==, tarball: file:projects/arm-visualstudio.tgz} + resolution: {integrity: sha512-eT8xtQIsuBs4dl4SC+wYDSHgOLuwoyXDb4ponzU+ApjB6tW9nH4qZ2szxGA+u9I7Aur1bhTxE+OEAGArip4e3Q==, tarball: file:projects/arm-visualstudio.tgz} name: '@rush-temp/arm-visualstudio' version: 0.0.0 dependencies: @@ -19616,7 +19616,7 @@ packages: dev: false file:projects/arm-vmwarecloudsimple.tgz: - resolution: {integrity: sha512-iSBoVhQA4YidmDMKm5kXY8ySPBPBPBgbAevjzOoGc0G1am+dmDY2Nrg4rh3WMXPQvKQZzYGEdBi8c31RyBFNaA==, tarball: file:projects/arm-vmwarecloudsimple.tgz} + resolution: {integrity: sha512-GaQkqiFuejshJA9bJvTXwQ9sIP3aIOJbgGbgIfpoQDWkLn/2fRrsE5bZYqoDQ2+RTxzUFsQcPRBiQrd3UD8k7g==, tarball: file:projects/arm-vmwarecloudsimple.tgz} name: '@rush-temp/arm-vmwarecloudsimple' version: 0.0.0 dependencies: @@ -19646,7 +19646,7 @@ packages: dev: false file:projects/arm-voiceservices.tgz: - resolution: {integrity: sha512-wjwC1xcsilmM1swl1/rQGu9soDeSlOBUAAKyU682ZVRaqlmqAQf0+Vls59qjnWolQncabYq8pGESLpPq+RqcGg==, tarball: file:projects/arm-voiceservices.tgz} + resolution: {integrity: sha512-nQ4UThLd993Hrj5rgnzcn74jgMoj260kjTtnS2ZFoEs9ZUCLxWDEvVLvMAE7WSUQfJJhdkZYxnOjdvlpk9MNYA==, tarball: file:projects/arm-voiceservices.tgz} name: '@rush-temp/arm-voiceservices' version: 0.0.0 dependencies: @@ -19676,7 +19676,7 @@ packages: dev: false file:projects/arm-webpubsub.tgz: - resolution: {integrity: sha512-lDb8BncJGdS8FUQu/OSJfYYzkygPPqZ0P1BJqupO74IWVIAHz8qvMsb16bk0iaVt0S1S1sFUbwRHXYQGtypTrg==, tarball: file:projects/arm-webpubsub.tgz} + resolution: {integrity: sha512-M/la3E8Hmbf4jUjZuJHlcFwh8mj6IwL1DkUhsZPTI8PShkyt62ED0eqkYSjH7Rk3d9eqejzt5ml5kqOD83PVXg==, tarball: file:projects/arm-webpubsub.tgz} name: '@rush-temp/arm-webpubsub' version: 0.0.0 dependencies: @@ -19706,7 +19706,7 @@ packages: dev: false file:projects/arm-webservices.tgz: - resolution: {integrity: sha512-ZqhbL8SHzp/8DMRisACAogpghLDGbI2CfjuZ530M9uWKVR1/Ft6XdINfIpQuYCzz3gLSB2qhdLV7eOCRYM+Pyw==, tarball: file:projects/arm-webservices.tgz} + resolution: {integrity: sha512-ekHUB6FuRw8WckbapaHoIrOBNkM9pyMYpvh3eAoLdJuXtuB+sWhi5AkbqMAAOmG5eTIFVcdFerLM9mF5oe7BpA==, tarball: file:projects/arm-webservices.tgz} name: '@rush-temp/arm-webservices' version: 0.0.0 dependencies: @@ -19735,7 +19735,7 @@ packages: dev: false file:projects/arm-workloads.tgz: - resolution: {integrity: sha512-MUOiI1Y8zv4ZFDeN6QiFjsgEvJOOnrTbaPkqJfXZjVFmi9lPcjB4AZOEAkuGQGJ7i4foZ6XCuI3/hGXOzE6lwg==, tarball: file:projects/arm-workloads.tgz} + resolution: {integrity: sha512-Hq5iuKGfYthKhLV3MwJJnKMBmMp+VWLMrjWtyqL/Hl1oX0I3H8k3/4awBercHCF+UwBQdLZWaJLci3tc5OboxQ==, tarball: file:projects/arm-workloads.tgz} name: '@rush-temp/arm-workloads' version: 0.0.0 dependencies: @@ -19765,7 +19765,7 @@ packages: dev: false file:projects/arm-workloadssapvirtualinstance.tgz: - resolution: {integrity: sha512-di/H4LlEHmsyf1Te08GxWeR7n8ceyE8AP5CH9ZqwMUb0a/uNTRcDRbb+iY3rBV2iSJLJh4GoSF6i38BsXRLNfQ==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} + resolution: {integrity: sha512-J+ADBzOKzJs4zOtj19h6zmBJyHdkxMTLzNw6IaXcN7NXmW47p3RxNcmd/Q7Pibowv4MT4bdbbJilJk8rNsMSBw==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} name: '@rush-temp/arm-workloadssapvirtualinstance' version: 0.0.0 dependencies: @@ -19795,7 +19795,7 @@ packages: dev: false file:projects/arm-workspaces.tgz: - resolution: {integrity: sha512-XzL5da44qxz0ss5sVZ6p89qKs9IH1FTSLHgBh0JgyGZ8HPgM+qFqDtwgaOG+1weAw4GEcPqOH/sNcDBvieDTKg==, tarball: file:projects/arm-workspaces.tgz} + resolution: {integrity: sha512-x/+dVXfl8FOWCby3FJpwv+qJ73zZVXQArVInVWkY5yar6KmCrN9qxfkLqMESzwPj7cgM2xjBj5j9/lbWa9/Mwg==, tarball: file:projects/arm-workspaces.tgz} name: '@rush-temp/arm-workspaces' version: 0.0.0 dependencies: @@ -19822,7 +19822,7 @@ packages: dev: false file:projects/attestation.tgz: - resolution: {integrity: sha512-Cjg+kS2ubVU3V2eKpeOJd9s8k/Afy+Euf0UznscBQQ/p6OhDLcAP3YfVAUSVtoWZCMkeMdEFl2EVs7yeNJ3SDQ==, tarball: file:projects/attestation.tgz} + resolution: {integrity: sha512-l+kGTQVwItgb1fkO9koHefDga+zYn/Rs9d+m8yj02ZPSFOd0a2T9qhHFbXEj7t2uGU1+uiyOBpCrR/Z/45O9+g==, tarball: file:projects/attestation.tgz} name: '@rush-temp/attestation' version: 0.0.0 dependencies: @@ -19873,7 +19873,7 @@ packages: dev: false file:projects/batch.tgz: - resolution: {integrity: sha512-BKLlTLCm94mrfJCXuXETNYwuuTBCJnTuX/Dj3gOATn3tnbmTx3lx2jLXHpS5LuKInqgs8lPe8h2KMM20h9pDVQ==, tarball: file:projects/batch.tgz} + resolution: {integrity: sha512-KZMlKB87YwC08rhriPyTaxir6Cbo0eouFiObcxdM5rVR8TwkEz7r/utYP1C21WCJxPohdSeWK6CP2rRm/prR3g==, tarball: file:projects/batch.tgz} name: '@rush-temp/batch' version: 0.0.0 dependencies: @@ -19914,7 +19914,7 @@ packages: dev: false file:projects/communication-alpha-ids.tgz: - resolution: {integrity: sha512-Hst9jYwgYIXxOkDOJ3g/8fF2DUb9ufY/6eJf9Li8cszU6rUWkqF3UarbSNtqsENlgkMn8nc38eDR+I062XhlYQ==, tarball: file:projects/communication-alpha-ids.tgz} + resolution: {integrity: sha512-GxF9Mrz2Z52WGtnDFiI52dk1UfiaENxco2vJOMdk8rO6EBPSkNzXMpdRI4VNyxdYfTsU38l43fd2J0QVZ3E3dQ==, tarball: file:projects/communication-alpha-ids.tgz} name: '@rush-temp/communication-alpha-ids' version: 0.0.0 dependencies: @@ -19957,7 +19957,7 @@ packages: dev: false file:projects/communication-call-automation.tgz: - resolution: {integrity: sha512-nPI+6paf8bm+bAp+Nah+UysteBj9B5zhZMo/wPzxE+42lCm1PaIo7SlRFlpWg7xv3QpJ98Pz/Gwy+QshONxy8A==, tarball: file:projects/communication-call-automation.tgz} + resolution: {integrity: sha512-3WzCsKgqaPTjWBwgZqFPVk6LdO5xnS72jN89U8lgBhi59FFvRYEowDILAR1bTIMN4nGmVC7HB5rkt4Proj4KTg==, tarball: file:projects/communication-call-automation.tgz} name: '@rush-temp/communication-call-automation' version: 0.0.0 dependencies: @@ -20003,7 +20003,7 @@ packages: dev: false file:projects/communication-chat.tgz: - resolution: {integrity: sha512-sMoxDYWNcQKW8VwXQm9X3lc9YBPpuVYJys7lUiudV7lxDZNPbfsZ0x3v7u3S/W4IIJQku3EHzx1lCsi6E7pyUw==, tarball: file:projects/communication-chat.tgz} + resolution: {integrity: sha512-SW3kV3WMqR2jh2SEqertR+xUpkCSMuj8dhH4sBgSrSpkj2rL9bkr6mILw0YJ7+e63+Cgl0yqFTaIUfYi3fZycA==, tarball: file:projects/communication-chat.tgz} name: '@rush-temp/communication-chat' version: 0.0.0 dependencies: @@ -20052,7 +20052,7 @@ packages: dev: false file:projects/communication-common.tgz: - resolution: {integrity: sha512-dq2CHqJUj7/jCzwrfvlplosHFpgenNZlnuVtj7P34AjaLKYV3JvkeuAo1I6nRgxf08AnByPplCKgGZMcgvicpA==, tarball: file:projects/communication-common.tgz} + resolution: {integrity: sha512-gNfo/2cMkO+kKl5G7MFLUTNujIhJ0eZDWh9k4NTc/l41ajcIpGhFqkCeoqIx2U6QGkq0JqILeNpdmxp40T3RLg==, tarball: file:projects/communication-common.tgz} name: '@rush-temp/communication-common' version: 0.0.0 dependencies: @@ -20097,7 +20097,7 @@ packages: dev: false file:projects/communication-email.tgz: - resolution: {integrity: sha512-x//4ITCLpNDIhQGqn3kWrqEVNnHZqEvT9lj0TxPOQ60XAP1Ff0nsqBMXB9bWPnHRbN+DmHJwzQVyDJkczBKfuQ==, tarball: file:projects/communication-email.tgz} + resolution: {integrity: sha512-OuCJlT8sUnZ9SsPiqOGk37mDBzEMrl+te6kMREDsr0h8T+kxKGVoeol/fzBU1IBfVL7MpG/5pETgOX0pz1y64Q==, tarball: file:projects/communication-email.tgz} name: '@rush-temp/communication-email' version: 0.0.0 dependencies: @@ -20138,7 +20138,7 @@ packages: dev: false file:projects/communication-identity.tgz: - resolution: {integrity: sha512-CaqJYe9lUMXxkmwkscjMGHgfHrgSoexwfvwzG7VSKwHx77v8c+CtLjyC24ztLyjHXzflYWB6I8rL6uV4TvpYhg==, tarball: file:projects/communication-identity.tgz} + resolution: {integrity: sha512-4RZHTKD7N4AA8CrjL3Jn+gpIsZzhMqlENpsINrwJNTw9e7ZG6IFG5yOOl7a4PD0tKfscHslLQmkInvwge2hSoA==, tarball: file:projects/communication-identity.tgz} name: '@rush-temp/communication-identity' version: 0.0.0 dependencies: @@ -20185,7 +20185,7 @@ packages: dev: false file:projects/communication-job-router-1.tgz: - resolution: {integrity: sha512-l+/94wTOHY/DWKf+pdg4pCnjpyNX2CAAHzpvLYTDKSGwk3MDRejHyueAUOHmdogB5wM6Z+D4XUEwOpUV7VTWBQ==, tarball: file:projects/communication-job-router-1.tgz} + resolution: {integrity: sha512-Pf7ZICd8zVOyvR9ic3p3osOAwEa8SW++iZMvexgtDYUVj4LGM4+B8jwQT+5eyFQfLWAA9FkD/jtS/9BOFfTuvA==, tarball: file:projects/communication-job-router-1.tgz} name: '@rush-temp/communication-job-router-1' version: 0.0.0 dependencies: @@ -20232,7 +20232,7 @@ packages: dev: false file:projects/communication-job-router.tgz: - resolution: {integrity: sha512-xRuR+PV9qOmg7+H4nEn0dRLdBf2p8e9pBK/ERM+hKXV8bbchzukyM2MeGL+zy4jy1j4Ar+lz+OLpXY2FotlkCw==, tarball: file:projects/communication-job-router.tgz} + resolution: {integrity: sha512-cGXDnBA4Vz6+D2iG2Y1MMR3qbtj0pbAWn2h3cKsQWI8rV3T68/aBpi3nwBTg7mRcfY42uQKLpd0Nl4u4e9hnwA==, tarball: file:projects/communication-job-router.tgz} name: '@rush-temp/communication-job-router' version: 0.0.0 dependencies: @@ -20244,6 +20244,8 @@ packages: '@types/chai': 4.3.17 '@types/mocha': 10.0.7 '@types/node': 18.19.45 + '@vitest/browser': 2.0.5(playwright@1.46.1)(typescript@5.5.4)(vitest@2.0.5) + '@vitest/coverage-istanbul': 2.0.5(vitest@2.0.5) autorest: 3.7.1 chai: 4.3.10 cross-env: 7.0.3 @@ -20262,22 +20264,36 @@ packages: mkdirp: 3.0.1 mocha: 10.7.3 nyc: 17.0.0 + playwright: 1.46.1 + prettier: 3.3.3 rimraf: 5.0.10 source-map-support: 0.5.21 ts-node: 10.9.2(@types/node@18.19.45)(typescript@5.5.4) + tshy: 1.18.0 tslib: 2.6.3 typescript: 5.5.4 + vitest: 2.0.5(@types/node@18.19.45)(@vitest/browser@2.0.5) transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - '@edge-runtime/vm' + - '@vitest/ui' - bufferutil - - debug + - happy-dom + - jsdom + - less + - lightningcss + - safaridriver + - sass + - sass-embedded + - stylus + - sugarss - supports-color + - terser - utf-8-validate + - webdriverio dev: false file:projects/communication-messages.tgz: - resolution: {integrity: sha512-eZvl3T5xmJk+A4A0UFqTpxYV4TQ5eVeOwAOHXMtnZuNFL3FDDET93Ha7Wn+7UaO3nRbAjVjIu+MhaWRXz9r+2w==, tarball: file:projects/communication-messages.tgz} + resolution: {integrity: sha512-cJ+fNIlvMa0D7PzceBoIW4vxkLKrEWB5KyuhwtLRIljU/B08vmrBV9VrsqNgQelE2bnZfeVWZyIDRxwNCsfMBA==, tarball: file:projects/communication-messages.tgz} name: '@rush-temp/communication-messages' version: 0.0.0 dependencies: @@ -20322,7 +20338,7 @@ packages: dev: false file:projects/communication-phone-numbers.tgz: - resolution: {integrity: sha512-39/ssP69pw/1OYF2BbJwDdWwEBHKaoGPaapMW5wP2y88dSbJi90RP5fYhTL5AhzErpIgF4jjmY43WsKLT2yJ0g==, tarball: file:projects/communication-phone-numbers.tgz} + resolution: {integrity: sha512-s+FoHrqA5LFGwD9PbAxmLoARPDZNroSaaGiZkwvLfOT6StsapePnnjLCxiGh1FHTmmuUZOO3+mPoZsoCMdn6rA==, tarball: file:projects/communication-phone-numbers.tgz} name: '@rush-temp/communication-phone-numbers' version: 0.0.0 dependencies: @@ -20367,7 +20383,7 @@ packages: dev: false file:projects/communication-recipient-verification.tgz: - resolution: {integrity: sha512-pc3kCkUSWUxzjslJkVNVN7jyvmolZPxasuILnp9T49K/ntrcPhLf9HJ/NXpGI30F8sSuBAElCksEiLFWqIYf/g==, tarball: file:projects/communication-recipient-verification.tgz} + resolution: {integrity: sha512-raToxpwaZhkvNijRM5KQQPeyFNNPHPB3xCvpGP8T3400EEbZK8/AXhExgGVfsiWPIh+0T0Qgc4Dc+ZR3ESVM0g==, tarball: file:projects/communication-recipient-verification.tgz} name: '@rush-temp/communication-recipient-verification' version: 0.0.0 dependencies: @@ -20413,7 +20429,7 @@ packages: dev: false file:projects/communication-rooms.tgz: - resolution: {integrity: sha512-9WzQ8V3bJICGPHvdYp3lr6jnILw7/c3reSRf3pRhpx/Zhq4mXZD19DDf2C+XgkDqYOd0zg0i0Bf6R+n+AdqvZA==, tarball: file:projects/communication-rooms.tgz} + resolution: {integrity: sha512-dJUJiVv/PWc8+Daf0d8MK849btRZ6mhKUe9fY8KzDw40szhLu+O4U8geDwVF8aVkMxOg3V0Ve00wVv1+IDMXjg==, tarball: file:projects/communication-rooms.tgz} name: '@rush-temp/communication-rooms' version: 0.0.0 dependencies: @@ -20448,7 +20464,7 @@ packages: dev: false file:projects/communication-short-codes.tgz: - resolution: {integrity: sha512-AvToJvBPGoASzpJvShcF77cxKbXU0SHM1pRrkfhp0SDirGjZcIsYmm6i/sw0URcKocMAONdvuFRKF2DZOhIovA==, tarball: file:projects/communication-short-codes.tgz} + resolution: {integrity: sha512-Z8LbaHRpitiRHE0hKhjCvlj+mod3lSVab/4sFMz+dINjKLgLK0EkBBKOV1vjSLrm73aB2B0DMrYiQwVM2jVgHg==, tarball: file:projects/communication-short-codes.tgz} name: '@rush-temp/communication-short-codes' version: 0.0.0 dependencies: @@ -20494,7 +20510,7 @@ packages: dev: false file:projects/communication-sms.tgz: - resolution: {integrity: sha512-Ant+j9sEeDP7tdIEXmLQUqBlxB6gMrBU3Z9yWqGqj20DFv3NHKvcpsucAo0Or9X3q7wnFetfSH7jw/vn0PMQTw==, tarball: file:projects/communication-sms.tgz} + resolution: {integrity: sha512-pTwpMsQDUm8RmgL7Q3aJEuUPnfWeW0GNREITnHUSmDCHCy0ccDzswE759KBr4o5K7VAQhcNVYC85ybVQI27b8w==, tarball: file:projects/communication-sms.tgz} name: '@rush-temp/communication-sms' version: 0.0.0 dependencies: @@ -20539,7 +20555,7 @@ packages: dev: false file:projects/communication-tiering.tgz: - resolution: {integrity: sha512-QuvJOfyK77/npH1OhEMm8tvqXruLnJRDOMML/vSbYxM3QBm83cQQfAM6HHzxNW/JfSNEm9Q+hO0ciKZ71wjVEQ==, tarball: file:projects/communication-tiering.tgz} + resolution: {integrity: sha512-+/lUuj5yujLBlGX7mWu9gPvK8EeeMos07LYd7d+ec+GE5CRWS8nqDFzdv/hMY6w/pi9pFYsMZfhD8wkwfppwRw==, tarball: file:projects/communication-tiering.tgz} name: '@rush-temp/communication-tiering' version: 0.0.0 dependencies: @@ -20585,7 +20601,7 @@ packages: dev: false file:projects/communication-toll-free-verification.tgz: - resolution: {integrity: sha512-KkLg37Pnd5NU5R4EZDOOYfZnWdcb0YwELa6T4DNuR/TE3umc8n6zh1xDbwEZw2RH2Vh/ng9R3Q+cc6NNTueQSQ==, tarball: file:projects/communication-toll-free-verification.tgz} + resolution: {integrity: sha512-QL4+IMRWHCSn7IL67HsgXcIcrKUHvvyfrRxh9ZGOrAg5R6UaDlwAcv7vhLq5/xPL8yoTk1jiJaPe9ItsjCHHkg==, tarball: file:projects/communication-toll-free-verification.tgz} name: '@rush-temp/communication-toll-free-verification' version: 0.0.0 dependencies: @@ -20628,7 +20644,7 @@ packages: dev: false file:projects/confidential-ledger.tgz: - resolution: {integrity: sha512-eFCaoAk2IGaA53SIsOtHu1yJHxoZ1tADhuuw2VY0iFlavHw2BpCiuYYpjE/eQOHIKZlDQDT+fIeLUlPsSoAxGg==, tarball: file:projects/confidential-ledger.tgz} + resolution: {integrity: sha512-IeHVnoNcL68++YYDWRh2Cbt2e0KQfdL2yhjpvPTNH9Cj9lzmSgrxdN2a/Tq7u5fYXYCqEb7wl2xV4IpIg0pf9w==, tarball: file:projects/confidential-ledger.tgz} name: '@rush-temp/confidential-ledger' version: 0.0.0 dependencies: @@ -20658,7 +20674,7 @@ packages: dev: false file:projects/container-registry.tgz: - resolution: {integrity: sha512-PoAp2X+TwZonURuPRPOkOu0N+ZIkLOQ1Ih0GnuWvKIgn+9MqQGy1hw91qpLOXMzPDifDnSIKIh/bqNX743igoQ==, tarball: file:projects/container-registry.tgz} + resolution: {integrity: sha512-eSjgV03PUYSzyFVQ0po8aFst87AwDjron9mIonwDGz3odxtGYM2KoDis+6jchKNDRRA4wi9r73RB3bqj72JDsw==, tarball: file:projects/container-registry.tgz} name: '@rush-temp/container-registry' version: 0.0.0 dependencies: @@ -20701,7 +20717,7 @@ packages: dev: false file:projects/core-amqp.tgz: - resolution: {integrity: sha512-g+B03LVXkJLQf44u3h27ja92FtHtSSKq/TGbTgMSm8YXB1bo6HoGBRhzCIzttMJ8s136NsWOBpv1ZgnABK7qig==, tarball: file:projects/core-amqp.tgz} + resolution: {integrity: sha512-t6C8ltd1Oc0pse9zMoKBE1eQzejgsFVZFkpnZBbasQKS7VCWg5YK6LjW8rr/YlIZiS2n9OOHhaCZHpBy0jlN9w==, tarball: file:projects/core-amqp.tgz} name: '@rush-temp/core-amqp' version: 0.0.0 dependencies: @@ -20747,7 +20763,7 @@ packages: dev: false file:projects/core-auth.tgz: - resolution: {integrity: sha512-vY42cq6R6TdfQb8LIs+0TCdinq8VRK1EFLFfQwaPIiNtZI/xkTv3MIoZAm3zkGrDrNVJQEukNXAmqlfgKJDSAg==, tarball: file:projects/core-auth.tgz} + resolution: {integrity: sha512-pcT95NqTlwz4nKRpaYqn75R0R/tLXQMMq1cKU/lR6ySN4Fngk3eST8uXudXAESNcXh8MIBiB7y5vmiPD77w4/A==, tarball: file:projects/core-auth.tgz} name: '@rush-temp/core-auth' version: 0.0.0 dependencies: @@ -20782,7 +20798,7 @@ packages: dev: false file:projects/core-client-1.tgz: - resolution: {integrity: sha512-r1MX0WreTXkb92PKYmpsANIjK6Ivm46uBrSadpLytScmEzMCpab6kA4qWKv2xRGgNPN9r3SBab9VRWmBgYhUyQ==, tarball: file:projects/core-client-1.tgz} + resolution: {integrity: sha512-6tGiv8BpGy8eTYorXLXYGoEoovqgJ5M8U7w3ccqBkl0YfrwGrDhPkvu3scHqUmdXgUst5PvqpNa8CMsRibNcew==, tarball: file:projects/core-client-1.tgz} name: '@rush-temp/core-client-1' version: 0.0.0 dependencies: @@ -20817,7 +20833,7 @@ packages: dev: false file:projects/core-client.tgz: - resolution: {integrity: sha512-l1rA+2W+9xLNs/CY/qYYUEe+0OVsUP4urW+DPuXQ6Ijqu6d77x1EugNsyu5m3C98RiS/56O9iX4grAAbE5L4yA==, tarball: file:projects/core-client.tgz} + resolution: {integrity: sha512-+IwFRR6/0hBILKGH+TtdT1dSTs+BzL1ohaN2xm3tem4VWCfyMai+gBlru12HrjNoE6dsIMkUJz4MNCpuf9NOfw==, tarball: file:projects/core-client.tgz} name: '@rush-temp/core-client' version: 0.0.0 dependencies: @@ -20852,7 +20868,7 @@ packages: dev: false file:projects/core-http-compat.tgz: - resolution: {integrity: sha512-hbJrSt3XopE7ZHKJGEl+TKFjXDfVhC5SShS0gMtcjGspzz4JJIp0vNRufWCp/QQl4Lrrk2DUL3FvFJjmzUm+yg==, tarball: file:projects/core-http-compat.tgz} + resolution: {integrity: sha512-K7ibMNnAEkccwhD2QMmnVJ6p+N9r+eztB/A4OlfOWyIypu+EpvHI1lE3m6xK6aDBpPXTOZXssFml5gayhOtRhQ==, tarball: file:projects/core-http-compat.tgz} name: '@rush-temp/core-http-compat' version: 0.0.0 dependencies: @@ -20886,7 +20902,7 @@ packages: dev: false file:projects/core-lro.tgz: - resolution: {integrity: sha512-yvw1a406p2ExpVDwIKMP1q0s9OaH5/55IrRIczUwApCnro0Gt8gJ2ttJP2wqQTssMUCv7AZEIOV/OPazBC/R/w==, tarball: file:projects/core-lro.tgz} + resolution: {integrity: sha512-KKQeY14iQ2AeHpCZ4en8rnkkU3cJj6X1i582gmqUa6FuChNikLfJ0ilwCvCiC+N+hnld4dCrHNaXRz7H4F/kjA==, tarball: file:projects/core-lro.tgz} name: '@rush-temp/core-lro' version: 0.0.0 dependencies: @@ -20921,7 +20937,7 @@ packages: dev: false file:projects/core-paging.tgz: - resolution: {integrity: sha512-oH9FpdaW8liSxolp4eS/BGk7Yf0Lqr9a/tU0FIAtQEWauOLZW5tPQcDjkFhVgS62iwOiLFytEQiXJ2rNl8KLug==, tarball: file:projects/core-paging.tgz} + resolution: {integrity: sha512-WAVql5zt+h9ibZYDLDE0SiHEfDPOhhB9b2oskVp0pstHTpFlrPEhHBU+Dv7HuqLL1Ll7EogLwTy81FlZcs44hw==, tarball: file:projects/core-paging.tgz} name: '@rush-temp/core-paging' version: 0.0.0 dependencies: @@ -20956,7 +20972,7 @@ packages: dev: false file:projects/core-rest-pipeline.tgz: - resolution: {integrity: sha512-DBScWFbVyqwjlirL7TqPl0+Af3MTV0A10wBU6JbwWuARhftgQkQJIkcKuGfdBUk17Nl+SmeDw8D4insaHCOK1w==, tarball: file:projects/core-rest-pipeline.tgz} + resolution: {integrity: sha512-b7alNTHtvyIB7LodYrM06A1F8ScsOlc4Qu77ug+YBzC8V7z9AJ4cCLUXfOzo2vJmoIHQa+lcClTzVnPv9OmolQ==, tarball: file:projects/core-rest-pipeline.tgz} name: '@rush-temp/core-rest-pipeline' version: 0.0.0 dependencies: @@ -20993,7 +21009,7 @@ packages: dev: false file:projects/core-sse.tgz: - resolution: {integrity: sha512-nACU82+/xu+3R+P+TUswIGnbpY16h5NJ9dACYinDpQP/VFtePh/TILV0K7wJUNnKuojDEGgX1/hHwoNByyn5lQ==, tarball: file:projects/core-sse.tgz} + resolution: {integrity: sha512-8Y3sGx1Vwi7VLyhYsuIikHKOqCNgLbTCNBoCX+1hOhsOPMvYM3pJ20WMmpp1IzxsxcEoPqfxQDYPjYuBDpzhqw==, tarball: file:projects/core-sse.tgz} name: '@rush-temp/core-sse' version: 0.0.0 dependencies: @@ -21032,7 +21048,7 @@ packages: dev: false file:projects/core-tracing.tgz: - resolution: {integrity: sha512-P9DjRTPs1GTatmP05c1n+5xGiX2CLJASDCIjKV3xcOcKVEBPGvdHtTE0xjRAZ5BNHBqi/Rlfw3Xz6WsJUNVu4w==, tarball: file:projects/core-tracing.tgz} + resolution: {integrity: sha512-JCu3kVTLdmvw/Gp0fWaaNJDayj38yplVojZdweIszXouM7OQyClHZlvXaGvQlZ/i11RZACcfMAj0m0IHX908AQ==, tarball: file:projects/core-tracing.tgz} name: '@rush-temp/core-tracing' version: 0.0.0 dependencies: @@ -21067,7 +21083,7 @@ packages: dev: false file:projects/core-util.tgz: - resolution: {integrity: sha512-B13gfVDXgrdZaroUn2k0tUXo7zMDnTrFRB36DFqILqoVnAYszEFBBNQnt9yNW7tl3DFDr8P6/hjnCPKjzggqqQ==, tarball: file:projects/core-util.tgz} + resolution: {integrity: sha512-hDmD6jAO3QSlkuv324M813c8pkkNDToiPIoJhia9dPCFT/qRhxAO9FYSJut+GWiGFhpP0thBACSlfIxU4istjw==, tarball: file:projects/core-util.tgz} name: '@rush-temp/core-util' version: 0.0.0 dependencies: @@ -21102,7 +21118,7 @@ packages: dev: false file:projects/core-xml.tgz: - resolution: {integrity: sha512-g90A38K7q3GLkVSO/GK38tljI4NZNr536bRaYqp7bSzL7+iMMnxHvC09tZOvrjgNMOpa1QU1rjDv5hgH0NGfYg==, tarball: file:projects/core-xml.tgz} + resolution: {integrity: sha512-8rnx0NlVLTPyXFZECO1XK55ppZN8jmnhd/Z+kWHCTa4KOcyGWA0uqdSYdj55ew3XmR1v2ARPK62D38z3sa/yhw==, tarball: file:projects/core-xml.tgz} name: '@rush-temp/core-xml' version: 0.0.0 dependencies: @@ -21139,7 +21155,7 @@ packages: dev: false file:projects/cosmos.tgz: - resolution: {integrity: sha512-6JYVV/edBloz/AlX/hsaHWjnJry75gDvuUiRWs5DGUE44RI7IYxH8qer4cOjqpwTie86waUEf8Bfo0zgNYCZsA==, tarball: file:projects/cosmos.tgz} + resolution: {integrity: sha512-4T6aUKuID/YUr6KlCqT6aE2OsbJGosLPxxt/OY3VyPSstF8HgIsXM1HfyWvCpJ1362PhTlX1WaBvVxlVyYZYPQ==, tarball: file:projects/cosmos.tgz} name: '@rush-temp/cosmos' version: 0.0.0 dependencies: @@ -21180,7 +21196,7 @@ packages: dev: false file:projects/data-tables.tgz: - resolution: {integrity: sha512-0k9NnYVxTlxr90N8QDS6wWZ3748dwnUv3xFk02PWpnt0Gq4pGyc6XoV0mUEmqJuT0udPnp604zLUssa1Fjdu3w==, tarball: file:projects/data-tables.tgz} + resolution: {integrity: sha512-uQSpb+axAGR2DiEFq3AMMNAKxHLjZkD8sE5X4K8XidvFweUv1dRdOayMaSDDNdJo4R3dffWw4+Jfs8438o5XKg==, tarball: file:projects/data-tables.tgz} name: '@rush-temp/data-tables' version: 0.0.0 dependencies: @@ -21224,7 +21240,7 @@ packages: dev: false file:projects/defender-easm.tgz: - resolution: {integrity: sha512-rvBnctSZ1zRdF13oUGU6cvV6Hw/xCuv7PZ/g+fSeupgkM+BYJOY7SJ8nEODkIwD7DMKYOPN1GSSRd6rQPf655g==, tarball: file:projects/defender-easm.tgz} + resolution: {integrity: sha512-JhUtBnCSyefgcaH4yHS9vFQBO64YTZuqRNH+KJEn034pE+9rZFg111XeCE7TTaocM0eCq4GBdmKo/j10+Kaq0Q==, tarball: file:projects/defender-easm.tgz} name: '@rush-temp/defender-easm' version: 0.0.0 dependencies: @@ -21271,7 +21287,7 @@ packages: dev: false file:projects/dev-tool.tgz: - resolution: {integrity: sha512-yl21SxCggTjpbZ/j550rndI5vZfImPECakVjqUFAOF184WAAcxBJL4DxEUQZzy1wxeJ7RNhhQny31qgWUGIksg==, tarball: file:projects/dev-tool.tgz} + resolution: {integrity: sha512-66IidRFwPa23K2J6Gdws3gd3uYJ1jWzv5dWcCW8gzjBAu7nonW/XibhqDhX7HX+ThJRgGBde96Cx2Hx5xQBVng==, tarball: file:projects/dev-tool.tgz} name: '@rush-temp/dev-tool' version: 0.0.0 dependencies: @@ -21341,7 +21357,7 @@ packages: dev: false file:projects/developer-devcenter.tgz: - resolution: {integrity: sha512-n9J1fkU8qmrEvKcSx+a/o5ZJGJn3XCWlwqmnRnB/DijguwLzowP0Kw10wlXfRhquIDXqdE1hJRcEAiggZTuSIg==, tarball: file:projects/developer-devcenter.tgz} + resolution: {integrity: sha512-uoCOlXj+TaX0kIPgUtfpcD8NvDaUw6JrjVkNS61BTdHW3G1HbcBSMfPS80aDFasJbIzMMSHzb/LEmDSZ1eQhWg==, tarball: file:projects/developer-devcenter.tgz} name: '@rush-temp/developer-devcenter' version: 0.0.0 dependencies: @@ -21380,7 +21396,7 @@ packages: dev: false file:projects/digital-twins-core.tgz: - resolution: {integrity: sha512-znhU7vJ4nHimuS/O5H9dLFLSu9g1whygu89tf78A3GR3vdR/Tz4rHYQdtLS2oxrjBL31I+6QWi2gQaUAxKcVDw==, tarball: file:projects/digital-twins-core.tgz} + resolution: {integrity: sha512-4+pRlXZu4oNBk8Vp+vPMrfCS+BEA4qoLjs8eEAhjW4h97nrBUMtTqwviiDbKhx1jNzcg80sRoZPKBeaT47DYMw==, tarball: file:projects/digital-twins-core.tgz} name: '@rush-temp/digital-twins-core' version: 0.0.0 dependencies: @@ -21426,7 +21442,7 @@ packages: dev: false file:projects/eslint-plugin-azure-sdk-helper.tgz: - resolution: {integrity: sha512-27G4YMP9kFYRVqVV1FcB6pviLTdnLBTlpImmDs2ZkhZYygGbiCxw60TiWru2oZt3cKCzE9RakCB3YdZ8Po+lCg==, tarball: file:projects/eslint-plugin-azure-sdk-helper.tgz} + resolution: {integrity: sha512-BNAjKfF+QfoGeAHl3ED/z/aDIJTM5ylb7gO2V6q5bwvhJHnCFWTNm0lRd0jK9c3JVyIxD+LWPJO0P2i0hGXNiA==, tarball: file:projects/eslint-plugin-azure-sdk-helper.tgz} name: '@rush-temp/eslint-plugin-azure-sdk-helper' version: 0.0.0 dependencies: @@ -21455,7 +21471,7 @@ packages: dev: false file:projects/eslint-plugin-azure-sdk.tgz: - resolution: {integrity: sha512-muFv5+h1sNOv0yYYxjJdjSCouEQ9jEVZx9W/re7tT9lULsfV/u9JbV5vLFRAQJm6mHdOSorK8tEIzX4/VnTGvQ==, tarball: file:projects/eslint-plugin-azure-sdk.tgz} + resolution: {integrity: sha512-PmDtKMlzVHnqzw+ALXhDOvsHlS6tzEfC0NCMpeNeidFcxzG2PKpen3KYfea4aCIzqJuFMePAdg5fwf1wqdQ16w==, tarball: file:projects/eslint-plugin-azure-sdk.tgz} name: '@rush-temp/eslint-plugin-azure-sdk' version: 0.0.0 dependencies: @@ -21507,7 +21523,7 @@ packages: dev: false file:projects/event-hubs.tgz: - resolution: {integrity: sha512-y91y9ncES2zFoF1c8ruoEs2saKnE6hf7eZ3va7ky7rKcSnbwPYJ0cTX00kYGlI4sd/wDa5KT+HRzStJAuVuDZw==, tarball: file:projects/event-hubs.tgz} + resolution: {integrity: sha512-xLnyilBbbHQfmzOAAd5SjygGVv4ge2nrp4WzLc8ifOjRhBLsWdDXsg11j4nGj0/z5/qC1mM6tDtAdoKEF4moiA==, tarball: file:projects/event-hubs.tgz} name: '@rush-temp/event-hubs' version: 0.0.0 dependencies: @@ -21564,7 +21580,7 @@ packages: dev: false file:projects/eventgrid-namespaces.tgz: - resolution: {integrity: sha512-MSAg5HuRAKu7XbLpnnpG8gJKF0oe8x0IB7hcWXhwWftzHuthv64uCJ/pzelKlDFxlmMFC+mtSrXNbJJ53SsWjg==, tarball: file:projects/eventgrid-namespaces.tgz} + resolution: {integrity: sha512-9PoFq2uCsWu9t+azDxQiQacowRkaO7C99Vp9k5ZVA3otIOMGtaZyMcco04bbhoH5YQjQeLdut07saZkt0a1T6A==, tarball: file:projects/eventgrid-namespaces.tgz} name: '@rush-temp/eventgrid-namespaces' version: 0.0.0 dependencies: @@ -21612,7 +21628,7 @@ packages: dev: false file:projects/eventgrid-system-events.tgz: - resolution: {integrity: sha512-8WbGkXYl2meq4wlzgQHRvsUFiHOXS1XABhUJIOPb05FXEpHaDaf72phWQYUuaFUjPEMjJUPw3D70mgoDaDQQqA==, tarball: file:projects/eventgrid-system-events.tgz} + resolution: {integrity: sha512-+PlaZmzoItgLPloB0EJh3W+kkB0Sq/oYt4fBLJ/OGdhIEIQYJIY6d4sG0zvsAL3TmJbA0LnKTHyxVHRbdzJDfw==, tarball: file:projects/eventgrid-system-events.tgz} name: '@rush-temp/eventgrid-system-events' version: 0.0.0 dependencies: @@ -21660,7 +21676,7 @@ packages: dev: false file:projects/eventgrid.tgz: - resolution: {integrity: sha512-/aIxYWOUqFBmzyifimWB/SUZaSdEp8CoZTZD9/kw/el9YvVs9VcAr8BHvvwZTMy3MflejabDNLAnKnwyoKYkBg==, tarball: file:projects/eventgrid.tgz} + resolution: {integrity: sha512-d/axieyfjMweYvEOcRvhXbAG9YtIImODSEF8zPwZVBuh6jiy/eLS/jYJe+twQyd58TPx176KPTqSCiw1GncRjw==, tarball: file:projects/eventgrid.tgz} name: '@rush-temp/eventgrid' version: 0.0.0 dependencies: @@ -21704,7 +21720,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-blob.tgz(chai@4.3.10): - resolution: {integrity: sha512-mLZ4Kje5JcvS1tsSD/hOVYGlHisB1zhpvanaIXnA8W0wIRuoSk01aF0iZQsBCp4bmFTERX2JSvU9O1iTVHSLxw==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} + resolution: {integrity: sha512-5oCF4NJigpz0RnRKVAKJccgluWKa7ZLliD5B2s1bL6COrNJe/u4td0vWgy435S3Db51+VeEn9ICIT/tPz3RcRg==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} id: file:projects/eventhubs-checkpointstore-blob.tgz name: '@rush-temp/eventhubs-checkpointstore-blob' version: 0.0.0 @@ -21755,7 +21771,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-table.tgz(chai@4.3.10): - resolution: {integrity: sha512-3OofgMgoym1F48jfUCM3jHJkiOvrdFT+EQYeAAOlKGhiU57r252IlWb1OZduveLlJMaGqFzekFU778u9HaLxQQ==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} + resolution: {integrity: sha512-rwWimWyJQ4ooozrWuSJGfH3M+p7DtY+Y9fqinWkGuPiwtbqJd5aqD17axilByXM4+UCGcWqrSlUI2MSVyVg39g==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} id: file:projects/eventhubs-checkpointstore-table.tgz name: '@rush-temp/eventhubs-checkpointstore-table' version: 0.0.0 @@ -21805,7 +21821,7 @@ packages: dev: false file:projects/functions-authentication-events.tgz: - resolution: {integrity: sha512-aApTAGIYOhQDXKLIYOVHwMjF3f5Zvlr2g33Oizc4aQQ9oRDztcJDp5KHBEtV+pcMOBzE3uXMJhbpmBf8THjEpw==, tarball: file:projects/functions-authentication-events.tgz} + resolution: {integrity: sha512-HQOnyBSn4Dew4tzB4kwnmnm3hyfj1wb3fbdPE/SnYOzzn+9DK7/vK+gVsSwTVTUqOyr7RLxFYIThyyrRttTbzQ==, tarball: file:projects/functions-authentication-events.tgz} name: '@rush-temp/functions-authentication-events' version: 0.0.0 dependencies: @@ -21850,7 +21866,7 @@ packages: dev: false file:projects/health-deidentification.tgz: - resolution: {integrity: sha512-ViyKG5CrMCQrD+XtF9roPgzipnAayLDbLQtJC8XRYIqFnfkSvIoc+QMUH++JM5Dh9RwSG9yI3rL244bkqlojlA==, tarball: file:projects/health-deidentification.tgz} + resolution: {integrity: sha512-XIXPEX7GVWacOhCOfRcyg/Ignam8Gec8EeOIyWqmUdB+YoRtuGmSsPdDzATSgflVTrym+ZBKcKPDm9PZxG1gnw==, tarball: file:projects/health-deidentification.tgz} name: '@rush-temp/health-deidentification' version: 0.0.0 dependencies: @@ -21889,7 +21905,7 @@ packages: dev: false file:projects/health-insights-cancerprofiling.tgz: - resolution: {integrity: sha512-iaLOhJmMJm++SARTYyq0zF/HqQOt+X4cthNz+4HPsorM9Vl3l4CfKQGx7D54XNpJMxnXls+/W/ibLNrXluGHhw==, tarball: file:projects/health-insights-cancerprofiling.tgz} + resolution: {integrity: sha512-qZASX+wdO+x8kPONr0yOUPpZcNw0IKUZFINTfsCFzJqNibiod7Ap9FxZt0n3vOBbEHAf/BSiF+IzddBfO7iqkA==, tarball: file:projects/health-insights-cancerprofiling.tgz} name: '@rush-temp/health-insights-cancerprofiling' version: 0.0.0 dependencies: @@ -21936,7 +21952,7 @@ packages: dev: false file:projects/health-insights-clinicalmatching.tgz: - resolution: {integrity: sha512-G1r3XaWFx8dG1fjDTjL0baWEuJK4GyNTWgHIiwOrcwGqrtv6FvXh95VfrV8rtbvYHVRH8GL7uUaSY3B3ufJiow==, tarball: file:projects/health-insights-clinicalmatching.tgz} + resolution: {integrity: sha512-QNp0IcY46zw6+LB5UIh6MjD6gs/oXIiwjNtXDmWmYxhssBvu3GayP4K6Ut3SFvTd7xn579W/3WeQZDbDBIUlpQ==, tarball: file:projects/health-insights-clinicalmatching.tgz} name: '@rush-temp/health-insights-clinicalmatching' version: 0.0.0 dependencies: @@ -21983,7 +21999,7 @@ packages: dev: false file:projects/health-insights-radiologyinsights.tgz: - resolution: {integrity: sha512-4YeJpaqgwEWqufa1UWVwYiRpuYJqfjtl97249uisM3EMwqtcEL/VEGUCiJhI8E2v+FadetiAUAtueSGeIyCdbA==, tarball: file:projects/health-insights-radiologyinsights.tgz} + resolution: {integrity: sha512-44JXAxsojj6fQ7ct3Sb+gX0xZfDYHMWZhDHpp8jz16OI1LV+kOFcqKuoTcNCxdP0Yl5r69V7sCA4I4bwyun4bg==, tarball: file:projects/health-insights-radiologyinsights.tgz} name: '@rush-temp/health-insights-radiologyinsights' version: 0.0.0 dependencies: @@ -22030,7 +22046,7 @@ packages: dev: false file:projects/identity-broker.tgz: - resolution: {integrity: sha512-ss649R/5rBoPFVFHrNY7emScp1WTGFMkH5d/5yv3Ed8FM8cPXzumQksLmpVURrWetavMkpshUCRI0Cvh6vBHzg==, tarball: file:projects/identity-broker.tgz} + resolution: {integrity: sha512-PFAk0qtrV4+Sx0qif29ZbSuTOJQNNOzs0TdBNMSawfI59DE804G/1J1RylXQ3Hm6t0TLNseOODREAN1M9P8fnQ==, tarball: file:projects/identity-broker.tgz} name: '@rush-temp/identity-broker' version: 0.0.0 dependencies: @@ -22058,7 +22074,7 @@ packages: dev: false file:projects/identity-cache-persistence.tgz: - resolution: {integrity: sha512-PzQ8h2R6clNkNYJBIGwa7eQ0f5GVbjvBPCp3X5xVqiEciCZQ0hEVSoWXHgue9HQjecAL6z0UTEvt8Rrw9DXA8w==, tarball: file:projects/identity-cache-persistence.tgz} + resolution: {integrity: sha512-W+kRvM/Cfk27Ca3xQIBmp69UTaGKrua5pWVHQkVc4xB1pnAenZpDhioVTkfWiVzJxHIaTiEFDGYNIfet2BiL7Q==, tarball: file:projects/identity-cache-persistence.tgz} name: '@rush-temp/identity-cache-persistence' version: 0.0.0 dependencies: @@ -22094,7 +22110,7 @@ packages: dev: false file:projects/identity-vscode.tgz: - resolution: {integrity: sha512-wFd6ItZFl4HOb8m8ZPfGSmm9HOJCMRE5xl3jD6x2AIayHZLnt2Lhssy12iHhgJRmeIM5OAIeCGy5aXfu0frp5A==, tarball: file:projects/identity-vscode.tgz} + resolution: {integrity: sha512-HNDxqfPbOgYboSoUcjAOtUZueIvtxWEfZT6r2YjOfo2GEBWzhWHz9qgBF337CYJkFGSHecaecyzu3bR4TutbPA==, tarball: file:projects/identity-vscode.tgz} name: '@rush-temp/identity-vscode' version: 0.0.0 dependencies: @@ -22129,7 +22145,7 @@ packages: dev: false file:projects/identity.tgz: - resolution: {integrity: sha512-U8XKWGJqdGHi6sSgZpYXjKSNJOt0O9ICO9SvUHL373m5mQWosGv/dWw6XKsq8MsCV9UWjtMi3xIsiQPVafzsGw==, tarball: file:projects/identity.tgz} + resolution: {integrity: sha512-vRMkof8kOthU6CPj1EHndq1ELLA0S7iT4M1d3sH7B+50Iy+ibcgwmu4k6VhI5ZmDvwCBFdKo7GxAjyF/6Y9mKQ==, tarball: file:projects/identity.tgz} name: '@rush-temp/identity' version: 0.0.0 dependencies: @@ -22185,7 +22201,7 @@ packages: dev: false file:projects/iot-device-update.tgz: - resolution: {integrity: sha512-zk2ybn46growB0yFOMyVGZQ9VxGCtcG6+uQlHcMuz77JbjC4I4uk3pwq1KtwcLLXMrvGhn0JvLbhCWfB4rWmkQ==, tarball: file:projects/iot-device-update.tgz} + resolution: {integrity: sha512-NIgNsJXGBuXSfW4WwjQotagmMMKnamlEOPUZYptkQeCRy/3rIqc81WWSXxRau3e3TEI6Xi/KjxguY/CTzeMCBw==, tarball: file:projects/iot-device-update.tgz} name: '@rush-temp/iot-device-update' version: 0.0.0 dependencies: @@ -22232,7 +22248,7 @@ packages: dev: false file:projects/iot-modelsrepository.tgz: - resolution: {integrity: sha512-t60+FhsdAnE22BzXtH/yp8RKsM/wRnCUM8WnlmCDeIpjzktE2sSs0nJgi8sW/6XXZqHdZMAVX6l7Co1Jx55FpA==, tarball: file:projects/iot-modelsrepository.tgz} + resolution: {integrity: sha512-BckB8vSfxgT61GGc6n0zF5nEzoE8UJeZMgvqqA/1JiniYwHn3ykExCp8kUvW64G8wpcqXcY+he+MrOoiITZlRQ==, tarball: file:projects/iot-modelsrepository.tgz} name: '@rush-temp/iot-modelsrepository' version: 0.0.0 dependencies: @@ -22276,7 +22292,7 @@ packages: dev: false file:projects/keyvault-admin.tgz: - resolution: {integrity: sha512-dsunWQMsLsdiguSu5LYZU7kZwiLAQ9e0yX0LYziOIseDXRYtDITozBl/EheUzQ4q4xfKUhD7imk+OIwkppoSmg==, tarball: file:projects/keyvault-admin.tgz} + resolution: {integrity: sha512-apDSonXIGR4V18FGs4+t4A5R3GScYn2hViO2mo1U5J2f4IOcXH8zPgggu5qcAU/M49MLBeEOBIw/iJchWm+zaA==, tarball: file:projects/keyvault-admin.tgz} name: '@rush-temp/keyvault-admin' version: 0.0.0 dependencies: @@ -22315,7 +22331,7 @@ packages: dev: false file:projects/keyvault-certificates.tgz: - resolution: {integrity: sha512-d+U46KzZabZyNkFyt72mx/vKmQTJMHnF5iaXIOMXXiEM+CYtjb2ozM6wWVN4cJOInz/zcIb7i2SiXoVI6rj14w==, tarball: file:projects/keyvault-certificates.tgz} + resolution: {integrity: sha512-kR/wShtnhfbQpdLgfQw2L4t6ezDCK2D9AbkAwo8G46aCQJ7UQF+2olw+92HoBz7UbHQ9jnN/iChzaoO4B/mBkA==, tarball: file:projects/keyvault-certificates.tgz} name: '@rush-temp/keyvault-certificates' version: 0.0.0 dependencies: @@ -22360,7 +22376,7 @@ packages: dev: false file:projects/keyvault-common.tgz: - resolution: {integrity: sha512-Ciy4ViV4tjk8xKOTPuF4cCbgdA9mmzn3NZSFUIXOwSikKzy7xGS0H8UYKLamMAry9/QnGl/tlvXzVJPBRuH21Q==, tarball: file:projects/keyvault-common.tgz} + resolution: {integrity: sha512-FzBLdTUe4haDqY+etOyz3Yz/NiwDsAiX9yii4t9Pw9gRWFpPnY0GpMCoz21d+iCo7isBWSz2+cECmPvGjwqP4Q==, tarball: file:projects/keyvault-common.tgz} name: '@rush-temp/keyvault-common' version: 0.0.0 dependencies: @@ -22403,7 +22419,7 @@ packages: dev: false file:projects/keyvault-keys.tgz: - resolution: {integrity: sha512-VetOwAKfNBnTHJcgw+wKZMS01iNqsw+ft2gigIfPKqwGFeqfYJVKvB6DgQHYBR31WNEUhG5Vj83m5yiLtr3kJg==, tarball: file:projects/keyvault-keys.tgz} + resolution: {integrity: sha512-pCkhdlB+/4VM66NrcwbCZexCAiXOSeDVeu+rGvrSIbXBjsQFp3N0GeKHHsPtj4CNMqdJDenIbtC93xT5nYWCFQ==, tarball: file:projects/keyvault-keys.tgz} name: '@rush-temp/keyvault-keys' version: 0.0.0 dependencies: @@ -22449,7 +22465,7 @@ packages: dev: false file:projects/keyvault-secrets.tgz: - resolution: {integrity: sha512-xmeGzSbTsxLCnWVoHNrC4ZKtWauFI5YqrEV6yqXsMEOHr7EY7i3dOsfQLQuPQqt3sbRwlCd+eyTzhJ5bfISyYA==, tarball: file:projects/keyvault-secrets.tgz} + resolution: {integrity: sha512-k905gOIrYFWE/UBqq+Tj5Ujcfhwc/E+FhUmM3jBMYm/45yD5bJdRJf8gvhKHCn6TquYTCvJXRfN0PzcXC1mxjw==, tarball: file:projects/keyvault-secrets.tgz} name: '@rush-temp/keyvault-secrets' version: 0.0.0 dependencies: @@ -22492,7 +22508,7 @@ packages: dev: false file:projects/load-testing.tgz: - resolution: {integrity: sha512-UVEdI4STub3eQDH51YsW5HxzBZp/YB+ovlVwawirNDIn2L6JpIVfjrlsjphxnKSM9APAfpGKpvcu7C18PdQzQg==, tarball: file:projects/load-testing.tgz} + resolution: {integrity: sha512-2jBNN0e/ojZ4JuwLmwda6pyV37Pc3kKeYaqe6wnYmk6uyLypJq/6o2p1EKlOSB/dN4I5A8CTh8ehsdnb+7OOAg==, tarball: file:projects/load-testing.tgz} name: '@rush-temp/load-testing' version: 0.0.0 dependencies: @@ -22540,7 +22556,7 @@ packages: dev: false file:projects/logger.tgz: - resolution: {integrity: sha512-8PWl/8/78SftC/QDnuBQdu/H2CZrY5i/4vF2QTNqGz6vPAvckpE7HSEgKEy2zb8yBizQTI8So0xdJi198CEeUQ==, tarball: file:projects/logger.tgz} + resolution: {integrity: sha512-9Fy44VVr7h0hj9E1JnUJiJcohLZNyBM16mlo9/7nl8k5oRyuxY4IQZ+3/kIdLGSxzccLcuuFackQlJMeL27s+g==, tarball: file:projects/logger.tgz} name: '@rush-temp/logger' version: 0.0.0 dependencies: @@ -22576,7 +22592,7 @@ packages: dev: false file:projects/maps-common.tgz: - resolution: {integrity: sha512-Scmb3fdFE7LS6CWNHJJBhihI+8U9v1K6eM/YyqLNgRG3HCKdv5mGHiGuAimXP4phBtlNyR0yJuijZQzM1pWNTA==, tarball: file:projects/maps-common.tgz} + resolution: {integrity: sha512-EV966yIMO5f7uK/9KkDxD6VAmE5LNw7Lm1OOc73c1Mch5zPDgjeMAMtiOe1yEuVW6PaQb/Bu9LVLg5w9DiFgDQ==, tarball: file:projects/maps-common.tgz} name: '@rush-temp/maps-common' version: 0.0.0 dependencies: @@ -22594,7 +22610,7 @@ packages: dev: false file:projects/maps-geolocation.tgz: - resolution: {integrity: sha512-gTtxwimbxkskwgPt9cKiYiy3iZl+RRglzPwid6UeBCxz7fVVWHRj2p1bnZ+vX/QtAbRUkb4cqXFjOpimRVGPzw==, tarball: file:projects/maps-geolocation.tgz} + resolution: {integrity: sha512-B32BArCBNnzAVbittEOG3gCu/Sa/lrETT49YR674Ak2amg1B0PeXHhRIOvx7WdcPdVfWLzPyERFHwaBUrCxxiA==, tarball: file:projects/maps-geolocation.tgz} name: '@rush-temp/maps-geolocation' version: 0.0.0 dependencies: @@ -22640,7 +22656,7 @@ packages: dev: false file:projects/maps-render.tgz: - resolution: {integrity: sha512-TiH597tRmg6pScwBjUdnDoGftilr1SyHJuFGgpZs2l56yVDY6Jb/SjegtKV6cH84iSGSJSq9e999JJ5NYzr0sQ==, tarball: file:projects/maps-render.tgz} + resolution: {integrity: sha512-mxIGWKhN6Wd9Vse/Cw1czC0pd0AELj30/E2Y3KCQz2sYv1qjLNUkhVV3AfN8kAjdbTKgPlLu3K4BCWVS4RfGvQ==, tarball: file:projects/maps-render.tgz} name: '@rush-temp/maps-render' version: 0.0.0 dependencies: @@ -22686,7 +22702,7 @@ packages: dev: false file:projects/maps-route.tgz: - resolution: {integrity: sha512-W5gYVlNKM5TluV8iP+uE+/dBJEGYD2thLp5f5UPL/WK15hmPWlljOj6I0MP52/8t9noWXQWl5Apx+5DYH/49Uw==, tarball: file:projects/maps-route.tgz} + resolution: {integrity: sha512-BLcJ2RFitpTOSAlafh07/0secT/Iwj3bBxuLTEeouvYQS4C3hTlrUCwYcglPI5aglo6du82YWKM6Ph1Bb5wncQ==, tarball: file:projects/maps-route.tgz} name: '@rush-temp/maps-route' version: 0.0.0 dependencies: @@ -22733,7 +22749,7 @@ packages: dev: false file:projects/maps-search.tgz: - resolution: {integrity: sha512-qc4dU/o9vIowyU7WlvnEhwr2+ElkexTxWWwZpRVE8BS5ft3mwMkivWp2yNJ9hGLawzljvtsKJrgBp8TJ0/3mlQ==, tarball: file:projects/maps-search.tgz} + resolution: {integrity: sha512-VpxWxc7rI52RgpBxO83u2jxBs2cBrwSe1NMlXNv6BROPLMkT9tpyw72A0mAoa4TKbSucxZ+MjD3x8zmif3RK3Q==, tarball: file:projects/maps-search.tgz} name: '@rush-temp/maps-search' version: 0.0.0 dependencies: @@ -22780,7 +22796,7 @@ packages: dev: false file:projects/mixed-reality-authentication.tgz: - resolution: {integrity: sha512-adXYa6cLCcF45ztJ7aE2CgyUpR5mEQzxnWxqvkoEmnE5yRMx7G6371i0SFmOXTZMYEjiSnUbaG9v4TwpOgkK6A==, tarball: file:projects/mixed-reality-authentication.tgz} + resolution: {integrity: sha512-2lGfF6hN64COe2qoohcBPdnw9zFX8JarL4VqEjSz+aClIT0sCt1XW9+u5HUDb2BrLe2uBJZtHFQKy02CZH8yHw==, tarball: file:projects/mixed-reality-authentication.tgz} name: '@rush-temp/mixed-reality-authentication' version: 0.0.0 dependencies: @@ -22823,7 +22839,7 @@ packages: dev: false file:projects/mixed-reality-remote-rendering.tgz: - resolution: {integrity: sha512-PWWJq0EsC2ofw5kTftrGmXNxTr5vymKgYrgbdNXMIrImEpvq5reH799Twww6Yoot6OC4XyN2jjnvJHZquLjtCA==, tarball: file:projects/mixed-reality-remote-rendering.tgz} + resolution: {integrity: sha512-OSPAcLNxfo7AWdAlKcLv2CgIRuxkuwzJM4bogvZGk9j334+iw7FYY52wcuUg3X7LceW34pi+RQUGy86MRDy9Mg==, tarball: file:projects/mixed-reality-remote-rendering.tgz} name: '@rush-temp/mixed-reality-remote-rendering' version: 0.0.0 dependencies: @@ -22870,7 +22886,7 @@ packages: dev: false file:projects/mock-hub.tgz: - resolution: {integrity: sha512-8Ciyzim9dMZzxB/kEQ69nxF+3FLoB5jy/zB7XAyBZgbVb/S20r1fekY+t+u3AQWPCGxDyIT/61zaVbFWIcz+VA==, tarball: file:projects/mock-hub.tgz} + resolution: {integrity: sha512-qND+nxzsNNqvvROhaZaEgeTgVfCMTpc7utFJj1YO6epNZlV2zBVXtjLUpaF8kC/k82EejwEuC8jDT5y+q+2gEA==, tarball: file:projects/mock-hub.tgz} name: '@rush-temp/mock-hub' version: 0.0.0 dependencies: @@ -22904,7 +22920,7 @@ packages: dev: false file:projects/monitor-ingestion.tgz: - resolution: {integrity: sha512-2TuFFxs/9AvRHA/BhWDwrODaVrHXR2FGH2sGeaw4ZCP9yhbdvtGfZiJvRHD533laO4yr6fQBLz0/OK5wqYd9qg==, tarball: file:projects/monitor-ingestion.tgz} + resolution: {integrity: sha512-FLWDgJiVixkS7DwF9IeUeKDIpls7LeNletvRwKguOw688OWY9vqN/xxtsC6RnrjX4+P3YLEpNlNyugjSLAsEGQ==, tarball: file:projects/monitor-ingestion.tgz} name: '@rush-temp/monitor-ingestion' version: 0.0.0 dependencies: @@ -22952,7 +22968,7 @@ packages: dev: false file:projects/monitor-opentelemetry-exporter.tgz: - resolution: {integrity: sha512-lF4HckcGeFQz1QyZ2X1P2QXMAyrAL1wK+O73PWrqipkdGRQOvxEei03pBV2RQ6uQtMp0VuNruFB2hi1SRAbxUg==, tarball: file:projects/monitor-opentelemetry-exporter.tgz} + resolution: {integrity: sha512-aMvFIVpBs0KJZonV1omJln3lR47yFT/PRhbT8sVARBMoN6onDj5PcN5JfL+p+ZFKEaYcS4rz0GohigC5AZe4ug==, tarball: file:projects/monitor-opentelemetry-exporter.tgz} name: '@rush-temp/monitor-opentelemetry-exporter' version: 0.0.0 dependencies: @@ -22986,7 +23002,7 @@ packages: dev: false file:projects/monitor-opentelemetry.tgz: - resolution: {integrity: sha512-MzAIwYUUOl3Vc3PJdFhc1S9RP1lVZgtWV5gPkVTMuFhg3PZLufzqSsyQUCa35EP/OBYZqZSMi+urDyUXrQrnfA==, tarball: file:projects/monitor-opentelemetry.tgz} + resolution: {integrity: sha512-thwsoEaOyjBXBsnArTgvp+jJD5RGkA60bQxm9M5FINEikCj1ExvOfKuz92mlczAz9ucFDoUtoqlrRRRsRykkkg==, tarball: file:projects/monitor-opentelemetry.tgz} name: '@rush-temp/monitor-opentelemetry' version: 0.0.0 dependencies: @@ -23034,7 +23050,7 @@ packages: dev: false file:projects/monitor-query.tgz: - resolution: {integrity: sha512-V05Na56q27tjE4HB650lJSCpzKfjx3uAPGTb2UR9MwDnblVKaZvqkqTG7WxYiyoSOeLNIm9WIIRFjLYIPuZuLg==, tarball: file:projects/monitor-query.tgz} + resolution: {integrity: sha512-ihLsubKVYU9jaXZo1mmKS5vpC+COwujWvF+iXDj85MmJFDsFzZ+XdoQxqqCFIToFJdjJr7P34Bx6vesPFMOzJw==, tarball: file:projects/monitor-query.tgz} name: '@rush-temp/monitor-query' version: 0.0.0 dependencies: @@ -23078,7 +23094,7 @@ packages: dev: false file:projects/notification-hubs.tgz: - resolution: {integrity: sha512-GlP+C+qTYDlit8le6xt9z+jZBdE6DX7Fkpve6exIOCCJbt/46H+vVaH6rme3Kndgs1tN0k2bJuAg27WzyvI3TA==, tarball: file:projects/notification-hubs.tgz} + resolution: {integrity: sha512-G07NVQ2fHyW8BGfbTUsZyUq/PrE3XnPnbIpsqBvxKjQSzDyE3AD34qTxumMOSMWa4b64eN4xATzMWMDMH6Rquw==, tarball: file:projects/notification-hubs.tgz} name: '@rush-temp/notification-hubs' version: 0.0.0 dependencies: @@ -23115,7 +23131,7 @@ packages: dev: false file:projects/openai.tgz: - resolution: {integrity: sha512-H48T2Roeqsl/F7HvAZqr8AmIkBG1jazlU6i9rSC+7ymiFMI+N8tNCJF2HMYo+ZhsDbn3vGicriy6BAG6Fzl3jw==, tarball: file:projects/openai.tgz} + resolution: {integrity: sha512-1NZPBco5pUUtGn4hbYETrn7d1IAe1q2HZ7Fg0UdkliV2/7xjt58TfvC2bf5q7MjExdQveNt2uXZmt2lw6TuJ0A==, tarball: file:projects/openai.tgz} name: '@rush-temp/openai' version: 0.0.0 dependencies: @@ -23157,7 +23173,7 @@ packages: dev: false file:projects/opentelemetry-instrumentation-azure-sdk.tgz: - resolution: {integrity: sha512-oxiwObvPjqIopSkQAIu0tV9pGGn/wVKeh09VnP8IOVnyobPxU8ywRACBixNofoiBctZqcNmLlQ4fGHwTLAe0Tg==, tarball: file:projects/opentelemetry-instrumentation-azure-sdk.tgz} + resolution: {integrity: sha512-bNg2Of+sm8+U1hIvc+8hWiR3+GWLnx5OcGw6QzzGEqKsKAJ51r478wpaexNQcCDShoZHfxmeBMxNeZccs/PZPw==, tarball: file:projects/opentelemetry-instrumentation-azure-sdk.tgz} name: '@rush-temp/opentelemetry-instrumentation-azure-sdk' version: 0.0.0 dependencies: @@ -23201,7 +23217,7 @@ packages: dev: false file:projects/perf-ai-form-recognizer.tgz: - resolution: {integrity: sha512-zWjC3E9n3/BTHJLPDsHAguRP9k5dewi5WwvmFbqk5QC2qiCl47kiB6Uxy7MOa/3yLdyEYJ8ebliKiVimVBKF0w==, tarball: file:projects/perf-ai-form-recognizer.tgz} + resolution: {integrity: sha512-POWpOoVpfQdjEWbBSiHCj+DvlYTRfyzU0XtydXNXGs+bM0n+BNUTuoh7n/tk1ZJKa2cr8c6NZnESJpkB5tDb3Q==, tarball: file:projects/perf-ai-form-recognizer.tgz} name: '@rush-temp/perf-ai-form-recognizer' version: 0.0.0 dependencies: @@ -23221,7 +23237,7 @@ packages: dev: false file:projects/perf-ai-language-text.tgz: - resolution: {integrity: sha512-9+Qg0q6bwD14voj/cTR+VS5YA3nMNjsXnyJk6jNMVHj4zn6z7kmfXe3mamYRYnPy3dIuJPhSK+/7fNHcM8xqkA==, tarball: file:projects/perf-ai-language-text.tgz} + resolution: {integrity: sha512-5/7jXL83XnX5OXadOHW4gTycoTsLDth3As/KDepCiJ8HsZBR32xLVwtVkE5/ukB0zOlKW5f/2OE24ctUhbdS5g==, tarball: file:projects/perf-ai-language-text.tgz} name: '@rush-temp/perf-ai-language-text' version: 0.0.0 dependencies: @@ -23241,7 +23257,7 @@ packages: dev: false file:projects/perf-ai-metrics-advisor.tgz: - resolution: {integrity: sha512-0NbwHsDgSgIPwEmyJW7jh1Ozwq3u7DWNfvYFERHUcMcGmQP+7MLw6Kcox7N4si/dLmeHri2AwnWD9+3GbWSY8Q==, tarball: file:projects/perf-ai-metrics-advisor.tgz} + resolution: {integrity: sha512-td1pfbo0dFobWlifHe8T3e04KBYDiXImEtfD0rInUstpoVyXCksg7dzbFLjBltjblJ1i/r97ID+3bvaJPWFmiQ==, tarball: file:projects/perf-ai-metrics-advisor.tgz} name: '@rush-temp/perf-ai-metrics-advisor' version: 0.0.0 dependencies: @@ -23260,7 +23276,7 @@ packages: dev: false file:projects/perf-ai-text-analytics.tgz: - resolution: {integrity: sha512-oWOh5+ltQ3/kxeM+enlm/H5q1rKoGFOesYTjjwIqLxHK4Jygugaf8u7vBcOiym4DHF4/FdMJt/kgDjjuVeubgQ==, tarball: file:projects/perf-ai-text-analytics.tgz} + resolution: {integrity: sha512-kmAYfpIiEjg7ILSlzcXGWpbbYXUt2TjiqPARqaTqzNW7hHf+0rHFnCduyQc6PPtldN8fr1NTuW1tUiDCV54b7A==, tarball: file:projects/perf-ai-text-analytics.tgz} name: '@rush-temp/perf-ai-text-analytics' version: 0.0.0 dependencies: @@ -23280,7 +23296,7 @@ packages: dev: false file:projects/perf-app-configuration.tgz: - resolution: {integrity: sha512-+vUzrvJBPvpryLciRn92TjLWV/6U2nA1YGTIlr44AJdKvU+NPAWzBygZqJNHipRTHMBnq2kmMqUmENQhM84SPg==, tarball: file:projects/perf-app-configuration.tgz} + resolution: {integrity: sha512-eEVIqKSFpKM8WmN1Nd9tBdDsl3lh/SXig304S9gF7hwu9aOC5I0pmuxR+QK09rDUQCkhGcUvojePzr90YvtEhw==, tarball: file:projects/perf-app-configuration.tgz} name: '@rush-temp/perf-app-configuration' version: 0.0.0 dependencies: @@ -23300,7 +23316,7 @@ packages: dev: false file:projects/perf-container-registry.tgz: - resolution: {integrity: sha512-hNlkZJRUghr4B51vL1bpbYB2FJfbWRBgxG1k+NeKRJY0tLXTjWUo54su7RGCjU4sHsK5poo+k/jaT6rKlD8E+A==, tarball: file:projects/perf-container-registry.tgz} + resolution: {integrity: sha512-/4KU5u3ORhJT+YmLWoWK25Ym8hMrTQtGrJLi/lTgZALWYaq29RqBzT/ElXRrfhpQSqtlpL7nU6frr0mJEH0Hhw==, tarball: file:projects/perf-container-registry.tgz} name: '@rush-temp/perf-container-registry' version: 0.0.0 dependencies: @@ -23319,7 +23335,7 @@ packages: dev: false file:projects/perf-core-rest-pipeline.tgz: - resolution: {integrity: sha512-VDg1NbVAHjk0lE1CqHRoA5yLGd+8qERcyitOWHF2DF5A+7xMoRHKwJmVAgWhqc1Q3WP83D2medVAVa8ZSMv+HA==, tarball: file:projects/perf-core-rest-pipeline.tgz} + resolution: {integrity: sha512-oh4S+j2b8xUVN8+/+AeKCD1P10gPLP5gk1KqTE9dVGANcUoMMJGZoD75n3dtLqkxIAqljhCOCuosl+CUXGof1A==, tarball: file:projects/perf-core-rest-pipeline.tgz} name: '@rush-temp/perf-core-rest-pipeline' version: 0.0.0 dependencies: @@ -23342,7 +23358,7 @@ packages: dev: false file:projects/perf-data-tables.tgz: - resolution: {integrity: sha512-Pu+EV+szHHMMWrxgY9LhxOPYiPVHnTZJEKBGWXGtjP7BxfzzffBJ0tpumSjuAEZUv7TLND6iI6j6qxYoJ2kw7A==, tarball: file:projects/perf-data-tables.tgz} + resolution: {integrity: sha512-oh3fFCWwG6EPkoIU5tvolvN21oD4EKzC97YNDXoyyzORBEKegYXELTKXz7Kf1eYbXf30fOZWVQBAtqYlm6sOng==, tarball: file:projects/perf-data-tables.tgz} name: '@rush-temp/perf-data-tables' version: 0.0.0 dependencies: @@ -23361,7 +23377,7 @@ packages: dev: false file:projects/perf-event-hubs.tgz: - resolution: {integrity: sha512-DY/NSSHfv9Ir0PxX04Vz4XTzyTRtxsTswr347LvroSO94HmCSJAsEQhuWbqXi5BlGVPq+y3orsjm7x8Ufycp1w==, tarball: file:projects/perf-event-hubs.tgz} + resolution: {integrity: sha512-WNUyx88CRHgtyRV9gumkfvO//QpFFiaIQXifUdPQanrtcPq/9lrLdijrBGpl39ADnOMCSGeuMFptl6xEgmq6LQ==, tarball: file:projects/perf-event-hubs.tgz} name: '@rush-temp/perf-event-hubs' version: 0.0.0 dependencies: @@ -23385,7 +23401,7 @@ packages: dev: false file:projects/perf-eventgrid.tgz: - resolution: {integrity: sha512-VzPq6ggmF7DYDgJpOYRGKKbiQHqBucuT9sG++q41zLl4pjmXBVlzgsGPNmuN+uIFm4uqF9tz7Ka0WtbRYbigSw==, tarball: file:projects/perf-eventgrid.tgz} + resolution: {integrity: sha512-qKB5+KeoStnNZC/FkG5g9l26AEuxs7zmgqAacC9IZotoy2GE9ZG7q6m2WsMKLZOQt7plB5KayvQ/MdpDjv51cA==, tarball: file:projects/perf-eventgrid.tgz} name: '@rush-temp/perf-eventgrid' version: 0.0.0 dependencies: @@ -23404,7 +23420,7 @@ packages: dev: false file:projects/perf-identity.tgz: - resolution: {integrity: sha512-+To2WBlWiqH5YBWga5WPDYNm3RoQ+MM7B0fDjVvbx8ac5WadMWt1UDWUQ4F8Jp9SyBxvGreVwxGo5ZOyqKZjZA==, tarball: file:projects/perf-identity.tgz} + resolution: {integrity: sha512-XzYh+7p+G/O0SMjw2P4RWD61k7E1aNPnKa3iVWehQb1AjpqrSZMQjdUSS+YL4IzFBHcxpV6y2Pt8559jxYj23A==, tarball: file:projects/perf-identity.tgz} name: '@rush-temp/perf-identity' version: 0.0.0 dependencies: @@ -23425,7 +23441,7 @@ packages: dev: false file:projects/perf-keyvault-certificates.tgz: - resolution: {integrity: sha512-UFuV4ixw0xuW1V0YywrMu5RLiK+USg8IATr/PQiufLhhKjS2ZIJMcdZftsg8jTDqVZU6S9SVJXTRli9/uf8H3g==, tarball: file:projects/perf-keyvault-certificates.tgz} + resolution: {integrity: sha512-g5OCl4cgItrWrxSaJ0W4MJelVE4bELSwc7f9ePWdgpl6RiiG+ibfQ1HBL6h2RBI90OfagfLVjbpOskZ07OXApQ==, tarball: file:projects/perf-keyvault-certificates.tgz} name: '@rush-temp/perf-keyvault-certificates' version: 0.0.0 dependencies: @@ -23447,7 +23463,7 @@ packages: dev: false file:projects/perf-keyvault-keys.tgz: - resolution: {integrity: sha512-cmtOJOfOdKnl1efPXMdvan4iRYgIOnyEjQ5aelZ11PBqWjXZrvFLEg6XMEyrNYPBuoftDmRa3f6l+GKOVFBwtA==, tarball: file:projects/perf-keyvault-keys.tgz} + resolution: {integrity: sha512-mx8RrUBBQ6HcsZ9p5BRoqEQnpCQZSFP/rVDd6kHfDuRwCm5CQwzTFKNwMXklZ9CyA6tzT+zoKYWvm5CBQgalkw==, tarball: file:projects/perf-keyvault-keys.tgz} name: '@rush-temp/perf-keyvault-keys' version: 0.0.0 dependencies: @@ -23469,7 +23485,7 @@ packages: dev: false file:projects/perf-keyvault-secrets.tgz: - resolution: {integrity: sha512-h/16Rgo13yHiyDVs/fqBBGr+X3mWbEmNtbS43Elh4ybbO1yRmpSXVV/eCTE7QlP9q8ApIdmvlIvFX0VPodM0IQ==, tarball: file:projects/perf-keyvault-secrets.tgz} + resolution: {integrity: sha512-jLWlsayX1Dpm+pI5o2MwFnHqkk94+0VpaznqL+TYvLXxIZJaOH+ihVglHxs1F9eeSAxz8vKZ/3x1B2A1JEp+9Q==, tarball: file:projects/perf-keyvault-secrets.tgz} name: '@rush-temp/perf-keyvault-secrets' version: 0.0.0 dependencies: @@ -23491,7 +23507,7 @@ packages: dev: false file:projects/perf-monitor-ingestion.tgz: - resolution: {integrity: sha512-1/g4EquE593/00Rmstrv/XOCZ9DCBb1qIoxFgYitoIkZzG74Q4ZL0MsRhyBM5w7IiOvqKnC0BuqHSzdvS54SVg==, tarball: file:projects/perf-monitor-ingestion.tgz} + resolution: {integrity: sha512-Jsd9dNsPBlbDq2G2sBTVgtvmu4dAS2q2tp7vQwbxJyuMg7x4qjTi1QYGzXgP5gCdujGc5PR1mVEeA+hI+9t7sw==, tarball: file:projects/perf-monitor-ingestion.tgz} name: '@rush-temp/perf-monitor-ingestion' version: 0.0.0 dependencies: @@ -23511,7 +23527,7 @@ packages: dev: false file:projects/perf-monitor-opentelemetry.tgz: - resolution: {integrity: sha512-PcrmsLNkWmiiJvrCAhOEo3VKmP72as+iHPn8qS61NKwA7m4xGW/gwFYi+YtNk4ZesV2PdMczng1fNE3OViGQTA==, tarball: file:projects/perf-monitor-opentelemetry.tgz} + resolution: {integrity: sha512-q2N9qSHI4hcuh4nZA37gc1hs3zPj5tiVIEmce6b53y6kaqiXYvCWIHXnZU5WovIFuXshvyznZlMd3EEjNUjAPA==, tarball: file:projects/perf-monitor-opentelemetry.tgz} name: '@rush-temp/perf-monitor-opentelemetry' version: 0.0.0 dependencies: @@ -23530,7 +23546,7 @@ packages: dev: false file:projects/perf-monitor-query.tgz: - resolution: {integrity: sha512-ymGE4xo6QUG2EAFvGT+15o3ML/b6F7gc1os7PCDcV7mTzs8ofUuDjX4LN06TGR7m8ZalbG5/9TInT9UtjpKvbg==, tarball: file:projects/perf-monitor-query.tgz} + resolution: {integrity: sha512-Bi1scWVWErZXsjaY3pFVoTLMmEvrcl4ItW+jp+KrrxshKl3gHkOlvpoE6wexaTGHs7TsUaxVox+cbCEzOzdojw==, tarball: file:projects/perf-monitor-query.tgz} name: '@rush-temp/perf-monitor-query' version: 0.0.0 dependencies: @@ -23550,7 +23566,7 @@ packages: dev: false file:projects/perf-schema-registry-avro.tgz: - resolution: {integrity: sha512-W8nSJUFTyR0HfwtaxpLZvwOrEF+R0I+OhR3Qc3FT4d/8kKtYglH4HeDfFseY0w4GYO8zKX5cWyfo+LtUxVzmbg==, tarball: file:projects/perf-schema-registry-avro.tgz} + resolution: {integrity: sha512-YI5gF9T+LTgZQJM47Vr8gIm5ylgI7yWVciw1ArTcoqwR69VBxOR+0xCTc5RhiYsupxcFURor4IiKAl6M2qoM5Q==, tarball: file:projects/perf-schema-registry-avro.tgz} name: '@rush-temp/perf-schema-registry-avro' version: 0.0.0 dependencies: @@ -23570,7 +23586,7 @@ packages: dev: false file:projects/perf-search-documents.tgz: - resolution: {integrity: sha512-IJpTlde5FFe2/0OvnLvypZjEU/weT1VYRkjJfowN6le2AfftOtwCTpE7GgaI78s6ooqfy+/PqEIsWhwkGBfNcg==, tarball: file:projects/perf-search-documents.tgz} + resolution: {integrity: sha512-wz98B8+Xvwn9hp568Z8ZF+NYPVwrUeVfeW1d2OnnsvzRRsFqeDvbbhVG+3o+zikCfqA8n4wbIu3DnE/R7k8O8g==, tarball: file:projects/perf-search-documents.tgz} name: '@rush-temp/perf-search-documents' version: 0.0.0 dependencies: @@ -23591,7 +23607,7 @@ packages: dev: false file:projects/perf-service-bus.tgz: - resolution: {integrity: sha512-9aYinfYRtaUNNsiVYt68IPuS7HuY5pIo/QO2lMW5eDN6lGxBNuasukTvdKXhFRQlz1Lsr/jNdRhT0IgnErP5jQ==, tarball: file:projects/perf-service-bus.tgz} + resolution: {integrity: sha512-yXm3d1qM7wa2dVvai7LYcmaNIpSsnZDjnk5JWZkIZWc8yrlWzf+lDNuMU7MuF0jwmhkRUmIpwLRpREtv8gczFw==, tarball: file:projects/perf-service-bus.tgz} name: '@rush-temp/perf-service-bus' version: 0.0.0 dependencies: @@ -23612,7 +23628,7 @@ packages: dev: false file:projects/perf-storage-blob.tgz: - resolution: {integrity: sha512-fiUxtFT3tPJ1+Xtm7RHO2C0rwCRuwnNZR/RADUA2pJocwIO9YycrPXQntcdUW42qVQVFoahHZTXljDeamql8Tg==, tarball: file:projects/perf-storage-blob.tgz} + resolution: {integrity: sha512-XP4ocqPxj5wgyhpDZpi0RIHlNPxXPuPi84tXdJvy16KjQfdfUMeHRvrhdD0saj5fI/+k8CxdtVSO1TfVyHtAwg==, tarball: file:projects/perf-storage-blob.tgz} name: '@rush-temp/perf-storage-blob' version: 0.0.0 dependencies: @@ -23632,7 +23648,7 @@ packages: dev: false file:projects/perf-storage-file-datalake.tgz: - resolution: {integrity: sha512-PhJr5ZNrDBCxB6A7AKiQ2ZxsDrYxOnEiWs5Mgg+sdUsCy5VxXB2UOaHcuVPviBc+HALhcgOlem2ZalTgPMKDuA==, tarball: file:projects/perf-storage-file-datalake.tgz} + resolution: {integrity: sha512-qRtfxWRFCwWD0pzaQdSPmrrxMtN0GRVAIETHcTAjEtsg3y2R0RtEZ/unElbYHWvw5RRmoISXF1JXDbprKJTO2w==, tarball: file:projects/perf-storage-file-datalake.tgz} name: '@rush-temp/perf-storage-file-datalake' version: 0.0.0 dependencies: @@ -23652,7 +23668,7 @@ packages: dev: false file:projects/perf-storage-file-share.tgz: - resolution: {integrity: sha512-6naxVn/cB3qW8boXhk/zsGsWB+gsUQQByhOcwfkPRhSdGDHIkkQ/SdBNKeNeifR8oMdjt1MtDQKQVr7V840IEQ==, tarball: file:projects/perf-storage-file-share.tgz} + resolution: {integrity: sha512-JzcotzFitxPWurPENl0VPyx1k9nJi3/nU7y9ywg6ujO5qGNPKYjvMeiA5BNt/YcKdurIWnNCXsXJCHQAWhgtrQ==, tarball: file:projects/perf-storage-file-share.tgz} name: '@rush-temp/perf-storage-file-share' version: 0.0.0 dependencies: @@ -23672,7 +23688,7 @@ packages: dev: false file:projects/perf-template.tgz: - resolution: {integrity: sha512-KBmHqs5rCwamvjy5avBOkmDoyy49CX3o9VfdW6UsakxMEMWSRr7+WmdgRBhN2bqpJcs0pFfvRqK8acDljHtlCg==, tarball: file:projects/perf-template.tgz} + resolution: {integrity: sha512-lK1FvvHtQaImUpzyGCrIR2aeQDBkxvzg5QFB3Tt4SDpQDAr7CQYWnHf1/0SAJT7NzQOzMy/Z9mSFoorLN1KTXg==, tarball: file:projects/perf-template.tgz} name: '@rush-temp/perf-template' version: 0.0.0 dependencies: @@ -23693,7 +23709,7 @@ packages: dev: false file:projects/purview-administration.tgz: - resolution: {integrity: sha512-RSJpHcbBm53FlgPtxxLd9xjZX44X0X10kEoya4Efa7cKA9m129ovLO03XnVSAzEv80VAuZL2xCwn7yHasCg7pg==, tarball: file:projects/purview-administration.tgz} + resolution: {integrity: sha512-/ofcTlQ3DUdVjAQNXADQp5Olr8AVFHH6avNuInXyN6UN+nv8Mr/oyYvJ/a9bmMbw+V2PwHZcUvOSkw/1yiOLcw==, tarball: file:projects/purview-administration.tgz} name: '@rush-temp/purview-administration' version: 0.0.0 dependencies: @@ -23737,7 +23753,7 @@ packages: dev: false file:projects/purview-catalog.tgz: - resolution: {integrity: sha512-ovkJVLgj0ZJJNINdkn9lPa87GR7yztShipZV3QD5FhvtY/GaxzVRSPkP6MIH/WN2zbzEYpVN+r/wl7FNXdD8Qw==, tarball: file:projects/purview-catalog.tgz} + resolution: {integrity: sha512-BzQH39jZqCdUDPKuloeaxdUYHgHg0Dy4TBc1YUt9KpBdKxiNaAYupB1T5CmLvqI8Ry5h6UpfyVkOZSzW4VJ9SQ==, tarball: file:projects/purview-catalog.tgz} name: '@rush-temp/purview-catalog' version: 0.0.0 dependencies: @@ -23782,7 +23798,7 @@ packages: dev: false file:projects/purview-datamap.tgz: - resolution: {integrity: sha512-9ita2YmoNvIfe6h/7yvt897vRwKsT4LDxpBH5c9zAOpJouPNsAhZWQ+VBnBNds8CgnM35vLKW4/ZdOv/tUjRrg==, tarball: file:projects/purview-datamap.tgz} + resolution: {integrity: sha512-W4wufES6gQ8aAIBSmdmXhr2+Mw+RScw4vv/f9WoNd30uU3FJyKBe0gujNcJEZLsOXQ/ob6u2k3wuVYZAo2WhPw==, tarball: file:projects/purview-datamap.tgz} name: '@rush-temp/purview-datamap' version: 0.0.0 dependencies: @@ -23827,7 +23843,7 @@ packages: dev: false file:projects/purview-scanning.tgz: - resolution: {integrity: sha512-NG0a0EFj+UYj8+8ysNxJ4wNo+d+kAqSw3iCouV9nascWUd9Ih+goKtd/xXD+5N2si3jrL203RTwpQMdBi7rLvw==, tarball: file:projects/purview-scanning.tgz} + resolution: {integrity: sha512-la1JpJqPRhD2tFr62OPIHDd3UG9+74a1GH5Acu6Y0ec1CZxw6aaCjSmg+Xnd9/11qxZNjvRD+IvPQXBAxSJHgw==, tarball: file:projects/purview-scanning.tgz} name: '@rush-temp/purview-scanning' version: 0.0.0 dependencies: @@ -23871,7 +23887,7 @@ packages: dev: false file:projects/purview-sharing.tgz: - resolution: {integrity: sha512-sq0hf2kHfmj8TB3AlOU28kDgkLYpSb9FcNhjFwLYwpx1dhkMqzdrUxNsp0Xw30KBrc6/5i8ioxkcByvgQtZpLg==, tarball: file:projects/purview-sharing.tgz} + resolution: {integrity: sha512-yupdEKrPU+CfTg0cYTYNyUJrrpXhb62GhO7YNr0cKlEVu2jFYTDvcq7/uyVTSeJbfrwHSXVFprXX8hcTwmDfcw==, tarball: file:projects/purview-sharing.tgz} name: '@rush-temp/purview-sharing' version: 0.0.0 dependencies: @@ -23918,7 +23934,7 @@ packages: dev: false file:projects/purview-workflow.tgz: - resolution: {integrity: sha512-TtPgVd0jncMynyYLz041QpSEn/Yt4wHaSwu9g/YcWu2ZxZI5ONcLPIfhREfF5cPU5uELyLeqTuMgD9aqxZjRpw==, tarball: file:projects/purview-workflow.tgz} + resolution: {integrity: sha512-yLuvkhDEC+Wim6OEctUa7HOhkfzg7vdmnPRUm74iGebhWM9dXCnaGz38EFcyQCiNMHNa2ccc5JqUZ2PutMvn2A==, tarball: file:projects/purview-workflow.tgz} name: '@rush-temp/purview-workflow' version: 0.0.0 dependencies: @@ -23963,7 +23979,7 @@ packages: dev: false file:projects/quantum-jobs.tgz: - resolution: {integrity: sha512-PXvyuV45a6cRQaaJEhACGVhTjUH8Ux66m/rN7tqbJHBjuZMBfaHh9Smu7qWlXiZtJKw8lgOsCVDH7ozhWRCy8w==, tarball: file:projects/quantum-jobs.tgz} + resolution: {integrity: sha512-hynsRkT7AewOzKH/2/bSTNQjrI9uCzbVO2lQL0+RXuZ7gx7tnlPwxiqK7cF4lCK/gVB/OGDoHM4xZa+D5z5/5A==, tarball: file:projects/quantum-jobs.tgz} name: '@rush-temp/quantum-jobs' version: 0.0.0 dependencies: @@ -24009,7 +24025,7 @@ packages: dev: false file:projects/schema-registry-avro.tgz: - resolution: {integrity: sha512-or0Anl9W9acTyeU/D9fhoGG9SmgN580YeiALqaz1ipRqxKCpRd5k4OxMJGAD16yZDKmNQrdGOJAb8Kr4r0ryGg==, tarball: file:projects/schema-registry-avro.tgz} + resolution: {integrity: sha512-aOuyogD9Sg+gRV1zU1StVI8UOhjMlITcP5JGyS1nA9nIjb89XmoPhVvOwaZmhIaZzl6HXWAu5STIcVW+MrVYXg==, tarball: file:projects/schema-registry-avro.tgz} name: '@rush-temp/schema-registry-avro' version: 0.0.0 dependencies: @@ -24062,7 +24078,7 @@ packages: dev: false file:projects/schema-registry-json.tgz: - resolution: {integrity: sha512-g4Hn5V9bTN2ZHCm4HrYFu4h9wbMJAh7TiFPY6aDiKtmHyco8a4SDjKY5abZhB6YipsQ4ucKGhUZjPbRl+o7YbA==, tarball: file:projects/schema-registry-json.tgz} + resolution: {integrity: sha512-Ceo41vIyXjwwMYxrAQULe4hYvRPkYRa/XtDLPlCGN0p8V2dvZok/jG1dnhbT4mS2SrJwL33ITnshqbhTK3Qm2w==, tarball: file:projects/schema-registry-json.tgz} name: '@rush-temp/schema-registry-json' version: 0.0.0 dependencies: @@ -24105,7 +24121,7 @@ packages: dev: false file:projects/schema-registry.tgz: - resolution: {integrity: sha512-XmJTse42Anbjn61axGhnFmOpx12CpgGUZRVwZaaBrtWQH9nSX3c8AZ8Wgq8njUc85FIlYvk6v1OmTapERBCdnQ==, tarball: file:projects/schema-registry.tgz} + resolution: {integrity: sha512-lTKvaSVAs+bx4vnHtG85rIZfyNjFfx2uvqwhNdw8SkWqgxQ7AyW53RtPklVwVhd3KCrwOk7HSKMvWLVFCISWZQ==, tarball: file:projects/schema-registry.tgz} name: '@rush-temp/schema-registry' version: 0.0.0 dependencies: @@ -24145,7 +24161,7 @@ packages: dev: false file:projects/search-documents.tgz: - resolution: {integrity: sha512-UtQzUbFJpxBbW2P5e8zRUmg3fP1mDW5w6IKNqtNtdnTppJBYWnEaNYjX/yQ7UEIo2CFFOIO4GcixqY566YmPtA==, tarball: file:projects/search-documents.tgz} + resolution: {integrity: sha512-TQPou1xuoYFGXUZYg+kgNvuBoQjULHSb9HelaZ7aOiyljlRGFCVfg37p9aqZWL2/1DZtKGkppFfdm30+AnZ7BQ==, tarball: file:projects/search-documents.tgz} name: '@rush-temp/search-documents' version: 0.0.0 dependencies: @@ -24192,7 +24208,7 @@ packages: dev: false file:projects/service-bus.tgz: - resolution: {integrity: sha512-hmveDLqeAShw1Udm/b/h/DYmE+vcSPSWncrNlPjOPO4q4srZRxGU3XWvQOKg1H5s14ilawLy4wDH4Pld344eew==, tarball: file:projects/service-bus.tgz} + resolution: {integrity: sha512-uw6aCWs1lbgkBKAJFs23wRXAUlDrFHlKM59+RUot9ZlB0JyhDTuNxlVTm83476h1kgUjpvq5ini1DtKREE3Jmg==, tarball: file:projects/service-bus.tgz} name: '@rush-temp/service-bus' version: 0.0.0 dependencies: @@ -24253,7 +24269,7 @@ packages: dev: false file:projects/storage-blob-changefeed.tgz: - resolution: {integrity: sha512-kvp3tm7eX+LwAT+R4rEpYGZH3rbzxu0P/v9XJ/tdapViq8GPBboy7Muv1sFtljdtCPgtMQ2M9sZ1ZkdgZ1wYOA==, tarball: file:projects/storage-blob-changefeed.tgz} + resolution: {integrity: sha512-yW/Tk+Qv/6aAtEt8eX+vSlTTSopgNe6yWWKhYumvBrECEAGOJoOtT4Xty444HcEnAFDhOWYrbYhy24HttYaSBQ==, tarball: file:projects/storage-blob-changefeed.tgz} name: '@rush-temp/storage-blob-changefeed' version: 0.0.0 dependencies: @@ -24303,7 +24319,7 @@ packages: dev: false file:projects/storage-blob.tgz: - resolution: {integrity: sha512-W6Wnl2NsKrAVhEEGt8tTmpDzJGJZSUrK2KsVhS6aWYT+lxpnHuu1E9uTIFSwRCjxkh9iPz+Zpb9RwFaDQ0fE3Q==, tarball: file:projects/storage-blob.tgz} + resolution: {integrity: sha512-ZlxD5NDsp4IGZLRyTslpm8XrDe8SqrBGzJ64xTPr6A0NAFLBf14aZeZA7yHRX0EjqED+byh3R3FDB3qb1OFIDw==, tarball: file:projects/storage-blob.tgz} name: '@rush-temp/storage-blob' version: 0.0.0 dependencies: @@ -24350,7 +24366,7 @@ packages: dev: false file:projects/storage-file-datalake.tgz: - resolution: {integrity: sha512-pVnKrkD3sFJC/8Mu3AFiHxo2xJle/XUqIimW8PVsitVDxaYwGIEsVJl9bmPfC3S4QNuHpzuc1QZg44bD/PjPlw==, tarball: file:projects/storage-file-datalake.tgz} + resolution: {integrity: sha512-Qs9GGAl1fj/tS3TV+pFtVTqZvHuSlckjuwsTUdMHx/qJJc/pOm9OFeeIeTgYOhBSkTfEbQRtQwlNNXlQq5oHKg==, tarball: file:projects/storage-file-datalake.tgz} name: '@rush-temp/storage-file-datalake' version: 0.0.0 dependencies: @@ -24400,7 +24416,7 @@ packages: dev: false file:projects/storage-file-share.tgz: - resolution: {integrity: sha512-bUAIAc44JfZQPjRKOuPF73s7KbX49hrpUIUnjcrET5DmwmE3NWamF7gSxScRdSDNZO3evaFfN15zSrrD78jLpA==, tarball: file:projects/storage-file-share.tgz} + resolution: {integrity: sha512-cwp1KHdbp6FJ13Cr7Wwfyw+nqa4igV7fMslulUMFZHDpqf7ZUigUbwjQW2vXawWy0azxX2U010e+oBj6ORW3OQ==, tarball: file:projects/storage-file-share.tgz} name: '@rush-temp/storage-file-share' version: 0.0.0 dependencies: @@ -24449,7 +24465,7 @@ packages: dev: false file:projects/storage-internal-avro.tgz: - resolution: {integrity: sha512-W7+byd4g972hMfjV7Tn5YLT1aQIMJS726jNjKze6CiYLJkiK0jcn+vK8CukYLm1ICM+zP6AfuSzAoQUtX5Lt9w==, tarball: file:projects/storage-internal-avro.tgz} + resolution: {integrity: sha512-TyD3UHGN3i8VzZcEjjEa9qbVyN/aN48JUAeJ+jk8S3FPAydT6i5m4nUtnb9QBgGxH7JSU89jbimi/LWtK+5FQw==, tarball: file:projects/storage-internal-avro.tgz} name: '@rush-temp/storage-internal-avro' version: 0.0.0 dependencies: @@ -24491,7 +24507,7 @@ packages: dev: false file:projects/storage-queue.tgz: - resolution: {integrity: sha512-yXyeua+HN4JCEnL+0KEQiz2mkcqUoAEmu8+r9niTSUBMJb5IZE1e2qsqBy1rU7OJv7Bt4tq3I04n5k54XH0IsQ==, tarball: file:projects/storage-queue.tgz} + resolution: {integrity: sha512-/KAjHlZZll32CgcBxCFKCughjkDhsj4a+XTzK7/jbrFyunE3mspoReOYtgMfWIv88FQBXFREQvU9ohioO8Ryyg==, tarball: file:projects/storage-queue.tgz} name: '@rush-temp/storage-queue' version: 0.0.0 dependencies: @@ -24537,7 +24553,7 @@ packages: dev: false file:projects/synapse-access-control-1.tgz: - resolution: {integrity: sha512-a/9dZpl4XgeJ+haQiZNpkZSYy9orW5z5bQB7Oyxydpc/U7TZljmv9uLIZOA8aQuUQVpDh4p8UBDbxmOg572mow==, tarball: file:projects/synapse-access-control-1.tgz} + resolution: {integrity: sha512-YF8ESmemr1ONKVGjHravsd0aF7i4JF+qc1M8VSW/1lfzEqws/zFR0miEwmUBKuuq3e+ZdfxRwjs55Nr1SE1cyg==, tarball: file:projects/synapse-access-control-1.tgz} name: '@rush-temp/synapse-access-control-1' version: 0.0.0 dependencies: @@ -24583,7 +24599,7 @@ packages: dev: false file:projects/synapse-access-control.tgz: - resolution: {integrity: sha512-xpKpKCs2aLWbl5fnHEdU+PFcMUKipbH+Wu+VZIfcNajLDCQYjxTekQs9DGFH+r1UTDgrpdudE2ixGOp5C69NEg==, tarball: file:projects/synapse-access-control.tgz} + resolution: {integrity: sha512-mOVshMTg1mw1kPHfUj4CuN2rRe7i1iyJ03tog9j4BUiXvNgvKuz6FmYKoz50PD+Vm1Y1kX4BhNSeIqFINU1ZUg==, tarball: file:projects/synapse-access-control.tgz} name: '@rush-temp/synapse-access-control' version: 0.0.0 dependencies: @@ -24632,7 +24648,7 @@ packages: dev: false file:projects/synapse-artifacts.tgz: - resolution: {integrity: sha512-BqyLvu/C6vnlOoL0p0uiVCPMiuZgqIQW75f2v4D+VXxEg8BUllx0d7tQUcP8BkzdYZZ5nAd9Y0e30qJW1WjnHw==, tarball: file:projects/synapse-artifacts.tgz} + resolution: {integrity: sha512-biKQiiUVwTmrhOl8eI8fn4dFKytg7k2xdFqPsyKT1L4XNoOSW2wmi5yOlIfhYd4gwpd8iuPcimnG9SsShQF25Q==, tarball: file:projects/synapse-artifacts.tgz} name: '@rush-temp/synapse-artifacts' version: 0.0.0 dependencies: @@ -24682,7 +24698,7 @@ packages: dev: false file:projects/synapse-managed-private-endpoints.tgz: - resolution: {integrity: sha512-0FONmRyT374Y0xbcOo1xHkLuIIBhouvH5Me2+ZNUOlgfwLqDqrp+F3XgFamLOF2oVsKcs+aN4+kd/bhsUWrPyA==, tarball: file:projects/synapse-managed-private-endpoints.tgz} + resolution: {integrity: sha512-1iRvwOJt5zFH9cFtaWGHntCTqqDjVD+fKM0Y39fW8aw9AMTEzkZxAmhiQKxsAubwcddWJgxqIkDn4b7jg1jmQQ==, tarball: file:projects/synapse-managed-private-endpoints.tgz} name: '@rush-temp/synapse-managed-private-endpoints' version: 0.0.0 dependencies: @@ -24725,7 +24741,7 @@ packages: dev: false file:projects/synapse-monitoring.tgz: - resolution: {integrity: sha512-g+ViDkGo+YoqD/9+6UekM5d/AUy9d03el1qY54IsvDxiEoSWt8eGm/eYLvNSEEO+L7SO0wWuSkcXMwZPzVUnJA==, tarball: file:projects/synapse-monitoring.tgz} + resolution: {integrity: sha512-P5Fd8EPEmT9YnQzs/cAm0P6tCrCLRmCe813RAomQqwS+VEh3qSfhkcwFUU0ZZ41aPTDM0pWi1QA+UI0XEYSljw==, tarball: file:projects/synapse-monitoring.tgz} name: '@rush-temp/synapse-monitoring' version: 0.0.0 dependencies: @@ -24762,7 +24778,7 @@ packages: dev: false file:projects/synapse-spark.tgz: - resolution: {integrity: sha512-AjZYhUxgZjKU3vweVyykeN0cd2OuXrFV3TTiX1XEnPS9QMyMvA1tS5ZjaMcDyW+Xj8CS+uEbICKfW+64uCsskg==, tarball: file:projects/synapse-spark.tgz} + resolution: {integrity: sha512-9Ecly4K6TLNWdqwlBcuLDwGv58STtdODBMMhSp5CSHTDepi+CjkGn0ip9wboIJMViYNIQ0brK+VoDs10tdS/+A==, tarball: file:projects/synapse-spark.tgz} name: '@rush-temp/synapse-spark' version: 0.0.0 dependencies: @@ -24805,7 +24821,7 @@ packages: dev: false file:projects/template-dpg.tgz: - resolution: {integrity: sha512-YESWFcpysNuOgdCO0hJ/zqbYYXYAwk/eJjdbBY4xodj2pqna6F41LIi4+Bz/8VCzcwftrGofLR+zb8LwGdBvMA==, tarball: file:projects/template-dpg.tgz} + resolution: {integrity: sha512-fW4MXU4jqfbvYzZuBFgDJch2OclABiH3pJxqJjIB7Qw6+dLi3L+vWeXNrpIfuvu1/xzrIUeHf9oJ4TKL8rOvlg==, tarball: file:projects/template-dpg.tgz} name: '@rush-temp/template-dpg' version: 0.0.0 dependencies: @@ -24848,7 +24864,7 @@ packages: dev: false file:projects/template.tgz: - resolution: {integrity: sha512-x1HZ0/qqFxfy8/h5R+We7tnX50cydc5v6HAs4wW3Z+ySZqVWBvEQ4YxJOSHMr8j0R2hp1VuneZvPONxTAnneBA==, tarball: file:projects/template.tgz} + resolution: {integrity: sha512-ezZARdgagUad/iPF8s2lPmJqJ8dfbxqGKGiXjcmei3R+s3cvRfzCi1fX8M2NeEvId9AVkvqHcR7JelbWPK9kTQ==, tarball: file:projects/template.tgz} name: '@rush-temp/template' version: 0.0.0 dependencies: @@ -24887,7 +24903,7 @@ packages: dev: false file:projects/test-credential.tgz: - resolution: {integrity: sha512-nwPaMmlLg3LI9M8TqTaktpexnFRmUHeylzffXLHpotZuZ5O9uuAf+cVtmIPZm4wHyXb+B0PlXrX39QgnNkBusg==, tarball: file:projects/test-credential.tgz} + resolution: {integrity: sha512-nCHOpp4WKY5pLLuUe35Qwrm126k6keisoJXT2MFrqhH+lxTRgfKM6oXWILxDoh/23eUxb48w+wkTVx57yXlv2w==, tarball: file:projects/test-credential.tgz} name: '@rush-temp/test-credential' version: 0.0.0 dependencies: @@ -24906,7 +24922,7 @@ packages: dev: false file:projects/test-perf.tgz: - resolution: {integrity: sha512-jjIBg+5KKg346PEdnhQYJreuLveETFblKAx1mU66H/lXsc8WqMzCI+IfepM49Ir7p0PbYQELqWImPT5lDBbupw==, tarball: file:projects/test-perf.tgz} + resolution: {integrity: sha512-dOxYVneFdt7VksrDfZkwTADpjCFjFb7pd7p+j55MC9GonmLUYrDUAnxiHzaoEilYPxq2E5xsQ+/IeRmqJe2RBA==, tarball: file:projects/test-perf.tgz} name: '@rush-temp/test-perf' version: 0.0.0 dependencies: @@ -24934,7 +24950,7 @@ packages: dev: false file:projects/test-recorder.tgz: - resolution: {integrity: sha512-hUKR1dZQ6QCrObCNDi+c0zLiC9Iu1GBkHgd7a9v4JQljczfchx6HCkfWMsjDmd9sRbC1DY3CVPKTa8D/vnpW5w==, tarball: file:projects/test-recorder.tgz} + resolution: {integrity: sha512-TT/AANNJqwewH9gxgDofnm/xVA5p6LGqlP7wKg+X8NdwHdHjjWK3rxA3raBKKVqp1y3EwzmUaJ56E7uNsANYXQ==, tarball: file:projects/test-recorder.tgz} name: '@rush-temp/test-recorder' version: 0.0.0 dependencies: @@ -24972,7 +24988,7 @@ packages: dev: false file:projects/test-utils-vitest.tgz: - resolution: {integrity: sha512-4aDLiQO03NlXDhgF0Cc9KMdXKr+W3zNBTVk8Xv1N4X9IjbfdTGlCME2QITXRIKIOuaeA/CQbrFSL2msl3iRQIQ==, tarball: file:projects/test-utils-vitest.tgz} + resolution: {integrity: sha512-B+7UtywzLzak0ygqHSUnHwXafQGcVcajMBpZo6UhLiWFKlWN5qWpr5250nrGAS1jNRcThxUsJrLZu8B7hM8Rsw==, tarball: file:projects/test-utils-vitest.tgz} name: '@rush-temp/test-utils-vitest' version: 0.0.0 dependencies: @@ -25009,7 +25025,7 @@ packages: dev: false file:projects/test-utils.tgz: - resolution: {integrity: sha512-/zW3HGJRjx4SIrcG1OW/0MELjHiqK+jzymjKCSQScVVjjsV9Bay/8Yy4KJD4DVkYMu6zcObo92mFgbWca33XGg==, tarball: file:projects/test-utils.tgz} + resolution: {integrity: sha512-dy4yWOviUvykLKxFyvx0+Gm2BCVCmsoPEPu6zkl0yOe8nmR7y0Ee0O2/h03m7Nvj0p+qaP9s+iVOoy3tcV0vFg==, tarball: file:projects/test-utils.tgz} name: '@rush-temp/test-utils' version: 0.0.0 dependencies: @@ -25046,7 +25062,7 @@ packages: dev: false file:projects/ts-http-runtime.tgz: - resolution: {integrity: sha512-VBq0lREYcVpoYsn5OYZ0ozOoa4PVeoTgRTGKQBLNoNYSx/Hn77dbEbduq4lfy9JRuwRQXAwd9hjwRRZERkP2eA==, tarball: file:projects/ts-http-runtime.tgz} + resolution: {integrity: sha512-B/VysScuLZjdytX+Sv9P1bZZEJGlYat2rxvFSKZAiLgESNj0BE6WbXmDCU4WFv7DQ6mH+EFE6jQcWemLxc2rfA==, tarball: file:projects/ts-http-runtime.tgz} name: '@rush-temp/ts-http-runtime' version: 0.0.0 dependencies: @@ -25084,7 +25100,7 @@ packages: dev: false file:projects/vite-plugin-browser-test-map.tgz: - resolution: {integrity: sha512-9Bt7C5VP+GzOIGL0LP/ZvGSIBMb8IdjGAXe9sOIaIVg7tfDjQxOGrs36E9cH9rkmjDtkdncgNuA1FRhGOTgKMQ==, tarball: file:projects/vite-plugin-browser-test-map.tgz} + resolution: {integrity: sha512-vAWZ/lgdy7UjDtLWoCJKHPSEayxZJWELZREkYldM1ESozDyjNml4n9tmBn9DgoSXWbUAZP06XEcRmPnC7bmRrA==, tarball: file:projects/vite-plugin-browser-test-map.tgz} name: '@rush-temp/vite-plugin-browser-test-map' version: 0.0.0 dependencies: @@ -25101,7 +25117,7 @@ packages: dev: false file:projects/web-pubsub-client-protobuf.tgz: - resolution: {integrity: sha512-s344F/rfLBKSnew8lt69C1k5NSsoRrbDrnN088+fInk94FVt0r5D3pU7DV0rrPfBVt2YTWfWd9lJfWvphA1uZw==, tarball: file:projects/web-pubsub-client-protobuf.tgz} + resolution: {integrity: sha512-waftlsGiLIhUZ0zGcVVI0QZCU9zWQdZDG/aS9vn0j+cvcJUdBvXBm/V7lLw6oj0AzGbBhLjrb2qhLRbQG+9Z1g==, tarball: file:projects/web-pubsub-client-protobuf.tgz} name: '@rush-temp/web-pubsub-client-protobuf' version: 0.0.0 dependencies: @@ -25160,7 +25176,7 @@ packages: dev: false file:projects/web-pubsub-client.tgz: - resolution: {integrity: sha512-ksVavvvhw2rNtMPIXp6ZrnQNvp9ft/aqoFaCs49OmVVvXVW2TGGY/Ma/9VfYyaxu6K5xRqJfq29qQYVbJeusnw==, tarball: file:projects/web-pubsub-client.tgz} + resolution: {integrity: sha512-Wa1bcMTI4UaxLBmLnvBrFDc00tek3O19N2Ggl+5puqYA3uj3MJRyReREHzh9S5b88cMW8aXIZcIBBimFnJ4ErA==, tarball: file:projects/web-pubsub-client.tgz} name: '@rush-temp/web-pubsub-client' version: 0.0.0 dependencies: @@ -25213,7 +25229,7 @@ packages: dev: false file:projects/web-pubsub-express.tgz: - resolution: {integrity: sha512-SHp9x1fIT9oU9CXIvdAOTYwVBUars9Tx1Hg8SHCx6wUYKNRgjvDVIkJ+d6NC17Jc5AQ9BsqsIiHMRKTLVIzhBA==, tarball: file:projects/web-pubsub-express.tgz} + resolution: {integrity: sha512-dRZ0zzzAB3ZP9x+OWUSgVXVAaM7G2q5ZnErkdotzj0DuH7nXeZxt3xvqC/rDDMK7CL9FDTJ4uk/3Uz0SW8FidA==, tarball: file:projects/web-pubsub-express.tgz} name: '@rush-temp/web-pubsub-express' version: 0.0.0 dependencies: @@ -25253,7 +25269,7 @@ packages: dev: false file:projects/web-pubsub.tgz: - resolution: {integrity: sha512-evjNObp4pF1Xv2Lrx+cigAoBUEtf9rsYe12hdJCd570EkZaRqrmGHBm99EKt513w+pVHdRW7D0Nc5J8jUoqmww==, tarball: file:projects/web-pubsub.tgz} + resolution: {integrity: sha512-T1dufrgVaijNEcpQOjkwo3osMcCxGYbkimyBXTFfQRlmg7JcnW8jYRen4MUo7ClovOZFDrJI5iD35UvytwbHVg==, tarball: file:projects/web-pubsub.tgz} name: '@rush-temp/web-pubsub' version: 0.0.0 dependencies: diff --git a/sdk/communication/communication-job-router-rest/.eslintrc.json b/sdk/communication/communication-job-router-rest/.eslintrc.json deleted file mode 100644 index 619797ac39b6..000000000000 --- a/sdk/communication/communication-job-router-rest/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "plugins": ["@azure/azure-sdk"], - "extends": ["plugin:@azure/azure-sdk/azure-sdk-base"], - "rules": { - "@azure/azure-sdk/ts-modules-only-named": "warn", - "@azure/azure-sdk/ts-apiextractor-json-types": "warn", - "@azure/azure-sdk/ts-package-json-types": "warn", - "@azure/azure-sdk/ts-package-json-engine-is-present": "warn", - "tsdoc/syntax": "warn" - } -} diff --git a/sdk/communication/communication-job-router-rest/CHANGELOG.md b/sdk/communication/communication-job-router-rest/CHANGELOG.md index 76a338687404..ab71ab5fa7b2 100644 --- a/sdk/communication/communication-job-router-rest/CHANGELOG.md +++ b/sdk/communication/communication-job-router-rest/CHANGELOG.md @@ -1,45 +1,68 @@ -# Release History - -## 1.1.0-beta.2 (Unreleased) - +## 1.0.0-beta.1 (2024-09-02) + ### Features Added -### Breaking Changes - -### Bugs Fixed - -### Other Changes - -## 1.1.0-beta.1 (2024-04-12) - -### Features Added + - Added Interface AzureCommunicationRoutingServiceClientOptions + - Added Type Alias DistributionModeKind + - Added Type Alias DistributionModeKindOutput + - Added Type Alias ExceptionActionKind + - Added Type Alias ExceptionActionKindOutput + - Added Type Alias ExceptionTriggerKind + - Added Type Alias ExceptionTriggerKindOutput + - Added Type Alias ExpressionRouterRuleLanguage + - Added Type Alias ExpressionRouterRuleLanguageOutput + - Added Type Alias JobMatchingModeKind + - Added Type Alias JobMatchingModeKindOutput + - Added Type Alias LabelOperator + - Added Type Alias LabelOperatorOutput + - Added Type Alias QueueSelectorAttachmentKind + - Added Type Alias QueueSelectorAttachmentKindOutput + - Added Type Alias RouterJobStatus + - Added Type Alias RouterJobStatusOutput + - Added Type Alias RouterJobStatusSelector + - Added Type Alias RouterRuleKind + - Added Type Alias RouterRuleKindOutput + - Added Type Alias RouterWorkerSelectorStatus + - Added Type Alias RouterWorkerSelectorStatusOutput + - Added Type Alias RouterWorkerState + - Added Type Alias RouterWorkerStateOutput + - Added Type Alias RouterWorkerStateSelector + - Added Type Alias ScoringRuleParameterSelector + - Added Type Alias ScoringRuleParameterSelectorOutput + - Added Type Alias WorkerSelectorAttachmentKind + - Added Type Alias WorkerSelectorAttachmentKindOutput -#### RouterWorker - -- Added `MaxConcurrentOffers` - -## 1.0.0 (2023-11-01) - -### Features Added - -This is the initial release of the @azure-rest version of Job Router SDK. -There was a previous preview SDK under a different package named @azure/communication-job-router which will be deprecated. - -Using AzureCommunicationRoutingServiceClient: +### Breaking Changes -- Upsert, get, list and delete DistributionPolicy. -- Upsert, get, list and delete RouterQueue. -- Upsert, get, list and delete ClassificationPolicy. -- Upsert, get, list and delete ExceptionPolicy. -- Upsert, get, list and delete RouterJob. -- RouterJob can be created and updated with different matching modes: QueueAndMatchMode, ScheduleAndSuspendMode and SuspendMode. -- Reclassify a RouterJob. -- Close a RouterJob. -- Complete a RouterJob. -- Cancel a RouterJob. -- Unassign a RouterJob. -- Get the position of a RouterJob in a queue. -- Upsert, get, list and delete RouterWorker. -- Accept an offer. -- Decline an offer. -- Get queue statistics. + - Type of parameter kind of interface DistributionModeOutputParent is changed from string to DistributionModeKindOutput + - Type of parameter kind of interface DistributionModeParent is changed from string to DistributionModeKind + - Type of parameter kind of interface ExceptionActionOutputParent is changed from string to ExceptionActionKindOutput + - Type of parameter kind of interface ExceptionActionParent is changed from string to ExceptionActionKind + - Type of parameter kind of interface ExceptionTriggerOutputParent is changed from string to ExceptionTriggerKindOutput + - Type of parameter kind of interface ExceptionTriggerParent is changed from string to ExceptionTriggerKind + - Type of parameter language of interface ExpressionRouterRule is changed from string to ExpressionRouterRuleLanguage + - Type of parameter language of interface ExpressionRouterRuleOutput is changed from string to ExpressionRouterRuleLanguageOutput + - Type of parameter kind of interface JobMatchingModeOutputParent is changed from string to JobMatchingModeKindOutput + - Type of parameter kind of interface JobMatchingModeParent is changed from string to JobMatchingModeKind + - Type of parameter status of interface ListJobsQueryParamProperties is changed from string to RouterJobStatusSelector + - Type of parameter state of interface ListWorkersQueryParamProperties is changed from string to RouterWorkerStateSelector + - Type of parameter labelOperator of interface PassThroughQueueSelectorAttachment is changed from string to LabelOperator + - Type of parameter labelOperator of interface PassThroughQueueSelectorAttachmentOutput is changed from string to LabelOperatorOutput + - Type of parameter labelOperator of interface PassThroughWorkerSelectorAttachment is changed from string to LabelOperator + - Type of parameter labelOperator of interface PassThroughWorkerSelectorAttachmentOutput is changed from string to LabelOperatorOutput + - Type of parameter kind of interface QueueSelectorAttachmentOutputParent is changed from string to QueueSelectorAttachmentKindOutput + - Type of parameter kind of interface QueueSelectorAttachmentParent is changed from string to QueueSelectorAttachmentKind + - Type of parameter status of interface RouterJobOutput is changed from string to RouterJobStatusOutput + - Type of parameter labelOperator of interface RouterQueueSelector is changed from string to LabelOperator + - Type of parameter labelOperator of interface RouterQueueSelectorOutput is changed from string to LabelOperatorOutput + - Type of parameter kind of interface RouterRuleOutputParent is changed from string to RouterRuleKindOutput + - Type of parameter kind of interface RouterRuleParent is changed from string to RouterRuleKind + - Type of parameter state of interface RouterWorkerOutput is changed from string to RouterWorkerStateOutput + - Type of parameter labelOperator of interface RouterWorkerSelector is changed from string to LabelOperator + - Type of parameter labelOperator of interface RouterWorkerSelectorOutput is changed from string to LabelOperatorOutput + - Type of parameter status of interface RouterWorkerSelectorOutput is changed from string to RouterWorkerSelectorStatusOutput + - Type of parameter scoringParameters of interface ScoringRuleOptions is changed from string[] to ScoringRuleParameterSelector[] + - Type of parameter scoringParameters of interface ScoringRuleOptionsOutput is changed from string[] to ScoringRuleParameterSelectorOutput[] + - Type of parameter kind of interface WorkerSelectorAttachmentOutputParent is changed from string to WorkerSelectorAttachmentKindOutput + - Type of parameter kind of interface WorkerSelectorAttachmentParent is changed from string to WorkerSelectorAttachmentKind + diff --git a/sdk/communication/communication-job-router-rest/LICENSE b/sdk/communication/communication-job-router-rest/LICENSE new file mode 100644 index 000000000000..7d5934740965 --- /dev/null +++ b/sdk/communication/communication-job-router-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/communication/communication-job-router-rest/README.md b/sdk/communication/communication-job-router-rest/README.md index 6b840b394ba5..977e6486dcb4 100644 --- a/sdk/communication/communication-job-router-rest/README.md +++ b/sdk/communication/communication-job-router-rest/README.md @@ -1,16 +1,13 @@ -# Azure Communication Services Job Router REST client library for JavaScript +# AzureCommunicationRoutingService REST client library for JavaScript -This package contains a JavaScript SDK for Azure Communication Services Job Router. -Read more about Azure Communication Services [here](https://learn.microsoft.com/azure/communication-services/overview) +Azure Communication Routing Service **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** Key links: -- [Source code](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-job-router-rest) - [Package (NPM)](https://www.npmjs.com/package/@azure-rest/communication-job-router) -- [Samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-job-router-rest/samples) - +- [API reference documentation](https://docs.microsoft.com/javascript/api/@azure-rest/communication-job-router?view=azure-node-preview) ## Getting started @@ -22,25 +19,21 @@ Key links: - You must have an [Azure subscription](https://azure.microsoft.com/free/) to use this package. -### Have an ACS Resource - -Create an ACS resource in the [Azure Portal](https://ms.portal.azure.com/#home) or use an existing resource. - ### Install the `@azure-rest/communication-job-router` package -Install the Job Router REST client library for JavaScript with `npm`: +Install the AzureCommunicationRoutingService REST client REST client library for JavaScript with `npm`: ```bash npm install @azure-rest/communication-job-router ``` -### Create and authenticate an `AzureCommunicationRoutingServiceClient` +### Create and authenticate a `AzureCommunicationRoutingServiceClient` 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. -To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity) +To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity) 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) @@ -49,326 +42,6 @@ can be used to authenticate the client. 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 -## Tutorial: Route jobs to workers using the Azure Communication Services Job Router SDK - -In this tutorial, you will learn: - -- How to create a queue. -- How to create workers and assign them to a queue. -- How to route jobs to workers. -- How to subscribe to and handle Job Router events. -- How to complete and close jobs. - -### Start a NodeJS Express server - -In a shell (cmd, PowerShell, Bash, etc.) create a folder called `RouterQuickStart` and inside this folder execute `npx express-generator`. This will generate a simple Express project that will listen on `port 3000`. - -#### Example - -```sh -mkdir RouterQuickStart -cd RouterQuickStart -npx express-generator -npm install -DEBUG=routerquickstart:* npm start -``` - -### Install the Azure ACS Job Router SDK - -In the `RouterQuickStart` folder, install the ACS Job Router SDK by executing `npm install @azure-rest/communication-job-router --save`. - -## Routing Jobs - -### Construct an AzureCommunicationRoutingServiceClient - -First we need to construct an `AzureCommunicationRoutingServiceClient`. - -```js -const JobRouterClient = require("@azure-rest/communication-job-router").default; - -const connectionString = "endpoint=https://.communication.azure.com/;accesskey="; -const routerClient = JobRouterClient(connectionString); -``` - -### Create a Distribution Policy - -This policy determines which workers will receive job offers as jobs are distributed off their queues. - -```js -const distributionPolicyId = "distribution-policy-id-1"; -const distributionPolicy = await routerClient.path("/routing/distributionPolicies/{id}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Distribution Policy", - offerExpiresAfterSeconds: 30, - mode: { - kind: "longestIdle", - minConcurrentOffers: 1, - maxConcurrentOffers: 3, - }, - } -}); -``` - -### Create a Queue - -This queue offers jobs to workers according to our previously created distribution policy. - -```js -const salesQueueId = "sales-queue-id-1"; -const salesQueue = await routerClient.path("/routing/queues/{id}", salesQueueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - labels: {}, - } -}); -``` - -### Create Workers - -These workers are assigned to our previously created "Sales" queue and have some labels. - -- setting `availableForOffers` to `true` means these workers are ready to accept job offers. -- refer to our [labels documentation](https://learn.microsoft.com/azure/communication-services/concepts/router/concepts#labels) to better understand labels and label selectors. - -```js -// Create worker "Alice". -const workerAliceId = "773accfb-476e-42f9-a202-b211b41a4ea4"; -const workerAlice = await routerClient.path("/routing/workers/{id}", workerAliceId).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 120, - queues: [salesQueueId], - labels: { - Xbox: 5, - german: 4, - name: "Alice" - }, - channels: [ - { - channelId: "CustomChatChannel", - capacityCostPerJob: 10, - }, - { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100, - }, - ], - } -}); - -// Create worker "Bob". -const workerBobId = "21837c88-6967-4078-86b9-1207821a8392"; -const workerBob = await routerClient.path("/routing/workers/{id}", workerBobId).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [salesQueueId], - labels: { - Xbox: 5, - english: 3, - name: "Alice" - }, - channels: [ - { - channelId: "CustomChatChannel", - capacityCostPerJob: 10, - }, - { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100, - }, - ], - } -}); -``` - -### Job Lifecycle - -Refer to our [job lifecycle documentation](https://learn.microsoft.com/azure/communication-services/concepts/router/concepts#job-lifecycle) to better understand the lifecycle of a job. - -### Create a Job - -This job is enqueued on our previously created "Sales" queue. - -```js -const jobId = "router-job-123"; -const result = await routerClient.path("/routing/jobs/{id}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492", - channelId: "voice", - priority: 2, - queueId: salesQueueId, - labels: {}, - } -}); -``` - -### (Optional) Create a Job With a Classification Policy - -#### Create a Classification Policy - -This policy classifies jobs upon creation. - -```js -const classificationPolicyId = "classification-policy-1"; -const classificationPolicy = await routerClient.path("/routing/classificationPolicies/{id}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" } - }, - ], - workerSelectorAttachments: [ - { - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 } - } - ], - prioritizationRule: { - kind: "expression", - language: "powerFx", - expression: "If(job.department = \"xbox\", 2, 1)" - } - } -}); -``` - -- Refer to our [classification concepts documentation](https://learn.microsoft.com/azure/communication-services/concepts/router/classification-concepts) to better understand queue selectors and worker selectors. -- Refer to our [rules documentation](https://learn.microsoft.com/azure/communication-services/concepts/router/router-rule-concepts?pivots=programming-language-javascript) to better understand prioritization rules. - -#### Create and classify a job - -This job will be classified with our previously created classification policy. It also has a label. - -```js -const job = await routerClient.path("/routing/jobs/{id}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492", - channelId: "voice", - classificationPolicyId: classificationPolicy.body.id, - labels: { - department: "xbox" - }, - } -}); -``` - -## Events - -Job Router events are delivered via Azure Event Grid. Refer to our [Azure Event Grid documentation](https://docs.microsoft.com/azure/event-grid/overview) to better understand Azure Event Grid. - -In the previous example: - -- The job gets enqueued to the “Sales" queue. -- A worker is selected to handle the job, a job offer is issued to that worker, and a `RouterWorkerOfferIssued` event is sent via Azure Event Grid. - -Example `RouterWorkerOfferIssued` JSON shape: - -```json -{ - "id": "1027db4a-17fe-4a7f-ae67-276c3120a29f", - "topic": "/subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}", - "subject": "worker/{worker-id}/job/{job-id}", - "data": { - "workerId": "w100", - "jobId": "7f1df17b-570b-4ae5-9cf5-fe6ff64cc712", - "channelReference": "test-abc", - "channelId": "FooVoiceChannelId", - "queueId": "625fec06-ab81-4e60-b780-f364ed96ade1", - "offerId": "525fec06-ab81-4e60-b780-f364ed96ade1", - "offerTimeUtc": "2023-08-17T02:43:30.3847144Z", - "expiryTimeUtc": "2023-08-17T02:44:30.3847674Z", - "jobPriority": 5, - "jobLabels": { - "Locale": "en-us", - "Segment": "Enterprise", - "Token": "FooToken" - }, - "jobTags": { - "Locale": "en-us", - "Segment": "Enterprise", - "Token": "FooToken" - } - }, - "eventType": "Microsoft.Communication.RouterWorkerOfferIssued", - "dataVersion": "1.0", - "metadataVersion": "1", - "eventTime": "2023-08-17T00:55:25.1736293Z" -} -``` - -### Subscribing to Events - -One way to subscribe to ACS Job Router events is through the Azure Portal. - -1. Navigate to your ACS resource in the Azure Portal and open the “Events” blade. -2. Add an event subscription for the “RouterWorkerOfferIssued” event. -3. Select an appropriate means to receive the event (e.g. Webhook, Azure Functions, Service Bus). - -Refer to our ["subscribe to Job Router events" documentation](https://learn.microsoft.com/azure/communication-services/how-tos/router-sdk/subscribe-events) to better understand subscribing to Job Router events. - -The route in your NodeJS application that receives events may look something like this: - -```js -app.post('/event', (req, res) => { - req.body.forEach(eventGridEvent => { - // Deserialize the event data into the appropriate type - if (eventGridEvent.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") { - res.send({ validationResponse: eventGridEvent.data.validationCode }); - } else if (eventGridEvent.eventType === "Microsoft.Azure.CommunicationServices.RouterWorkerOfferIssued") { - // RouterWorkerOfferIssued handling logic; - } else if ... - }); - ... -}); -``` - -### Accept or Decline the Job Offer - -Once you receive a `RouterWorkerOfferIssued` event you can accept or decline the job offer. - -- `workerId` - Id of the worker accepting or declining the job offer. -- `offerId` - Id of the offer being accepted or declined. - -```js -const acceptResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:accept", workerId, offerId).post(); -// or -const declineResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:decline", workerId, offerId).post(); -``` - -### Complete the Job - -The `assignmentId` received from the previous step's response is required to complete the job. Completing the job puts it in the wrap-up phase of its lifecycle. - -```ts -const completeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", jobId, acceptResponse.body.assignmentId).post({ - body: { - note: `Job has been completed by ${workerId} at ${new Date()}` - } -}); -``` - -### Close the Job - -Once the worker has completed the wrap-up phase of the job we can close the job and attach a note to it for future reference. - -```ts -const closeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", jobId, acceptResponse.body.assignmentId).post({ - body: { - note: `Job has been closed by ${workerId} at ${new Date()}` - } -}); -``` - ## Troubleshooting ### Logging diff --git a/sdk/communication/communication-job-router-rest/api-extractor.json b/sdk/communication/communication-job-router-rest/api-extractor.json index 5ff7f4621cde..5219bb0379aa 100644 --- a/sdk/communication/communication-job-router-rest/api-extractor.json +++ b/sdk/communication/communication-job-router-rest/api-extractor.json @@ -1,18 +1,31 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "mainEntryPointFilePath": "./types/src/index.d.ts", - "docModel": { "enabled": true }, - "apiReport": { "enabled": true, "reportFolder": "./review" }, + "mainEntryPointFilePath": "./dist/esm/index.d.ts", + "docModel": { + "enabled": true + }, + "apiReport": { + "enabled": true, + "reportFolder": "./review" + }, "dtsRollup": { "enabled": true, "untrimmedFilePath": "", "publicTrimmedFilePath": "./types/communication-job-router.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/communication/communication-job-router-rest/assets.json b/sdk/communication/communication-job-router-rest/assets.json deleted file mode 100644 index 2d69a8e4145c..000000000000 --- a/sdk/communication/communication-job-router-rest/assets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "AssetsRepo": "Azure/azure-sdk-assets", - "AssetsRepoPrefixPath": "js", - "TagPrefix": "js/communication/communication-job-router-rest", - "Tag": "js/communication/communication-job-router-rest_a40be4dbdd" -} diff --git a/sdk/communication/communication-job-router-rest/eslint.config.mjs b/sdk/communication/communication-job-router-rest/eslint.config.mjs new file mode 100644 index 000000000000..113bdc3eaf5f --- /dev/null +++ b/sdk/communication/communication-job-router-rest/eslint.config.mjs @@ -0,0 +1,17 @@ +import azsdkEslint from "@azure/eslint-plugin-azure-sdk"; + +export default [ + ...azsdkEslint.configs.recommended, + { + rules: { + "@azure/azure-sdk/ts-modules-only-named": "warn", + "@azure/azure-sdk/ts-apiextractor-json-types": "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/communication/communication-job-router-rest/karma.conf.js b/sdk/communication/communication-job-router-rest/karma.conf.js deleted file mode 100644 index 87aaee950819..000000000000 --- a/sdk/communication/communication-job-router-rest/karma.conf.js +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// https://github.com/karma-runner/karma-chrome-launcher -process.env.CHROME_BIN = require("puppeteer").executablePath(); -require("dotenv").config(); -const { relativeRecordingsPath } = require("@azure-tools/test-recorder"); -process.env.RECORDINGS_RELATIVE_PATH = relativeRecordingsPath(); - -module.exports = function (config) { - config.set({ - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: "./", - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ["source-map-support", "mocha"], - - plugins: [ - "karma-mocha", - "karma-mocha-reporter", - "karma-chrome-launcher", - "karma-firefox-launcher", - "karma-env-preprocessor", - "karma-coverage", - "karma-sourcemap-loader", - "karma-junit-reporter", - "karma-source-map-support", - ], - - // list of files / patterns to load in the browser - files: [ - "dist-test/index.browser.js", - { - pattern: "dist-test/index.browser.js.map", - type: "html", - included: false, - served: true, - }, - ], - - // list of files / patterns to exclude - exclude: [], - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - "**/*.js": ["sourcemap", "env"], - // IMPORTANT: COMMENT following line if you want to debug in your browsers!! - // Preprocess source file to calculate code coverage, however this will make source file unreadable - // "dist-test/index.js": ["coverage"] - }, - - envPreprocessor: [ - "TEST_MODE", - "ENDPOINT", - "AZURE_CLIENT_SECRET", - "AZURE_CLIENT_ID", - "AZURE_TENANT_ID", - "SUBSCRIPTION_ID", - "RECORDINGS_RELATIVE_PATH", - "COMMUNICATION_CONNECTION_STRING", - ], - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ["mocha", "coverage", "junit"], - - coverageReporter: { - // specify a common output directory - dir: "coverage-browser/", - reporters: [ - { type: "json", subdir: ".", file: "coverage.json" }, - { type: "lcovonly", subdir: ".", file: "lcov.info" }, - { type: "html", subdir: "html" }, - { type: "cobertura", subdir: ".", file: "cobertura-coverage.xml" }, - ], - }, - - junitReporter: { - outputDir: "", // results will be saved as $outputDir/$browserName.xml - outputFile: "test-results.browser.xml", // if included, results will be saved as $outputDir/$browserName/$outputFile - suite: "", // suite will become the package name attribute in xml testsuite element - useBrowserName: false, // add browser name to report and classes names - nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element - classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element - properties: {}, // key value pair of properties to add to the section of the report - }, - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - // --no-sandbox allows our tests to run in Linux without having to change the system. - // --disable-web-security allows us to authenticate from the browser without having to write tests using interactive auth, which would be far more complex. - browsers: ["ChromeHeadlessNoSandbox"], - customLaunchers: { - ChromeHeadlessNoSandbox: { - base: "ChromeHeadless", - flags: ["--no-sandbox", "--disable-web-security"], - }, - }, - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: 1, - - browserNoActivityTimeout: 60000000, - browserDisconnectTimeout: 10000, - browserDisconnectTolerance: 3, - - client: { - mocha: { - // change Karma's debug.html to the mocha web reporter - reporter: "html", - timeout: "600000", - }, - }, - }); -}; diff --git a/sdk/communication/communication-job-router-rest/package.json b/sdk/communication/communication-job-router-rest/package.json index 9b31392281ab..c79f26e59af1 100644 --- a/sdk/communication/communication-job-router-rest/package.json +++ b/sdk/communication/communication-job-router-rest/package.json @@ -1,9 +1,28 @@ { "name": "@azure-rest/communication-job-router", - "sdk-type": "client", - "author": "Microsoft Corporation", - "version": "1.1.0-beta.2", + "version": "1.0.0-beta.1", "description": "Azure client library for Azure Communication Job Router services", + "engines": { + "node": ">=18.0.0" + }, + "sideEffects": false, + "autoPublish": false, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + }, + "dialects": [ + "esm", + "commonjs" + ], + "esmDialects": [ + "browser", + "react-native" + ], + "selfLink": false + }, + "type": "module", "keywords": [ "node", "azure", @@ -12,114 +31,108 @@ "browser", "isomorphic" ], + "author": "Microsoft Corporation", "license": "MIT", - "main": "dist/index.js", - "module": "./dist-esm/src/index.js", - "types": "./types/communication-job-router.d.ts", - "repository": "github:Azure/azure-sdk-for-js", - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, "files": [ - "dist/", - "dist-esm/src/", - "types/communication-job-router.d.ts", + "dist", "README.md", "LICENSE", - "review/*" + "review/*", + "CHANGELOG.md" ], - "engines": { - "node": ">=18.0.0" + "sdk-type": "client", + "repository": "github:Azure/azure-sdk-for-js", + "bugs": { + "url": "https://github.com/Azure/azure-sdk-for-js/issues" }, - "scripts": { - "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", - "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", - "build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1", - "build:samples": "dev-tool samples publish --force", - "build:test": "tsc -p . && dev-tool run bundle", - "build:debug": "tsc -p . && dev-tool run bundle && dev-tool run extract-api", - "check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"*.{js,json}\" \"test/**/*.ts\"", - "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\" \"*.{js,json}\" \"test/**/*.ts\"", - "generate:client": "echo skipped", - "integration-test:browser": "dev-tool run test:browser", - "integration-test:node": "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'", - "integration-test": "npm run integration-test:node && npm run integration-test:browser", - "lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]", - "lint": "eslint package.json api-extractor.json src test --ext .ts", - "pack": "npm pack 2>&1", - "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser", - "test:node": "npm run clean && npm run build:test && npm run unit-test:node", - "test": "npm rdddun clean && npm run build:test && npm run unit-test", - "unit-test": "npm run unit-test:node && npm run unit-test:browser", - "unit-test:node": "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'", - "unit-test:browser": "dev-tool run test:browser", - "build": "npm run clean && tsc -p . && dev-tool run bundle && mkdirp ./review && dev-tool run extract-api" + "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json", + "//metadata": { + "constantPaths": [ + { + "path": "src/azureCommunicationRoutingServiceClient.ts", + "prefix": "userAgentInfo" + } + ] }, - "sideEffects": false, - "autoPublish": false, "dependencies": { - "@azure/core-auth": "^1.3.0", - "@azure-rest/core-client": "^1.1.4", - "@azure/core-rest-pipeline": "^1.12.0", - "@azure/communication-common": "^2.2.0", + "@azure-rest/core-client": "^2.1.0", + "@azure/core-auth": "^1.6.0", + "@azure/core-rest-pipeline": "^1.5.0", "@azure/logger": "^1.0.0", - "tslib": "^2.2.0", + "tslib": "^2.6.2", "@azure/core-paging": "^1.5.0" }, "devDependencies": { - "@microsoft/api-extractor": "^7.31.1", - "autorest": "latest", - "@types/node": "^18.0.0", - "nyc": "^17.0.0", "dotenv": "^16.0.0", - "eslint": "^8.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", - "rimraf": "^5.0.0", - "source-map-support": "^0.5.9", "typescript": "~5.5.3", - "@azure/dev-tool": "^1.0.0", - "@azure/eslint-plugin-azure-sdk": "^3.0.0", - "@azure-tools/test-credential": "^1.0.0", - "@azure/identity": "^4.0.1", - "@azure-tools/test-recorder": "^3.0.0", + "tshy": "^1.11.1", "@azure/core-util": "^1.0.0", - "mocha": "^10.0.0", - "@types/mocha": "^10.0.0", - "cross-env": "^7.0.2", - "@types/chai": "^4.2.8", - "chai": "^4.2.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.0", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^2.1.2", - "karma-junit-reporter": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-mocha": "^2.0.1", - "karma-source-map-support": "~1.4.0", - "karma-sourcemap-loader": "^0.4.0", - "karma": "^6.2.0", - "ts-node": "^10.0.0" + "@azure/identity": "^4.2.1", + "@vitest/browser": "^2.0.5", + "@vitest/coverage-istanbul": "^2.0.5", + "playwright": "^1.41.2", + "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" }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-job-router-rest/README.md", - "//metadata": { - "constantPaths": [ - { - "path": "src/azureCommunicationRoutingServiceClient.ts", - "prefix": "userAgentInfo" - } - ] + "scripts": { + "clean": "rimraf --glob dist dist-browser dist-esm test-dist temp types *.tgz *.log", + "extract-api": "rimraf review && mkdirp ./review && dev-tool run extract-api", + "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]", + "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", + "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" }, - "browser": { - "./dist-esm/test/public/utils/env.js": "./dist-esm/test/public/utils/env.browser.js" + "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" + } + } }, - "//sampleConfiguration": { - "productName": "Azure client library for Azure Communication Job Router services", - "productSlugs": [ - "azure", - "azure-communication-services" - ] - } -} + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts" +} \ No newline at end of file diff --git a/sdk/communication/communication-job-router-rest/review/communication-job-router.api.md b/sdk/communication/communication-job-router-rest/review/communication-job-router.api.md index 2ae1f4191a4a..7e1a9a22e5c0 100644 --- a/sdk/communication/communication-job-router-rest/review/communication-job-router.api.md +++ b/sdk/communication/communication-job-router-rest/review/communication-job-router.api.md @@ -8,7 +8,6 @@ import { Client } from '@azure-rest/core-client'; import { ClientOptions } from '@azure-rest/core-client'; import { ErrorResponse } from '@azure-rest/core-client'; import { HttpResponse } from '@azure-rest/core-client'; -import { KeyCredential } from '@azure/core-auth'; import { Paged } from '@azure/core-paging'; import { PagedAsyncIterableIterator } from '@azure/core-paging'; import { PathUncheckedResponse } from '@azure-rest/core-client'; @@ -16,7 +15,6 @@ import { RawHttpHeaders } from '@azure/core-rest-pipeline'; import { RawHttpHeadersInput } from '@azure/core-rest-pipeline'; import { RequestParameters } from '@azure-rest/core-client'; import { StreamableMethod } from '@azure-rest/core-client'; -import { TokenCredential } from '@azure/core-auth'; // @public (undocumented) export interface Accept { @@ -61,6 +59,11 @@ export type AzureCommunicationRoutingServiceClient = Client & { path: Routes; }; +// @public +export interface AzureCommunicationRoutingServiceClientOptions extends ClientOptions { + apiVersion?: string; +} + // @public export interface BestWorkerMode extends DistributionModeParent { kind: "bestWorker"; @@ -279,10 +282,7 @@ export interface ConditionalWorkerSelectorAttachmentOutput extends WorkerSelecto } // @public -function createClient(connectionString: string, options: ClientOptions): AzureCommunicationRoutingServiceClient; - -// @public -function createClient(endpoint: string, credentialOrOptions?: KeyCredential | TokenCredential, options?: ClientOptions): AzureCommunicationRoutingServiceClient; +function createClient(endpointParam: string, { apiVersion, ...options }?: AzureCommunicationRoutingServiceClientOptions): AzureCommunicationRoutingServiceClient; export default createClient; // @public (undocumented) @@ -487,6 +487,12 @@ export interface DirectMapRouterRuleOutput extends RouterRuleOutputParent { // @public export type DistributionMode = DistributionModeParent | BestWorkerMode | LongestIdleMode | RoundRobinMode; +// @public +export type DistributionModeKind = string; + +// @public +export type DistributionModeKindOutput = string; + // @public export type DistributionModeOutput = DistributionModeOutputParent | BestWorkerModeOutput | LongestIdleModeOutput | RoundRobinModeOutput; @@ -494,7 +500,7 @@ export type DistributionModeOutput = DistributionModeOutputParent | BestWorkerMo export interface DistributionModeOutputParent { bypassSelectors?: boolean; // (undocumented) - kind: string; + kind: DistributionModeKindOutput; maxConcurrentOffers?: number; minConcurrentOffers?: number; } @@ -503,7 +509,7 @@ export interface DistributionModeOutputParent { export interface DistributionModeParent { bypassSelectors?: boolean; // (undocumented) - kind: string; + kind: DistributionModeKind; maxConcurrentOffers?: number; minConcurrentOffers?: number; } @@ -530,6 +536,12 @@ export type DistributionPolicyResourceMergeAndPatch = Partial; @@ -1201,7 +1237,7 @@ export interface ListJobsQueryParamProperties { queueId?: string; scheduledAfter?: Date | string; scheduledBefore?: Date | string; - status?: string; + status?: RouterJobStatusSelector; } // @public (undocumented) @@ -1289,7 +1325,7 @@ export interface ListWorkersQueryParamProperties { hasCapacity?: boolean; maxpagesize?: number; queueId?: string; - state?: string; + state?: RouterWorkerStateSelector; } // @public @@ -1367,14 +1403,14 @@ export interface PagingOptions { export interface PassThroughQueueSelectorAttachment extends QueueSelectorAttachmentParent { key: string; kind: "passThrough"; - labelOperator: string; + labelOperator: LabelOperator; } // @public export interface PassThroughQueueSelectorAttachmentOutput extends QueueSelectorAttachmentOutputParent { key: string; kind: "passThrough"; - labelOperator: string; + labelOperator: LabelOperatorOutput; } // @public @@ -1382,7 +1418,7 @@ export interface PassThroughWorkerSelectorAttachment extends WorkerSelectorAttac expiresAfterSeconds?: number; key: string; kind: "passThrough"; - labelOperator: string; + labelOperator: LabelOperator; } // @public @@ -1390,7 +1426,7 @@ export interface PassThroughWorkerSelectorAttachmentOutput extends WorkerSelecto expiresAfterSeconds?: number; key: string; kind: "passThrough"; - labelOperator: string; + labelOperator: LabelOperatorOutput; } // @public @@ -1418,19 +1454,25 @@ export interface QueueLengthExceptionTriggerOutput extends ExceptionTriggerOutpu // @public export type QueueSelectorAttachment = QueueSelectorAttachmentParent | ConditionalQueueSelectorAttachment | PassThroughQueueSelectorAttachment | RuleEngineQueueSelectorAttachment | StaticQueueSelectorAttachment | WeightedAllocationQueueSelectorAttachment; +// @public +export type QueueSelectorAttachmentKind = string; + +// @public +export type QueueSelectorAttachmentKindOutput = string; + // @public export type QueueSelectorAttachmentOutput = QueueSelectorAttachmentOutputParent | ConditionalQueueSelectorAttachmentOutput | PassThroughQueueSelectorAttachmentOutput | RuleEngineQueueSelectorAttachmentOutput | StaticQueueSelectorAttachmentOutput | WeightedAllocationQueueSelectorAttachmentOutput; // @public export interface QueueSelectorAttachmentOutputParent { // (undocumented) - kind: string; + kind: QueueSelectorAttachmentKindOutput; } // @public export interface QueueSelectorAttachmentParent { // (undocumented) - kind: string; + kind: QueueSelectorAttachmentKind; } // @public @@ -1527,10 +1569,6 @@ export interface RouterChannelOutput { maxNumberOfJobs?: number; } -// @public -export interface RouterConditionalRequestHeadersOutput { -} - // @public export interface RouterJob { channelId?: string; @@ -1610,7 +1648,7 @@ export interface RouterJobOutput { queueId?: string; requestedWorkerSelectors?: Array; readonly scheduledAt?: string; - readonly status?: string; + readonly status?: RouterJobStatusOutput; tags?: Record; } @@ -1626,6 +1664,15 @@ export interface RouterJobPositionDetailsOutput { // @public export type RouterJobResourceMergeAndPatch = Partial; +// @public +export type RouterJobStatus = string; + +// @public +export type RouterJobStatusOutput = string; + +// @public +export type RouterJobStatusSelector = string; + // @public export interface RouterQueue { distributionPolicyId?: string; @@ -1650,14 +1697,14 @@ export type RouterQueueResourceMergeAndPatch = Partial; // @public export interface RouterQueueSelector { key: string; - labelOperator: string; + labelOperator: LabelOperator; value?: unknown; } // @public export interface RouterQueueSelectorOutput { key: string; - labelOperator: string; + labelOperator: LabelOperatorOutput; value?: any; } @@ -1672,19 +1719,25 @@ export interface RouterQueueStatisticsOutput { // @public export type RouterRule = RouterRuleParent | DirectMapRouterRule | ExpressionRouterRule | FunctionRouterRule | StaticRouterRule | WebhookRouterRule; +// @public +export type RouterRuleKind = string; + +// @public +export type RouterRuleKindOutput = string; + // @public export type RouterRuleOutput = RouterRuleOutputParent | DirectMapRouterRuleOutput | ExpressionRouterRuleOutput | FunctionRouterRuleOutput | StaticRouterRuleOutput | WebhookRouterRuleOutput; // @public export interface RouterRuleOutputParent { // (undocumented) - kind: string; + kind: RouterRuleKindOutput; } // @public export interface RouterRuleParent { // (undocumented) - kind: string; + kind: RouterRuleKind; } // @public @@ -1727,7 +1780,7 @@ export interface RouterWorkerOutput { maxConcurrentOffers?: number; readonly offers?: Array; queues?: string[]; - readonly state?: string; + readonly state?: RouterWorkerStateOutput; tags?: Record; } @@ -1739,7 +1792,7 @@ export interface RouterWorkerSelector { expedite?: boolean; expiresAfterSeconds?: number; key: string; - labelOperator: string; + labelOperator: LabelOperator; value?: unknown; } @@ -1749,11 +1802,26 @@ export interface RouterWorkerSelectorOutput { expiresAfterSeconds?: number; readonly expiresAt?: string; key: string; - labelOperator: string; - readonly status?: string; + labelOperator: LabelOperatorOutput; + readonly status?: RouterWorkerSelectorStatusOutput; value?: any; } +// @public +export type RouterWorkerSelectorStatus = string; + +// @public +export type RouterWorkerSelectorStatusOutput = string; + +// @public +export type RouterWorkerState = string; + +// @public +export type RouterWorkerStateOutput = string; + +// @public +export type RouterWorkerStateSelector = string; + // @public (undocumented) export interface Routes { (path: "/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId: string): UpsertClassificationPolicy; @@ -1820,7 +1888,7 @@ export interface ScoringRuleOptions { batchSize?: number; descendingOrder?: boolean; isBatchScoringEnabled?: boolean; - scoringParameters?: string[]; + scoringParameters?: ScoringRuleParameterSelector[]; } // @public @@ -1828,9 +1896,15 @@ export interface ScoringRuleOptionsOutput { batchSize?: number; descendingOrder?: boolean; isBatchScoringEnabled?: boolean; - scoringParameters?: string[]; + scoringParameters?: ScoringRuleParameterSelectorOutput[]; } +// @public +export type ScoringRuleParameterSelector = string; + +// @public +export type ScoringRuleParameterSelectorOutput = string; + // @public export interface StaticQueueSelectorAttachment extends QueueSelectorAttachmentParent { kind: "static"; @@ -2453,19 +2527,25 @@ export interface WeightedAllocationWorkerSelectorAttachmentOutput extends Worker // @public export type WorkerSelectorAttachment = WorkerSelectorAttachmentParent | ConditionalWorkerSelectorAttachment | PassThroughWorkerSelectorAttachment | RuleEngineWorkerSelectorAttachment | StaticWorkerSelectorAttachment | WeightedAllocationWorkerSelectorAttachment; +// @public +export type WorkerSelectorAttachmentKind = string; + +// @public +export type WorkerSelectorAttachmentKindOutput = string; + // @public export type WorkerSelectorAttachmentOutput = WorkerSelectorAttachmentOutputParent | ConditionalWorkerSelectorAttachmentOutput | PassThroughWorkerSelectorAttachmentOutput | RuleEngineWorkerSelectorAttachmentOutput | StaticWorkerSelectorAttachmentOutput | WeightedAllocationWorkerSelectorAttachmentOutput; // @public export interface WorkerSelectorAttachmentOutputParent { // (undocumented) - kind: string; + kind: WorkerSelectorAttachmentKindOutput; } // @public export interface WorkerSelectorAttachmentParent { // (undocumented) - kind: string; + kind: WorkerSelectorAttachmentKind; } // @public diff --git a/sdk/communication/communication-job-router-rest/sample.env b/sdk/communication/communication-job-router-rest/sample.env deleted file mode 100644 index 64e43f31bba2..000000000000 --- a/sdk/communication/communication-job-router-rest/sample.env +++ /dev/null @@ -1,3 +0,0 @@ -# Used in most samples. Retrieve these values from a Communication Services instance -# in the Azure Portal. -COMMUNICATION_CONNECTION_STRING="endpoint=https://.communication.azure.net/;accessKey=" diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Create.ts deleted file mode 100644 index 292624380656..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Create.ts +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import * as dotenv from "dotenv"; -/** - * @summary Classification policy crud - */ -import JobRouter, { - QueueLengthExceptionTrigger, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; - -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a classification policy -async function createClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }) - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" } - }, - ], - workerSelectorAttachments: [{ - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 } - }], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: "If(job.department = \"xbox\", 2, 1)" - } - } - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - fallbackQueueId: "queue-123", - queueSelectorAttachments: [ - { - kind: "conditional", - queueSelectors: [{ - key: "foo", - labelOperator: "equal", - value: { default: 10 }, - }], - condition: { - kind: "direct-map-rule" - } - }, - ], - prioritizationRule: { - kind: "static-rule", - value: { default: 2 }, - }, - } - }); - - console.log("classification policy: " + result); -} - -void createClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Delete.ts deleted file mode 100644 index e685fafcc21e..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Delete.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete classification policy -async function deleteClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", policyId).delete(); - - console.log("classification policy: " + result); -} - -deleteClassificationPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Get.ts deleted file mode 100644 index 2e593305e545..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Get.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a classification policy - -async function getClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", policyId).get(); - - console.log("classification policy: " + result); -} - -void getClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_List.ts deleted file mode 100644 index 35add20dfba1..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_List.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List classification policies -async function listClassificationPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // let pagesCount = 1; - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/classificationPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } - -} - -listClassificationPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Update.ts deleted file mode 100644 index 2639fabc16e3..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ClassificationPolicy_Update.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a classification policy -async function updateClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" } - }, - ], - workerSelectorAttachments: [{ - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 } - }], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: "If(job.department = \"xbox\", 2, 1)" - } - } - }); - - console.log("classification policy: " + result); -} - -void updateClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Create.ts deleted file mode 100644 index 4b2642f2609d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Create.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an distribution policy -async function createDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - console.log("distribution policy: " + result); -} - -createDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Delete.ts deleted file mode 100644 index eb29349c0bcd..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Delete.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete distribution policy -async function deleteDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", policyId).delete(); - - console.log("distribution policy: " + result); -} - -deleteDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Get.ts deleted file mode 100644 index fb274ccfc6b6..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Get.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a distribution policy - -async function getDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", policyId).get(); - - console.log("distribution policy: " + result); -} - -getDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_List.ts deleted file mode 100644 index 5fd95065937d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_List.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List distribution policies -async function listDistributionPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/distributionPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listDistributionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Update.ts deleted file mode 100644 index c65935dc048f..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/DistributionPolicy_Update.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a distribution policy -async function updateDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - console.log("distribution policy: " + result); -} - -updateDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Create.ts deleted file mode 100644 index af77e7bae8f8..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Create.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - QueueLengthExceptionTrigger -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an exception policy -async function createExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - - console.log("exception policy: " + result); -} - -createExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Delete.ts deleted file mode 100644 index aed2576f2323..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete exception policy -async function deleteExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId).delete(); - - console.log("exception policy: " + result); -} - -deleteExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Get.ts deleted file mode 100644 index b461493de375..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a exception policy - -async function getExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId).get(); - - console.log("exception policy: " + result); -} - -getExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_List.ts deleted file mode 100644 index f355e290b1ed..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_List.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listExceptionPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/exceptionPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listExceptionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Update.ts deleted file mode 100644 index e5e8f8ac1849..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/ExceptionPolicy_Update.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - -import JobRouter, { - QueueLengthExceptionTrigger, - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a exception policy -async function updateExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - console.log("exception policy: " + result); -} - -updateExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/QuickStart.ts b/sdk/communication/communication-job-router-rest/samples-dev/QuickStart.ts deleted file mode 100644 index 3116d360863d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/QuickStart.ts +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Quick start workflow for creating queue, job and worker, routing/matching job with worker - */ -import JobRouter, { - RouterWorkerOutput, - AzureCommunicationRoutingServiceClient, - AcceptJobOfferResultOutput, - RouterJobOutput -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -async function quickStart(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // Create a Distribution Policy - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // Create a Queue - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - // Create a Job - const jobId = "router-job-123"; - await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - // Register a Worker - // Register a worker associated with the queue that was just created. We will assign labels to the - // worker to include all relevant information for example, skills, which will be used to determine - // whether a job can be offered to a worker or not. - const workerId = "router-worker-123" - await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - queueId - ], - labels: {}, - channels: [{ - channelId: "ChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - availableForOffers: true - } - }) - - await delay(5000); - // Check offers to a Worker - // Once the worker has been registered, Router will send an offer to the worker if the worker satisfies requirements - // for a job. See Offer flow https://docs.microsoft.com/azure/communication-services/concepts/router/concepts#offer - // - // We should get a RouterWorkerOfferIssued from our EventGrid subscription. - - // However, we could also wait a few seconds and then query the worker directly against the Job Router API to see if - // an offer was issued to it. - const workerResponse = await routerClient.path("/routing/workers/{workerId}", workerId).get(); - if (workerResponse.status !== "200") { - throw new Error("get works fails") - } - const workerResult = (workerResponse.body as RouterWorkerOutput) - - for await (let offer of workerResult.offers!) { - console.log(`Worker ${workerId} has an active offer for job ${offer.jobId}`); - } - - - // Accepting an offer - // Once a worker receives an offer, it can take two possible actions: accept or decline. We are going to accept the offer. - // fetching the offer id - const jobOffer = workerResult.offers![0]; - - const offerId = jobOffer.offerId; // `OfferId` can be retrieved directly from consuming event from Event grid - - // accepting the offer sent to `worker-1` - const acceptJobOfferResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:accept", workerId, offerId).post() - if (acceptJobOfferResponse.status !== "200") { - throw new Error("accept job offer fails") - } - const acceptJobOfferResult = (acceptJobOfferResponse.body as AcceptJobOfferResultOutput) - - console.log(`Offer: ${jobOffer.offerId} sent to worker: ${workerId} has been accepted`); - console.log( - `Job has been assigned to worker: ${workerId} with assignment: ${acceptJobOfferResult.assignmentId}` - ); - - // verify job assignment is populated when querying job - let updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails") - } - let updatedJob = (updatedJobResponse.body as RouterJobOutput) - - - console.log(`Job assignment has been successful: - ${updatedJob.status == "assigned" && - updatedJob.assignments!.hasOwnProperty(acceptJobOfferResult.assignmentId) - }`); - - // Completing a job - // Once the worker is done with the job, the worker has to mark the job as `completed`. - const completeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - note: `Job has been completed by ${workerId} at ${new Date()}` - } - }) - - console.log(`Job has been successfully completed: ${completeJob}`); - - // Closing a job - // After a job has been completed, the worker can perform wrap up actions to the job before closing the job and finally - // releasing its capacity to accept more incoming jobs - const closeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - note: `Job has been closed by ${workerId} at ${new Date()}` - } - }) - console.log(`Job has been successfully closed: ${closeJob}`); - - // Optionally, a job can also be set up to be marked as closed in the future. - const afterTwoSeconds = new Date(); - afterTwoSeconds.setSeconds(afterTwoSeconds.getSeconds() + 2); - const closeJobInFuture = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - closeAt: afterTwoSeconds, - note: `Job has been marked to close in the future by ${workerId} at ${afterTwoSeconds}` - } - }) - console.log(`Job has been marked to close: ${closeJobInFuture}`); // You'll received a 202 in that case - - await delay(2000); - - updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails") - } - updatedJob = (updatedJobResponse.body as RouterJobOutput) - - console.log(`Updated job status: ${updatedJob.status == "closed"}`); -} - -function delay(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -quickStart().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Create.ts deleted file mode 100644 index 2ef9cc882b73..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Create.ts +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - QueueLengthExceptionTrigger -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router job -async function createRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - console.log("router job: " + result); -} - -createRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Delete.ts deleted file mode 100644 index 6ef5ac115e70..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router job -async function deleteRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).delete(); - - console.log("router job: " + result); -} - -deleteRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Get.ts deleted file mode 100644 index 96462330aeec..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router job - -async function getRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).get(); - - console.log("router job: " + result); -} - -getRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_List.ts deleted file mode 100644 index a4ac94a1eae5..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterJobs(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/jobs").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterJobs().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Update.ts deleted file mode 100644 index 1c2e1b042a08..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterJob_Update.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router job -async function updateRouterJob(): Promise { - // Create the JobRouter Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - console.log("router job: " + result); -} - -updateRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Create.ts deleted file mode 100644 index 561d6c626e28..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Create.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router jobQueue -async function createJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - console.log("router jobQueue: " + result); -} - -createJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Delete.ts deleted file mode 100644 index 26d57b1027ef..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router jobQueue -async function deleteJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "queue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).delete(); - - console.log("router jobQueue: " + result); -} - -deleteJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Get.ts deleted file mode 100644 index 086be0aca660..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue - -async function getJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_GetStatistics.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_GetStatistics.ts deleted file mode 100644 index 9a2b05e1b783..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_GetStatistics.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ - - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue's statistics - -async function getJobQueueStatistics(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}/statistics", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueueStatistics().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_List.ts deleted file mode 100644 index 2c0f5e441946..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listJobQueues(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/queues").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listJobQueues().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Update.ts deleted file mode 100644 index d15672edfcea..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterQueue_Update.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router jobQueue -async function updateJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - console.log("router jobQueue: " + result); -} - -updateJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Create.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Create.ts deleted file mode 100644 index 76114640cf7a..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Create.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router worker -async function createRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - "MainQueue", - "SecondaryQueue" - ], - labels: {}, - channels: [{ - channelId: "CustomChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - } - }) - - console.log("router worker: " + result); -} - -createRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Delete.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Delete.ts deleted file mode 100644 index e95fa8ca593c..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router" -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router worker -async function deleteRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).delete(); - - console.log("router worker: " + result); -} - -deleteRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Get.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Get.ts deleted file mode 100644 index 32c6da924dd2..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Get.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router worker -async function getRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).get(); - - console.log("router worker: " + result); -} - -getRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_List.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_List.ts deleted file mode 100644 index 48b13f8ab718..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterWorkers(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/queues").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterWorkers().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Update.ts b/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Update.ts deleted file mode 100644 index 1b5e79dfd903..000000000000 --- a/sdk/communication/communication-job-router-rest/samples-dev/RouterWorker_Update.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router worker -async function updateRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - "MainQueue", - "SecondaryQueue" - ], - labels: {}, - channels: [{ - channelId: "CustomChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - } - }) - console.log("router worker: " + result); -} - -updateRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Create.js deleted file mode 100644 index 5abd575782b6..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Create.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -const dotenv = require("dotenv"); -/** - * @summary Classification policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; - -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a classification policy -async function createClassificationPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [ - { - id: "MaxWaitTimeExceeded", - actions: [ - { - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }, - ], - trigger: queueLengthExceptionTrigger, - }, - ], - }, - }); - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" }, - }, - ], - workerSelectorAttachments: [ - { - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 }, - }, - ], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: 'If(job.department = "xbox", 2, 1)', - }, - }, - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - }, - }); - - const result = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - fallbackQueueId: "queue-123", - queueSelectorAttachments: [ - { - kind: "conditional", - queueSelectors: [ - { - key: "foo", - labelOperator: "equal", - value: { default: 10 }, - }, - ], - condition: { - kind: "direct-map-rule", - }, - }, - ], - prioritizationRule: { - kind: "static-rule", - value: { default: 2 }, - }, - }, - }); - - console.log("classification policy: " + result); -} - -void createClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Delete.js deleted file mode 100644 index 71f33b626920..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Delete.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete classification policy -async function deleteClassificationPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", policyId) - .delete(); - - console.log("classification policy: " + result); -} - -deleteClassificationPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Get.js deleted file mode 100644 index 2c953bfa8ca7..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Get.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a classification policy - -async function getClassificationPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", policyId) - .get(); - - console.log("classification policy: " + result); -} - -void getClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_List.js deleted file mode 100644 index 85061a8aa1b7..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_List.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default, - { paginate } = require("@azure-rest/communication-job-router"); -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List classification policies -async function listClassificationPolicies() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - // let pagesCount = 1; - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/classificationPolicies") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listClassificationPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Update.js deleted file mode 100644 index d9a024ba8f10..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Update.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a classification policy -async function updateClassificationPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - const result = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" }, - }, - ], - workerSelectorAttachments: [ - { - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 }, - }, - ], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: 'If(job.department = "xbox", 2, 1)', - }, - }, - }); - - console.log("classification policy: " + result); -} - -void updateClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Create.js deleted file mode 100644 index fa0b465eba29..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Create.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an distribution policy -async function createDistributionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", id) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - console.log("distribution policy: " + result); -} - -createDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Delete.js deleted file mode 100644 index 7bf75819aaf8..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Delete.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete distribution policy -async function deleteDistributionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", policyId) - .delete(); - - console.log("distribution policy: " + result); -} - -deleteDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Get.js deleted file mode 100644 index 2c078a6e5841..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Get.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a distribution policy - -async function getDistributionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", policyId) - .get(); - - console.log("distribution policy: " + result); -} - -getDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_List.js deleted file mode 100644 index 199c728f1041..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_List.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - -const { paginate } = require("@azure-rest/communication-job-router"); -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List distribution policies -async function listDistributionPolicies() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/distributionPolicies") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listDistributionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Update.js deleted file mode 100644 index a7b4a17a7021..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Update.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a distribution policy -async function updateDistributionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", id) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - console.log("distribution policy: " + result); -} - -updateDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Create.js deleted file mode 100644 index c7e8b9446b2a..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Create.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an exception policy -async function createExceptionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", id) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [ - { - id: "MaxWaitTimeExceeded", - actions: [ - { - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }, - ], - trigger: queueLengthExceptionTrigger, - }, - ], - }, - }); - - console.log("exception policy: " + result); -} - -createExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Delete.js deleted file mode 100644 index 19540a656d2f..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Delete.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete exception policy -async function deleteExceptionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId) - .delete(); - - console.log("exception policy: " + result); -} - -deleteExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Get.js deleted file mode 100644 index 1e8d7b941b66..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Get.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a exception policy - -async function getExceptionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId) - .get(); - - console.log("exception policy: " + result); -} - -getExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_List.js deleted file mode 100644 index 6cc4e8114fac..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_List.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - -const { paginate } = require("@azure-rest/communication-job-router"); -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listExceptionPolicies() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/exceptionPolicies") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listExceptionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Update.js deleted file mode 100644 index 393434debc4c..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Update.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a exception policy -async function updateExceptionPolicy() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", id) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [ - { - id: "MaxWaitTimeExceeded", - actions: [ - { - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }, - ], - trigger: queueLengthExceptionTrigger, - }, - ], - }, - }); - console.log("exception policy: " + result); -} - -updateExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/QuickStart.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/QuickStart.js deleted file mode 100644 index 1f7e192485b0..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/QuickStart.js +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Quick start workflow for creating queue, job and worker, routing/matching job with worker - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -async function quickStart() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - // Create a Distribution Policy - const distributionPolicyId = "distribution-policy-123"; - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - // Create a Queue - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - }, - }); - - // Create a Job - const jobId = "router-job-123"; - await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - }, - }); - - // Register a Worker - // Register a worker associated with the queue that was just created. We will assign labels to the - // worker to include all relevant information for example, skills, which will be used to determine - // whether a job can be offered to a worker or not. - const workerId = "router-worker-123"; - await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [queueId], - labels: {}, - channels: [ - { - channelId: "ChatChannel", - capacityCostPerJob: 10, - }, - { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100, - }, - ], - availableForOffers: true, - }, - }); - - await delay(5000); - // Check offers to a Worker - // Once the worker has been registered, Router will send an offer to the worker if the worker satisfies requirements - // for a job. See Offer flow https://docs.microsoft.com/azure/communication-services/concepts/router/concepts#offer - // - // We should get a RouterWorkerOfferIssued from our EventGrid subscription. - - // However, we could also wait a few seconds and then query the worker directly against the Job Router API to see if - // an offer was issued to it. - const workerResponse = await routerClient.path("/routing/workers/{workerId}", workerId).get(); - if (workerResponse.status !== "200") { - throw new Error("get works fails"); - } - const workerResult = workerResponse.body; - - for await (let offer of workerResult.offers) { - console.log(`Worker ${workerId} has an active offer for job ${offer.jobId}`); - } - - // Accepting an offer - // Once a worker receives an offer, it can take two possible actions: accept or decline. We are going to accept the offer. - // fetching the offer id - const jobOffer = workerResult.offers[0]; - - const offerId = jobOffer.offerId; // `OfferId` can be retrieved directly from consuming event from Event grid - - // accepting the offer sent to `worker-1` - const acceptJobOfferResponse = await routerClient - .path("/routing/workers/{workerId}/offers/{offerId}:accept", workerId, offerId) - .post(); - if (acceptJobOfferResponse.status !== "200") { - throw new Error("accept job offer fails"); - } - const acceptJobOfferResult = acceptJobOfferResponse.body; - - console.log(`Offer: ${jobOffer.offerId} sent to worker: ${workerId} has been accepted`); - console.log( - `Job has been assigned to worker: ${workerId} with assignment: ${acceptJobOfferResult.assignmentId}`, - ); - - // verify job assignment is populated when querying job - let updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails"); - } - let updatedJob = updatedJobResponse.body; - - console.log(`Job assignment has been successful: - ${ - updatedJob.status == "assigned" && - updatedJob.assignments.hasOwnProperty(acceptJobOfferResult.assignmentId) - }`); - - // Completing a job - // Once the worker is done with the job, the worker has to mark the job as `completed`. - const completeJob = await routerClient - .path( - "/routing/jobs/{jobId}/assignments/{assignmentId}:complete", - jobId, - acceptJobOfferResult.assignmentId, - ) - .post({ - body: { - note: `Job has been completed by ${workerId} at ${new Date()}`, - }, - }); - - console.log(`Job has been successfully completed: ${completeJob}`); - - // Closing a job - // After a job has been completed, the worker can perform wrap up actions to the job before closing the job and finally - // releasing its capacity to accept more incoming jobs - const closeJob = await routerClient - .path( - "/routing/jobs/{jobId}/assignments/{assignmentId}:close", - jobId, - acceptJobOfferResult.assignmentId, - ) - .post({ - body: { - note: `Job has been closed by ${workerId} at ${new Date()}`, - }, - }); - console.log(`Job has been successfully closed: ${closeJob}`); - - // Optionally, a job can also be set up to be marked as closed in the future. - const afterTwoSeconds = new Date(); - afterTwoSeconds.setSeconds(afterTwoSeconds.getSeconds() + 2); - const closeJobInFuture = await routerClient - .path( - "/routing/jobs/{jobId}/assignments/{assignmentId}:close", - jobId, - acceptJobOfferResult.assignmentId, - ) - .post({ - body: { - closeAt: afterTwoSeconds, - note: `Job has been marked to close in the future by ${workerId} at ${afterTwoSeconds}`, - }, - }); - console.log(`Job has been marked to close: ${closeJobInFuture}`); // You'll received a 202 in that case - - await delay(2000); - - updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails"); - } - updatedJob = updatedJobResponse.body; - - console.log(`Updated job status: ${updatedJob.status == "closed"}`); -} - -function delay(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -quickStart().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/README.md b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/README.md deleted file mode 100644 index 407ddcb3a1df..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/README.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -page_type: sample -languages: - - javascript -products: - - azure - - azure-communication-services -urlFragment: communication-job-router-javascript-beta ---- - -# Azure client library for Azure Communication Job Router services client library samples for JavaScript (Beta) - -These sample programs show how to use the JavaScript client libraries for Azure client library for Azure Communication Job Router services in some common scenarios. - -| **File Name** | **Description** | -| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| [ClassificationPolicy_Create.js][classificationpolicy_create] | Classification policy crud | -| [ClassificationPolicy_Delete.js][classificationpolicy_delete] | Classification policy crud | -| [ClassificationPolicy_Get.js][classificationpolicy_get] | Classification policy crud | -| [ClassificationPolicy_List.js][classificationpolicy_list] | Classification policy crud | -| [ClassificationPolicy_Update.js][classificationpolicy_update] | Classification policy crud | -| [DistributionPolicy_Create.js][distributionpolicy_create] | Distribution policy crud | -| [DistributionPolicy_Delete.js][distributionpolicy_delete] | Distribution policy crud | -| [DistributionPolicy_Get.js][distributionpolicy_get] | Distribution policy crud | -| [DistributionPolicy_List.js][distributionpolicy_list] | Distribution policy crud | -| [DistributionPolicy_Update.js][distributionpolicy_update] | Distribution policy crud | -| [ExceptionPolicy_Create.js][exceptionpolicy_create] | Exception policy crud | -| [ExceptionPolicy_Delete.js][exceptionpolicy_delete] | Exception policy crud | -| [ExceptionPolicy_Get.js][exceptionpolicy_get] | Exception policy crud | -| [ExceptionPolicy_List.js][exceptionpolicy_list] | Exception policy crud | -| [ExceptionPolicy_Update.js][exceptionpolicy_update] | Exception policy crud | -| [QuickStart.js][quickstart] | Quick start workflow for creating queue, job and worker, routing/matching job with worker | -| [RouterJob_Create.js][routerjob_create] | router job crud | -| [RouterJob_Delete.js][routerjob_delete] | router job crud | -| [RouterJob_Get.js][routerjob_get] | router job crud | -| [RouterJob_List.js][routerjob_list] | router job crud | -| [RouterJob_Update.js][routerjob_update] | router job crud | -| [RouterQueue_Create.js][routerqueue_create] | job queue crud | -| [RouterQueue_Delete.js][routerqueue_delete] | job queue crud | -| [RouterQueue_Get.js][routerqueue_get] | job queue crud | -| [RouterQueue_GetStatistics.js][routerqueue_getstatistics] | job queue crud | -| [RouterQueue_List.js][routerqueue_list] | job queue crud | -| [RouterQueue_Update.js][routerqueue_update] | job queue crud | -| [RouterWorker_Create.js][routerworker_create] | router worker crud | -| [RouterWorker_Delete.js][routerworker_delete] | router worker crud | -| [RouterWorker_Get.js][routerworker_get] | router worker crud | -| [RouterWorker_List.js][routerworker_list] | router worker crud | -| [RouterWorker_Update.js][routerworker_update] | router worker crud | - -## 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 ClassificationPolicy_Create.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 COMMUNICATION_CONNECTION_STRING="" node ClassificationPolicy_Create.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[classificationpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Create.js -[classificationpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Delete.js -[classificationpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Get.js -[classificationpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_List.js -[classificationpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ClassificationPolicy_Update.js -[distributionpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Create.js -[distributionpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Delete.js -[distributionpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Get.js -[distributionpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_List.js -[distributionpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/DistributionPolicy_Update.js -[exceptionpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Create.js -[exceptionpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Delete.js -[exceptionpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Get.js -[exceptionpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_List.js -[exceptionpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/ExceptionPolicy_Update.js -[quickstart]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/QuickStart.js -[routerjob_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Create.js -[routerjob_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Delete.js -[routerjob_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Get.js -[routerjob_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_List.js -[routerjob_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Update.js -[routerqueue_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Create.js -[routerqueue_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Delete.js -[routerqueue_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Get.js -[routerqueue_getstatistics]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_GetStatistics.js -[routerqueue_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_List.js -[routerqueue_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Update.js -[routerworker_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Create.js -[routerworker_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Delete.js -[routerworker_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Get.js -[routerworker_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_List.js -[routerworker_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Update.js -[apiref]: https://docs.microsoft.com/javascript/api/@azure/communication-job-router -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-job-router-rest/README.md diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Create.js deleted file mode 100644 index 7e09ad55c952..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Create.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router job -async function createRouterJob() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [ - { - id: "MaxWaitTimeExceeded", - actions: [ - { - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }, - ], - trigger: queueLengthExceptionTrigger, - }, - ], - }, - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - }, - }); - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - }, - }); - - console.log("router job: " + result); -} - -createRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Delete.js deleted file mode 100644 index 37b4dc296348..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Delete.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router job -async function deleteRouterJob() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).delete(); - - console.log("router job: " + result); -} - -deleteRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Get.js deleted file mode 100644 index 3081917bbc1e..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Get.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router job - -async function getRouterJob() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).get(); - - console.log("router job: " + result); -} - -getRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_List.js deleted file mode 100644 index 849eaef5171d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_List.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default, - { paginate } = require("@azure-rest/communication-job-router"); -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterJobs() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/jobs") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterJobs().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Update.js deleted file mode 100644 index 8384e5d0741a..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterJob_Update.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router job -async function updateRouterJob() { - // Create the JobRouter Client - const routerClient = JobRouter(connectionString); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - }, - }); - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - }, - }); - - console.log("router job: " + result); -} - -updateRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Create.js deleted file mode 100644 index 6ad3c4ab33f6..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Create.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router jobQueue -async function createJobQueue() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - }, - }); - - console.log("router jobQueue: " + result); -} - -createJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Delete.js deleted file mode 100644 index e28a32e3a749..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Delete.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router jobQueue -async function deleteJobQueue() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "queue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).delete(); - - console.log("router jobQueue: " + result); -} - -deleteJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Get.js deleted file mode 100644 index 9a30c08111cf..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Get.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue - -async function getJobQueue() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_GetStatistics.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_GetStatistics.js deleted file mode 100644 index 73df2cd1f5b7..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_GetStatistics.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ - -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue's statistics - -async function getJobQueueStatistics() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}/statistics", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueueStatistics().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_List.js deleted file mode 100644 index 3a75ea593e41..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_List.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default, - { paginate } = require("@azure-rest/communication-job-router"); -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listJobQueues() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/queues") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listJobQueues().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Update.js deleted file mode 100644 index 04c9960289aa..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterQueue_Update.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router jobQueue -async function updateJobQueue() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - }, - }); - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - }, - }); - - console.log("router jobQueue: " + result); -} - -updateJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Create.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Create.js deleted file mode 100644 index 9035b810b6da..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Create.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router worker -async function createRouterWorker() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: ["MainQueue", "SecondaryQueue"], - labels: {}, - channels: [ - { - channelId: "CustomChatChannel", - capacityCostPerJob: 10, - }, - { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100, - }, - ], - }, - }); - - console.log("router worker: " + result); -} - -createRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Delete.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Delete.js deleted file mode 100644 index 8fd74c24779e..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Delete.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router worker -async function deleteRouterWorker() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).delete(); - - console.log("router worker: " + result); -} - -deleteRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Get.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Get.js deleted file mode 100644 index 03a69906185c..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Get.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router worker -async function getRouterWorker() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).get(); - - console.log("router worker: " + result); -} - -getRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_List.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_List.js deleted file mode 100644 index 2f00526c8935..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_List.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default, - { paginate } = require("@azure-rest/communication-job-router"); -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterWorkers() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient - .path("/routing/queues") - .get({ queryParameters: { maxpagesize: maxPageSize } }); - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterWorkers().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Update.js b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Update.js deleted file mode 100644 index d08e7a526ed8..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/RouterWorker_Update.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -const JobRouter = require("@azure-rest/communication-job-router").default; -require("dotenv").config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router worker -async function updateRouterWorker() { - // Create the Router Client - const routerClient = JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: ["MainQueue", "SecondaryQueue"], - labels: {}, - channels: [ - { - channelId: "CustomChatChannel", - capacityCostPerJob: 10, - }, - { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100, - }, - ], - }, - }); - console.log("router worker: " + result); -} - -updateRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/package.json b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/package.json deleted file mode 100644 index 303547aa1a4b..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@azure-samples/communication-job-router-js-beta", - "private": true, - "version": "1.0.0", - "description": "Azure client library for Azure Communication Job Router services 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/communication/communication-job-router-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/communication/communication-job-router-rest", - "dependencies": { - "@azure-rest/communication-job-router": "next", - "dotenv": "latest" - } -} diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/sample.env b/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/sample.env deleted file mode 100644 index 64e43f31bba2..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/javascript/sample.env +++ /dev/null @@ -1,3 +0,0 @@ -# Used in most samples. Retrieve these values from a Communication Services instance -# in the Azure Portal. -COMMUNICATION_CONNECTION_STRING="endpoint=https://.communication.azure.net/;accessKey=" diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/README.md b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/README.md deleted file mode 100644 index a35c31fc3dfa..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/README.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -page_type: sample -languages: - - typescript -products: - - azure - - azure-communication-services -urlFragment: communication-job-router-typescript-beta ---- - -# Azure client library for Azure Communication Job Router services client library samples for TypeScript (Beta) - -These sample programs show how to use the TypeScript client libraries for Azure client library for Azure Communication Job Router services in some common scenarios. - -| **File Name** | **Description** | -| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| [ClassificationPolicy_Create.ts][classificationpolicy_create] | Classification policy crud | -| [ClassificationPolicy_Delete.ts][classificationpolicy_delete] | Classification policy crud | -| [ClassificationPolicy_Get.ts][classificationpolicy_get] | Classification policy crud | -| [ClassificationPolicy_List.ts][classificationpolicy_list] | Classification policy crud | -| [ClassificationPolicy_Update.ts][classificationpolicy_update] | Classification policy crud | -| [DistributionPolicy_Create.ts][distributionpolicy_create] | Distribution policy crud | -| [DistributionPolicy_Delete.ts][distributionpolicy_delete] | Distribution policy crud | -| [DistributionPolicy_Get.ts][distributionpolicy_get] | Distribution policy crud | -| [DistributionPolicy_List.ts][distributionpolicy_list] | Distribution policy crud | -| [DistributionPolicy_Update.ts][distributionpolicy_update] | Distribution policy crud | -| [ExceptionPolicy_Create.ts][exceptionpolicy_create] | Exception policy crud | -| [ExceptionPolicy_Delete.ts][exceptionpolicy_delete] | Exception policy crud | -| [ExceptionPolicy_Get.ts][exceptionpolicy_get] | Exception policy crud | -| [ExceptionPolicy_List.ts][exceptionpolicy_list] | Exception policy crud | -| [ExceptionPolicy_Update.ts][exceptionpolicy_update] | Exception policy crud | -| [QuickStart.ts][quickstart] | Quick start workflow for creating queue, job and worker, routing/matching job with worker | -| [RouterJob_Create.ts][routerjob_create] | router job crud | -| [RouterJob_Delete.ts][routerjob_delete] | router job crud | -| [RouterJob_Get.ts][routerjob_get] | router job crud | -| [RouterJob_List.ts][routerjob_list] | router job crud | -| [RouterJob_Update.ts][routerjob_update] | router job crud | -| [RouterQueue_Create.ts][routerqueue_create] | job queue crud | -| [RouterQueue_Delete.ts][routerqueue_delete] | job queue crud | -| [RouterQueue_Get.ts][routerqueue_get] | job queue crud | -| [RouterQueue_GetStatistics.ts][routerqueue_getstatistics] | job queue crud | -| [RouterQueue_List.ts][routerqueue_list] | job queue crud | -| [RouterQueue_Update.ts][routerqueue_update] | job queue crud | -| [RouterWorker_Create.ts][routerworker_create] | router worker crud | -| [RouterWorker_Delete.ts][routerworker_delete] | router worker crud | -| [RouterWorker_Get.ts][routerworker_get] | router worker crud | -| [RouterWorker_List.ts][routerworker_list] | router worker crud | -| [RouterWorker_Update.ts][routerworker_update] | router worker crud | - -## 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/ClassificationPolicy_Create.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 COMMUNICATION_CONNECTION_STRING="" node dist/ClassificationPolicy_Create.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[classificationpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Create.ts -[classificationpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Delete.ts -[classificationpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Get.ts -[classificationpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_List.ts -[classificationpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Update.ts -[distributionpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Create.ts -[distributionpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Delete.ts -[distributionpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Get.ts -[distributionpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_List.ts -[distributionpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Update.ts -[exceptionpolicy_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Create.ts -[exceptionpolicy_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Delete.ts -[exceptionpolicy_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Get.ts -[exceptionpolicy_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_List.ts -[exceptionpolicy_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Update.ts -[quickstart]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/QuickStart.ts -[routerjob_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Create.ts -[routerjob_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Delete.ts -[routerjob_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Get.ts -[routerjob_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_List.ts -[routerjob_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Update.ts -[routerqueue_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Create.ts -[routerqueue_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Delete.ts -[routerqueue_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Get.ts -[routerqueue_getstatistics]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_GetStatistics.ts -[routerqueue_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_List.ts -[routerqueue_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Update.ts -[routerworker_create]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Create.ts -[routerworker_delete]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Delete.ts -[routerworker_get]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Get.ts -[routerworker_list]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_List.ts -[routerworker_update]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Update.ts -[apiref]: https://docs.microsoft.com/javascript/api/@azure/communication-job-router -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-job-router-rest/README.md -[typescript]: https://www.typescriptlang.org/docs/home.html diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/package.json b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/package.json deleted file mode 100644 index 7c2c96e89dd9..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@azure-samples/communication-job-router-ts-beta", - "private": true, - "version": "1.0.0", - "description": "Azure client library for Azure Communication Job Router services 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/communication/communication-job-router-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/communication/communication-job-router-rest", - "dependencies": { - "@azure-rest/communication-job-router": "next", - "dotenv": "latest" - }, - "devDependencies": { - "@types/node": "^18.0.0", - "typescript": "~5.5.3", - "rimraf": "latest" - } -} diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/sample.env b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/sample.env deleted file mode 100644 index 64e43f31bba2..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/sample.env +++ /dev/null @@ -1,3 +0,0 @@ -# Used in most samples. Retrieve these values from a Communication Services instance -# in the Azure Portal. -COMMUNICATION_CONNECTION_STRING="endpoint=https://.communication.azure.net/;accessKey=" diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Create.ts deleted file mode 100644 index 292624380656..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Create.ts +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import * as dotenv from "dotenv"; -/** - * @summary Classification policy crud - */ -import JobRouter, { - QueueLengthExceptionTrigger, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; - -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a classification policy -async function createClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }) - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" } - }, - ], - workerSelectorAttachments: [{ - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 } - }], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: "If(job.department = \"xbox\", 2, 1)" - } - } - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - fallbackQueueId: "queue-123", - queueSelectorAttachments: [ - { - kind: "conditional", - queueSelectors: [{ - key: "foo", - labelOperator: "equal", - value: { default: 10 }, - }], - condition: { - kind: "direct-map-rule" - } - }, - ], - prioritizationRule: { - kind: "static-rule", - value: { default: 2 }, - }, - } - }); - - console.log("classification policy: " + result); -} - -void createClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Delete.ts deleted file mode 100644 index e685fafcc21e..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Delete.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete classification policy -async function deleteClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", policyId).delete(); - - console.log("classification policy: " + result); -} - -deleteClassificationPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Get.ts deleted file mode 100644 index 2e593305e545..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Get.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a classification policy - -async function getClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "classification-policy-123"; - - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", policyId).get(); - - console.log("classification policy: " + result); -} - -void getClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_List.ts deleted file mode 100644 index 35add20dfba1..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_List.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List classification policies -async function listClassificationPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // let pagesCount = 1; - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/classificationPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } - -} - -listClassificationPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Update.ts deleted file mode 100644 index 2639fabc16e3..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ClassificationPolicy_Update.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * @summary Classification policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a classification policy -async function updateClassificationPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const classificationPolicyId = "classification-policy-123"; - const salesQueueId = "queue-123"; - const result = await routerClient.path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "Default Classification Policy", - fallbackQueueId: salesQueueId, - queueSelectorAttachments: [ - { - kind: "static", - queueSelector: { key: "department", labelOperator: "equal", value: "xbox" } - }, - ], - workerSelectorAttachments: [{ - kind: "static", - workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 } - }], - prioritizationRule: { - kind: "expression-rule", - language: "powerFx", - expression: "If(job.department = \"xbox\", 2, 1)" - } - } - }); - - console.log("classification policy: " + result); -} - -void updateClassificationPolicy(); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Create.ts deleted file mode 100644 index 4b2642f2609d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Create.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an distribution policy -async function createDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - console.log("distribution policy: " + result); -} - -createDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Delete.ts deleted file mode 100644 index eb29349c0bcd..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Delete.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete distribution policy -async function deleteDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", policyId).delete(); - - console.log("distribution policy: " + result); -} - -deleteDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Get.ts deleted file mode 100644 index fb274ccfc6b6..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Get.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a distribution policy - -async function getDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "distribution-policy-123"; - - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", policyId).get(); - - console.log("distribution policy: " + result); -} - -getDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_List.ts deleted file mode 100644 index 5fd95065937d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_List.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List distribution policies -async function listDistributionPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/distributionPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listDistributionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Update.ts deleted file mode 100644 index c65935dc048f..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/DistributionPolicy_Update.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Distribution policy crud - */ - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a distribution policy -async function updateDistributionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "distribution-policy-123"; - const result = await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - console.log("distribution policy: " + result); -} - -updateDistributionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Create.ts deleted file mode 100644 index af77e7bae8f8..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Create.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - QueueLengthExceptionTrigger -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create an exception policy -async function createExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - - console.log("exception policy: " + result); -} - -createExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Delete.ts deleted file mode 100644 index aed2576f2323..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete exception policy -async function deleteExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId).delete(); - - console.log("exception policy: " + result); -} - -deleteExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Get.ts deleted file mode 100644 index b461493de375..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a exception policy - -async function getExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const policyId = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", policyId).get(); - - console.log("exception policy: " + result); -} - -getExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_List.ts deleted file mode 100644 index f355e290b1ed..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_List.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - - - -import JobRouter, { - AzureCommunicationRoutingServiceClient, - paginate -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listExceptionPolicies(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/exceptionPolicies").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listExceptionPolicies().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Update.ts deleted file mode 100644 index e5e8f8ac1849..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/ExceptionPolicy_Update.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Exception policy crud - */ - -import JobRouter, { - QueueLengthExceptionTrigger, - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a exception policy -async function updateExceptionPolicy(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 10, - }; - - const id = "exception-policy-123"; - - const result = await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - console.log("exception policy: " + result); -} - -updateExceptionPolicy().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/QuickStart.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/QuickStart.ts deleted file mode 100644 index 3116d360863d..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/QuickStart.ts +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary Quick start workflow for creating queue, job and worker, routing/matching job with worker - */ -import JobRouter, { - RouterWorkerOutput, - AzureCommunicationRoutingServiceClient, - AcceptJobOfferResultOutput, - RouterJobOutput -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -async function quickStart(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - // Create a Distribution Policy - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // Create a Queue - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - // Create a Job - const jobId = "router-job-123"; - await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - // Register a Worker - // Register a worker associated with the queue that was just created. We will assign labels to the - // worker to include all relevant information for example, skills, which will be used to determine - // whether a job can be offered to a worker or not. - const workerId = "router-worker-123" - await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - queueId - ], - labels: {}, - channels: [{ - channelId: "ChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - availableForOffers: true - } - }) - - await delay(5000); - // Check offers to a Worker - // Once the worker has been registered, Router will send an offer to the worker if the worker satisfies requirements - // for a job. See Offer flow https://docs.microsoft.com/azure/communication-services/concepts/router/concepts#offer - // - // We should get a RouterWorkerOfferIssued from our EventGrid subscription. - - // However, we could also wait a few seconds and then query the worker directly against the Job Router API to see if - // an offer was issued to it. - const workerResponse = await routerClient.path("/routing/workers/{workerId}", workerId).get(); - if (workerResponse.status !== "200") { - throw new Error("get works fails") - } - const workerResult = (workerResponse.body as RouterWorkerOutput) - - for await (let offer of workerResult.offers!) { - console.log(`Worker ${workerId} has an active offer for job ${offer.jobId}`); - } - - - // Accepting an offer - // Once a worker receives an offer, it can take two possible actions: accept or decline. We are going to accept the offer. - // fetching the offer id - const jobOffer = workerResult.offers![0]; - - const offerId = jobOffer.offerId; // `OfferId` can be retrieved directly from consuming event from Event grid - - // accepting the offer sent to `worker-1` - const acceptJobOfferResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:accept", workerId, offerId).post() - if (acceptJobOfferResponse.status !== "200") { - throw new Error("accept job offer fails") - } - const acceptJobOfferResult = (acceptJobOfferResponse.body as AcceptJobOfferResultOutput) - - console.log(`Offer: ${jobOffer.offerId} sent to worker: ${workerId} has been accepted`); - console.log( - `Job has been assigned to worker: ${workerId} with assignment: ${acceptJobOfferResult.assignmentId}` - ); - - // verify job assignment is populated when querying job - let updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails") - } - let updatedJob = (updatedJobResponse.body as RouterJobOutput) - - - console.log(`Job assignment has been successful: - ${updatedJob.status == "assigned" && - updatedJob.assignments!.hasOwnProperty(acceptJobOfferResult.assignmentId) - }`); - - // Completing a job - // Once the worker is done with the job, the worker has to mark the job as `completed`. - const completeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - note: `Job has been completed by ${workerId} at ${new Date()}` - } - }) - - console.log(`Job has been successfully completed: ${completeJob}`); - - // Closing a job - // After a job has been completed, the worker can perform wrap up actions to the job before closing the job and finally - // releasing its capacity to accept more incoming jobs - const closeJob = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - note: `Job has been closed by ${workerId} at ${new Date()}` - } - }) - console.log(`Job has been successfully closed: ${closeJob}`); - - // Optionally, a job can also be set up to be marked as closed in the future. - const afterTwoSeconds = new Date(); - afterTwoSeconds.setSeconds(afterTwoSeconds.getSeconds() + 2); - const closeJobInFuture = await routerClient.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", jobId, acceptJobOfferResult.assignmentId).post({ - body: { - closeAt: afterTwoSeconds, - note: `Job has been marked to close in the future by ${workerId} at ${afterTwoSeconds}` - } - }) - console.log(`Job has been marked to close: ${closeJobInFuture}`); // You'll received a 202 in that case - - await delay(2000); - - updatedJobResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (updatedJobResponse.status !== "200") { - throw new Error("get job fails") - } - updatedJob = (updatedJobResponse.body as RouterJobOutput) - - console.log(`Updated job status: ${updatedJob.status == "closed"}`); -} - -function delay(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -quickStart().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Create.ts deleted file mode 100644 index 2ef9cc882b73..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Create.ts +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, - QueueLengthExceptionTrigger -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router job -async function createRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - // define exception trigger for queue over flow - const queueLengthExceptionTrigger: QueueLengthExceptionTrigger = { - kind: "queue-length", - threshold: 100, - }; - - const exceptionPolicyId = "exception-policy-123"; - await routerClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "test-policy", - exceptionRules: [{ - id: "MaxWaitTimeExceeded", - actions: [{ - kind: "reclassify", - classificationPolicyId: "Main", - labelsToUpsert: { - escalated: true, - }, - }], - trigger: queueLengthExceptionTrigger, - }] - } - }); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - console.log("router job: " + result); -} - -createRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Delete.ts deleted file mode 100644 index 6ef5ac115e70..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router job -async function deleteRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).delete(); - - console.log("router job: " + result); -} - -deleteRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Get.ts deleted file mode 100644 index 96462330aeec..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router job - -async function getRouterJob(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-job-123"; - - const result = await routerClient.path("/routing/jobs/{jobId}", entityId).get(); - - console.log("router job: " + result); -} - -getRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_List.ts deleted file mode 100644 index a4ac94a1eae5..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterJobs(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/jobs").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterJobs().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Update.ts deleted file mode 100644 index 1c2e1b042a08..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterJob_Update.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router job crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router job -async function updateRouterJob(): Promise { - // Create the JobRouter Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const queueId = "queue-123"; - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: "distribution-policy-123", - name: "Main", - labels: {}, - exceptionPolicyId: "exception-policy-123", - } - }) - - const jobId = "router-job-123"; - const result = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: { - channelId: "ChatChannel", - queueId: queueId, - channelReference: "abc", - priority: 2, - labels: {}, - } - }) - - console.log("router job: " + result); -} - -updateRouterJob().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Create.ts deleted file mode 100644 index 561d6c626e28..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Create.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient, -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router jobQueue -async function createJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - console.log("router jobQueue: " + result); -} - -createJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Delete.ts deleted file mode 100644 index 26d57b1027ef..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router jobQueue -async function deleteJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "queue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).delete(); - - console.log("router jobQueue: " + result); -} - -deleteJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Get.ts deleted file mode 100644 index 086be0aca660..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Get.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue - -async function getJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_GetStatistics.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_GetStatistics.ts deleted file mode 100644 index 9a2b05e1b783..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_GetStatistics.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ - - - -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router jobQueue's statistics - -async function getJobQueueStatistics(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-jobQueue-123"; - - const result = await routerClient.path("/routing/queues/{queueId}/statistics", entityId).get(); - - console.log("router jobQueue: " + result); -} - -getJobQueueStatistics().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_List.ts deleted file mode 100644 index 2c0f5e441946..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listJobQueues(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/queues").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listJobQueues().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Update.ts deleted file mode 100644 index d15672edfcea..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterQueue_Update.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary job queue crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router jobQueue -async function updateJobQueue(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const distributionPolicyId = "distribution-policy-123"; - await routerClient.path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId).patch({ - contentType: "application/merge-patch+json", - body: { - name: "distribution-policy-123", - mode: { - kind: "longest-idle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - offerExpiresAfterSeconds: 120, - } - }) - - const queueId = "queue-123"; - const result = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: { - distributionPolicyId: distributionPolicyId, - name: "Main", - } - }) - - console.log("router jobQueue: " + result); -} - -updateJobQueue().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Create.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Create.ts deleted file mode 100644 index 76114640cf7a..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Create.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Create a router worker -async function createRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - "MainQueue", - "SecondaryQueue" - ], - labels: {}, - channels: [{ - channelId: "CustomChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - } - }) - - console.log("router worker: " + result); -} - -createRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Delete.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Delete.ts deleted file mode 100644 index e95fa8ca593c..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Delete.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router" -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Delete router worker -async function deleteRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).delete(); - - console.log("router worker: " + result); -} - -deleteRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Get.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Get.ts deleted file mode 100644 index 32c6da924dd2..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Get.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Get a router worker -async function getRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const entityId = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", entityId).get(); - - console.log("router worker: " + result); -} - -getRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_List.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_List.ts deleted file mode 100644 index 48b13f8ab718..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_List.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - paginate, - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// List exception policies -async function listRouterWorkers(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const maxPageSize = 3; - // Get the first page which also contains information on how to get the next page. - const initialResponse = await routerClient.path("/routing/queues").get({ queryParameters: { maxpagesize: maxPageSize } }) - - if (initialResponse.status == "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, initialResponse); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - console.log(item); - } - } -} - -listRouterWorkers().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Update.ts b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Update.ts deleted file mode 100644 index 1b5e79dfd903..000000000000 --- a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/src/RouterWorker_Update.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * @summary router worker crud - */ -import JobRouter, { - AzureCommunicationRoutingServiceClient -} from "@azure-rest/communication-job-router"; -import * as dotenv from "dotenv"; -dotenv.config(); - -const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || ""; - -// Update a router worker -async function updateRouterWorker(): Promise { - // Create the Router Client - const routerClient: AzureCommunicationRoutingServiceClient = - JobRouter(connectionString); - - const id = "router-worker-123"; - - const result = await routerClient.path("/routing/workers/{workerId}", id).patch({ - contentType: "application/merge-patch+json", - body: { - capacity: 100, - queues: [ - "MainQueue", - "SecondaryQueue" - ], - labels: {}, - channels: [{ - channelId: "CustomChatChannel", - capacityCostPerJob: 10 - }, { - channelId: "CustomVoiceChannel", - capacityCostPerJob: 100 - }], - } - }) - console.log("router worker: " + result); -} - -updateRouterWorker().catch(console.error); diff --git a/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/tsconfig.json b/sdk/communication/communication-job-router-rest/samples/v1-beta/typescript/tsconfig.json deleted file mode 100644 index 984eed535aa8..000000000000 --- a/sdk/communication/communication-job-router-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/communication/communication-job-router-rest/src/azureCommunicationRoutingServiceClient.ts b/sdk/communication/communication-job-router-rest/src/azureCommunicationRoutingServiceClient.ts index 775b9684791c..0e63db32b549 100644 --- a/sdk/communication/communication-job-router-rest/src/azureCommunicationRoutingServiceClient.ts +++ b/sdk/communication/communication-job-router-rest/src/azureCommunicationRoutingServiceClient.ts @@ -2,66 +2,33 @@ // Licensed under the MIT license. import { getClient, ClientOptions } from "@azure-rest/core-client"; -import { isTokenCredential, KeyCredential, TokenCredential } from "@azure/core-auth"; -import { logger } from "./logger"; -import { AzureCommunicationRoutingServiceClient } from "./clientDefinitions"; -import { - createCommunicationAuthPolicy, - isKeyCredential, - parseClientArguments, -} from "@azure/communication-common"; +import { logger } from "./logger.js"; +import { AzureCommunicationRoutingServiceClient } from "./clientDefinitions.js"; -/** - * Initialize a new instance of `AzureCommunicationRoutingServiceClient` - * @param connectionString - The connectionString or url of your Communication Services resource. - * @param options - the parameter for all optional parameters - */ -export default function createClient( - connectionString: string, - options: ClientOptions, -): AzureCommunicationRoutingServiceClient; +/** The optional parameters for the client */ +export interface AzureCommunicationRoutingServiceClientOptions + extends ClientOptions { + /** The api version option of the client */ + apiVersion?: string; +} /** * Initialize a new instance of `AzureCommunicationRoutingServiceClient` - * @param endpoint - Uri of your Communication resource - * @param credentialOrOptions The key or token credential. + * @param endpointParam - Uri of your Communication resource * @param options - the parameter for all optional parameters */ export default function createClient( - endpoint: string, - credentialOrOptions?: KeyCredential | TokenCredential, - options?: ClientOptions, -): AzureCommunicationRoutingServiceClient; - -// Implementation -export default function createClient( - arg1: string, - arg2?: ClientOptions | (KeyCredential | TokenCredential), - arg3?: ClientOptions, + endpointParam: string, + { + apiVersion = "2024-01-18-preview", + ...options + }: AzureCommunicationRoutingServiceClientOptions = {}, ): AzureCommunicationRoutingServiceClient { - let credentialOrOptions: KeyCredential | TokenCredential | undefined; - let options: ClientOptions | undefined; - const connectionStringOrUrl = arg1; - - // Determine which constructor is being called based on the types of the arguments - if (isTokenCredential(arg2) || isKeyCredential(arg2)) { - credentialOrOptions = arg2 as KeyCredential | TokenCredential; - options = arg3 as ClientOptions; - } else { - options = arg2 as ClientOptions; - } - if (options === undefined) { - options = {}; - } - - // Rest of the function remains the same, using connectionStringOrUrl or endpoint as needed - const { url, credential } = parseClientArguments(connectionStringOrUrl, credentialOrOptions); - const baseUrl = options?.baseUrl ?? `${url}`; - options.apiVersion = options.apiVersion ?? "2024-01-18-preview"; - const userAgentInfo = `azsdk-js-communication-job-router-rest/1.1.0-beta.2`; + const endpointUrl = options.endpoint ?? options.baseUrl ?? `${endpointParam}`; + const userAgentInfo = `azsdk-js-communication-job-router-rest/1.0.0-beta.1`; const userAgentPrefix = - options?.userAgentOptions && options?.userAgentOptions.userAgentPrefix - ? `${options?.userAgentOptions.userAgentPrefix} ${userAgentInfo}` + options.userAgentOptions && options.userAgentOptions.userAgentPrefix + ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}` : `${userAgentInfo}`; options = { ...options, @@ -69,14 +36,30 @@ export default function createClient( userAgentPrefix, }, loggingOptions: { - logger: options?.loggingOptions?.logger ?? logger.info, + logger: options.loggingOptions?.logger ?? logger.info, }, }; + const client = getClient( + endpointUrl, + options, + ) as AzureCommunicationRoutingServiceClient; - const client = getClient(baseUrl, options) as AzureCommunicationRoutingServiceClient; + client.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + client.pipeline.addPolicy({ + name: "ClientApiVersionPolicy", + sendRequest: (req, next) => { + // Use the apiVersion defined in request url directly + // Append one if there is no apiVersion and we have one at client options + const url = new URL(req.url); + if (!url.searchParams.get("api-version") && apiVersion) { + req.url = `${req.url}${ + Array.from(url.searchParams.keys()).length > 0 ? "&" : "?" + }api-version=${apiVersion}`; + } - const authPolicy = createCommunicationAuthPolicy(credential); - client.pipeline.addPolicy(authPolicy); + return next(req); + }, + }); return client; } diff --git a/sdk/communication/communication-job-router-rest/src/clientDefinitions.ts b/sdk/communication/communication-job-router-rest/src/clientDefinitions.ts index ba8218b198fa..9e28fa88689b 100644 --- a/sdk/communication/communication-job-router-rest/src/clientDefinitions.ts +++ b/sdk/communication/communication-job-router-rest/src/clientDefinitions.ts @@ -35,7 +35,7 @@ import { GetWorkerParameters, DeleteWorkerParameters, ListWorkersParameters, -} from "./parameters"; +} from "./parameters.js"; import { UpsertClassificationPolicy200Response, UpsertClassificationPolicy201Response, @@ -109,7 +109,7 @@ import { DeleteWorkerDefaultResponse, ListWorkers200Response, ListWorkersDefaultResponse, -} from "./responses"; +} from "./responses.js"; import { Client, StreamableMethod } from "@azure-rest/core-client"; export interface UpsertClassificationPolicy { @@ -124,12 +124,15 @@ export interface UpsertClassificationPolicy { /** Retrieves an existing classification policy by Id. */ get( options?: GetClassificationPolicyParameters, - ): StreamableMethod; + ): StreamableMethod< + GetClassificationPolicy200Response | GetClassificationPolicyDefaultResponse + >; /** Delete a classification policy by Id. */ delete( options?: DeleteClassificationPolicyParameters, ): StreamableMethod< - DeleteClassificationPolicy204Response | DeleteClassificationPolicyDefaultResponse + | DeleteClassificationPolicy204Response + | DeleteClassificationPolicyDefaultResponse >; } @@ -138,7 +141,8 @@ export interface ListClassificationPolicies { get( options?: ListClassificationPoliciesParameters, ): StreamableMethod< - ListClassificationPolicies200Response | ListClassificationPoliciesDefaultResponse + | ListClassificationPolicies200Response + | ListClassificationPoliciesDefaultResponse >; } @@ -154,12 +158,15 @@ export interface UpsertDistributionPolicy { /** Retrieves an existing distribution policy by Id. */ get( options?: GetDistributionPolicyParameters, - ): StreamableMethod; + ): StreamableMethod< + GetDistributionPolicy200Response | GetDistributionPolicyDefaultResponse + >; /** Delete a distribution policy by Id. */ delete( options?: DeleteDistributionPolicyParameters, ): StreamableMethod< - DeleteDistributionPolicy204Response | DeleteDistributionPolicyDefaultResponse + | DeleteDistributionPolicy204Response + | DeleteDistributionPolicyDefaultResponse >; } @@ -168,7 +175,8 @@ export interface ListDistributionPolicies { get( options?: ListDistributionPoliciesParameters, ): StreamableMethod< - ListDistributionPolicies200Response | ListDistributionPoliciesDefaultResponse + | ListDistributionPolicies200Response + | ListDistributionPoliciesDefaultResponse >; } @@ -184,25 +192,33 @@ export interface UpsertExceptionPolicy { /** Retrieves an existing exception policy by Id. */ get( options?: GetExceptionPolicyParameters, - ): StreamableMethod; + ): StreamableMethod< + GetExceptionPolicy200Response | GetExceptionPolicyDefaultResponse + >; /** Deletes a exception policy by Id. */ delete( options?: DeleteExceptionPolicyParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteExceptionPolicy204Response | DeleteExceptionPolicyDefaultResponse + >; } export interface ListExceptionPolicies { /** Retrieves existing exception policies. */ get( options?: ListExceptionPoliciesParameters, - ): StreamableMethod; + ): StreamableMethod< + ListExceptionPolicies200Response | ListExceptionPoliciesDefaultResponse + >; } export interface UpsertQueue { /** Creates or updates a queue. */ patch( options: UpsertQueueParameters, - ): StreamableMethod; + ): StreamableMethod< + UpsertQueue200Response | UpsertQueue201Response | UpsertQueueDefaultResponse + >; /** Retrieves an existing queue by Id. */ get( options?: GetQueueParameters, @@ -224,9 +240,13 @@ export interface UpsertJob { /** Creates or updates a router job. */ patch( options: UpsertJobParameters, - ): StreamableMethod; + ): StreamableMethod< + UpsertJob200Response | UpsertJob201Response | UpsertJobDefaultResponse + >; /** Retrieves an existing job by Id. */ - get(options?: GetJobParameters): StreamableMethod; + get( + options?: GetJobParameters, + ): StreamableMethod; /** Deletes a job and all of its traces. */ delete( options?: DeleteJobParameters, @@ -242,7 +262,9 @@ export interface Reclassify { export interface Cancel { /** Submits request to cancel an existing job by Id while supplying free-form cancellation reason. */ - post(options?: CancelParameters): StreamableMethod; + post( + options?: CancelParameters, + ): StreamableMethod; } export interface Complete { @@ -254,7 +276,9 @@ export interface Complete { export interface Close { /** Closes a completed job. */ - post(options?: CloseParameters): StreamableMethod; + post( + options?: CloseParameters, + ): StreamableMethod; } export interface ListJobs { @@ -268,7 +292,9 @@ export interface GetInQueuePosition { /** Gets a job's position details. */ get( options?: GetInQueuePositionParameters, - ): StreamableMethod; + ): StreamableMethod< + GetInQueuePosition200Response | GetInQueuePositionDefaultResponse + >; } export interface Unassign { @@ -280,19 +306,25 @@ export interface Unassign { export interface Accept { /** Accepts an offer to work on a job and returns a 409/Conflict if another agent accepted the job already. */ - post(options?: AcceptParameters): StreamableMethod; + post( + options?: AcceptParameters, + ): StreamableMethod; } export interface Decline { /** Declines an offer to work on a job. */ - post(options?: DeclineParameters): StreamableMethod; + post( + options?: DeclineParameters, + ): StreamableMethod; } export interface GetQueueStatistics { /** Retrieves a queue's statistics. */ get( options?: GetQueueStatisticsParameters, - ): StreamableMethod; + ): StreamableMethod< + GetQueueStatistics200Response | GetQueueStatisticsDefaultResponse + >; } export interface UpsertWorker { @@ -300,7 +332,9 @@ export interface UpsertWorker { patch( options: UpsertWorkerParameters, ): StreamableMethod< - UpsertWorker200Response | UpsertWorker201Response | UpsertWorkerDefaultResponse + | UpsertWorker200Response + | UpsertWorker201Response + | UpsertWorkerDefaultResponse >; /** Retrieves an existing worker by Id. */ get( @@ -386,7 +420,10 @@ export interface Routes { offerId: string, ): Decline; /** Resource for '/routing/queues/\{queueId\}/statistics' has methods for the following verbs: get */ - (path: "/routing/queues/{queueId}/statistics", queueId: string): GetQueueStatistics; + ( + path: "/routing/queues/{queueId}/statistics", + queueId: string, + ): GetQueueStatistics; /** Resource for '/routing/workers/\{workerId\}' has methods for the following verbs: patch, get, delete */ (path: "/routing/workers/{workerId}", workerId: string): UpsertWorker; /** Resource for '/routing/workers' has methods for the following verbs: get */ diff --git a/sdk/communication/communication-job-router-rest/src/index.ts b/sdk/communication/communication-job-router-rest/src/index.ts index cac5e0ed9b1d..a9a2caaf073f 100644 --- a/sdk/communication/communication-job-router-rest/src/index.ts +++ b/sdk/communication/communication-job-router-rest/src/index.ts @@ -1,15 +1,15 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import AzureCommunicationRoutingServiceClient from "./azureCommunicationRoutingServiceClient"; +import AzureCommunicationRoutingServiceClient from "./azureCommunicationRoutingServiceClient.js"; -export * from "./azureCommunicationRoutingServiceClient"; -export * from "./parameters"; -export * from "./responses"; -export * from "./clientDefinitions"; -export * from "./isUnexpected"; -export * from "./models"; -export * from "./outputModels"; -export * from "./paginateHelper"; +export * from "./azureCommunicationRoutingServiceClient.js"; +export * from "./parameters.js"; +export * from "./responses.js"; +export * from "./clientDefinitions.js"; +export * from "./isUnexpected.js"; +export * from "./models.js"; +export * from "./outputModels.js"; +export * from "./paginateHelper.js"; export default AzureCommunicationRoutingServiceClient; diff --git a/sdk/communication/communication-job-router-rest/src/isUnexpected.ts b/sdk/communication/communication-job-router-rest/src/isUnexpected.ts index daf27f08f387..f0dd845106b9 100644 --- a/sdk/communication/communication-job-router-rest/src/isUnexpected.ts +++ b/sdk/communication/communication-job-router-rest/src/isUnexpected.ts @@ -74,10 +74,13 @@ import { DeleteWorkerDefaultResponse, ListWorkers200Response, ListWorkersDefaultResponse, -} from "./responses"; +} from "./responses.js"; const responseMap: Record = { - "PATCH /routing/classificationPolicies/{classificationPolicyId}": ["200", "201"], + "PATCH /routing/classificationPolicies/{classificationPolicyId}": [ + "200", + "201", + ], "GET /routing/classificationPolicies/{classificationPolicyId}": ["200"], "DELETE /routing/classificationPolicies/{classificationPolicyId}": ["204"], "GET /routing/classificationPolicies": ["200"], @@ -119,13 +122,19 @@ export function isUnexpected( | UpsertClassificationPolicyDefaultResponse, ): response is UpsertClassificationPolicyDefaultResponse; export function isUnexpected( - response: GetClassificationPolicy200Response | GetClassificationPolicyDefaultResponse, + response: + | GetClassificationPolicy200Response + | GetClassificationPolicyDefaultResponse, ): response is GetClassificationPolicyDefaultResponse; export function isUnexpected( - response: DeleteClassificationPolicy204Response | DeleteClassificationPolicyDefaultResponse, + response: + | DeleteClassificationPolicy204Response + | DeleteClassificationPolicyDefaultResponse, ): response is DeleteClassificationPolicyDefaultResponse; export function isUnexpected( - response: ListClassificationPolicies200Response | ListClassificationPoliciesDefaultResponse, + response: + | ListClassificationPolicies200Response + | ListClassificationPoliciesDefaultResponse, ): response is ListClassificationPoliciesDefaultResponse; export function isUnexpected( response: @@ -134,13 +143,19 @@ export function isUnexpected( | UpsertDistributionPolicyDefaultResponse, ): response is UpsertDistributionPolicyDefaultResponse; export function isUnexpected( - response: GetDistributionPolicy200Response | GetDistributionPolicyDefaultResponse, + response: + | GetDistributionPolicy200Response + | GetDistributionPolicyDefaultResponse, ): response is GetDistributionPolicyDefaultResponse; export function isUnexpected( - response: DeleteDistributionPolicy204Response | DeleteDistributionPolicyDefaultResponse, + response: + | DeleteDistributionPolicy204Response + | DeleteDistributionPolicyDefaultResponse, ): response is DeleteDistributionPolicyDefaultResponse; export function isUnexpected( - response: ListDistributionPolicies200Response | ListDistributionPoliciesDefaultResponse, + response: + | ListDistributionPolicies200Response + | ListDistributionPoliciesDefaultResponse, ): response is ListDistributionPoliciesDefaultResponse; export function isUnexpected( response: @@ -152,13 +167,20 @@ export function isUnexpected( response: GetExceptionPolicy200Response | GetExceptionPolicyDefaultResponse, ): response is GetExceptionPolicyDefaultResponse; export function isUnexpected( - response: DeleteExceptionPolicy204Response | DeleteExceptionPolicyDefaultResponse, + response: + | DeleteExceptionPolicy204Response + | DeleteExceptionPolicyDefaultResponse, ): response is DeleteExceptionPolicyDefaultResponse; export function isUnexpected( - response: ListExceptionPolicies200Response | ListExceptionPoliciesDefaultResponse, + response: + | ListExceptionPolicies200Response + | ListExceptionPoliciesDefaultResponse, ): response is ListExceptionPoliciesDefaultResponse; export function isUnexpected( - response: UpsertQueue200Response | UpsertQueue201Response | UpsertQueueDefaultResponse, + response: + | UpsertQueue200Response + | UpsertQueue201Response + | UpsertQueueDefaultResponse, ): response is UpsertQueueDefaultResponse; export function isUnexpected( response: GetQueue200Response | GetQueueDefaultResponse, @@ -170,7 +192,10 @@ export function isUnexpected( response: ListQueues200Response | ListQueuesDefaultResponse, ): response is ListQueuesDefaultResponse; export function isUnexpected( - response: UpsertJob200Response | UpsertJob201Response | UpsertJobDefaultResponse, + response: + | UpsertJob200Response + | UpsertJob201Response + | UpsertJobDefaultResponse, ): response is UpsertJobDefaultResponse; export function isUnexpected( response: GetJob200Response | GetJobDefaultResponse, @@ -209,7 +234,10 @@ export function isUnexpected( response: GetQueueStatistics200Response | GetQueueStatisticsDefaultResponse, ): response is GetQueueStatisticsDefaultResponse; export function isUnexpected( - response: UpsertWorker200Response | UpsertWorker201Response | UpsertWorkerDefaultResponse, + response: + | UpsertWorker200Response + | UpsertWorker201Response + | UpsertWorkerDefaultResponse, ): response is UpsertWorkerDefaultResponse; export function isUnexpected( response: GetWorker200Response | GetWorkerDefaultResponse, @@ -360,17 +388,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/communication/communication-job-router-rest/src/models.ts b/sdk/communication/communication-job-router-rest/src/models.ts index ba6bd5a60932..624ad2dedf5a 100644 --- a/sdk/communication/communication-job-router-rest/src/models.ts +++ b/sdk/communication/communication-job-router-rest/src/models.ts @@ -17,11 +17,12 @@ export interface ClassificationPolicy { /** An attachment of queue selectors to resolve a queue to a job from a classification policy. */ export interface QueueSelectorAttachmentParent { - kind: string; + kind: QueueSelectorAttachmentKind; } /** Describes a set of queue selectors that will be attached if the given condition resolves to true. */ -export interface ConditionalQueueSelectorAttachment extends QueueSelectorAttachmentParent { +export interface ConditionalQueueSelectorAttachment + extends QueueSelectorAttachmentParent { /** The condition that must be true for the queue selectors to be attached. */ condition: RouterRule; /** The queue selectors to attach. */ @@ -39,7 +40,7 @@ export interface ConditionalQueueSelectorAttachment extends QueueSelectorAttachm * WebhookRule: A rule providing a binding to a webserver following OAuth2.0 authentication protocol. */ export interface RouterRuleParent { - kind: string; + kind: RouterRuleKind; } /** A rule that return the same labels as the input labels. */ @@ -55,7 +56,7 @@ export interface ExpressionRouterRule extends RouterRuleParent { * * Possible values: "powerFx" */ - language?: string; + language?: ExpressionRouterRuleLanguage; /** An expression to evaluate. Should contain return statement with calculated values. */ expression: string; /** The type discriminator describing a sub-type of Rule. */ @@ -119,13 +120,14 @@ export interface RouterQueueSelector { * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperator; /** The value to compare against the actual label value with the given operator. Values must be primitive values - number, string, boolean. */ value?: unknown; } /** Attaches a queue selector where the value is passed through from a job's label with the same key. */ -export interface PassThroughQueueSelectorAttachment extends QueueSelectorAttachmentParent { +export interface PassThroughQueueSelectorAttachment + extends QueueSelectorAttachmentParent { /** The label key to query against. */ key: string; /** @@ -133,13 +135,14 @@ export interface PassThroughQueueSelectorAttachment extends QueueSelectorAttachm * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperator; /** The type discriminator describing the type of queue selector attachment. */ kind: "passThrough"; } /** Attaches queue selectors to a job when the RouterRule is resolved. */ -export interface RuleEngineQueueSelectorAttachment extends QueueSelectorAttachmentParent { +export interface RuleEngineQueueSelectorAttachment + extends QueueSelectorAttachmentParent { /** A RouterRule that resolves a collection of queue selectors to attach. */ rule: RouterRule; /** The type discriminator describing the type of queue selector attachment. */ @@ -147,7 +150,8 @@ export interface RuleEngineQueueSelectorAttachment extends QueueSelectorAttachme } /** Describes a queue selector that will be attached to a job. */ -export interface StaticQueueSelectorAttachment extends QueueSelectorAttachmentParent { +export interface StaticQueueSelectorAttachment + extends QueueSelectorAttachmentParent { /** The queue selector to attach. */ queueSelector: RouterQueueSelector; /** The type discriminator describing the type of queue selector attachment. */ @@ -155,7 +159,8 @@ export interface StaticQueueSelectorAttachment extends QueueSelectorAttachmentPa } /** Describes multiple sets of queue selectors, of which one will be selected and attached according to a weighting. */ -export interface WeightedAllocationQueueSelectorAttachment extends QueueSelectorAttachmentParent { +export interface WeightedAllocationQueueSelectorAttachment + extends QueueSelectorAttachmentParent { /** A collection of percentage based weighted allocations. */ allocations: Array; /** The type discriminator describing the type of queue selector attachment. */ @@ -172,11 +177,12 @@ export interface QueueWeightedAllocation { /** An attachment which attaches worker selectors to a job. */ export interface WorkerSelectorAttachmentParent { - kind: string; + kind: WorkerSelectorAttachmentKind; } /** Describes a set of worker selectors that will be attached if the given condition resolves to true. */ -export interface ConditionalWorkerSelectorAttachment extends WorkerSelectorAttachmentParent { +export interface ConditionalWorkerSelectorAttachment + extends WorkerSelectorAttachmentParent { /** The condition that must be true for the worker selectors to be attached. */ condition: RouterRule; /** The worker selectors to attach. */ @@ -194,7 +200,7 @@ export interface RouterWorkerSelector { * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperator; /** The value to compare against the actual label value with the given operator. Values must be primitive values - number, string, boolean. */ value?: unknown; /** Describes how long this label selector is valid in seconds. */ @@ -204,7 +210,8 @@ export interface RouterWorkerSelector { } /** Attaches a worker selector where the value is passed through from a job's label with the same key. */ -export interface PassThroughWorkerSelectorAttachment extends WorkerSelectorAttachmentParent { +export interface PassThroughWorkerSelectorAttachment + extends WorkerSelectorAttachmentParent { /** The label key to query against. */ key: string; /** @@ -212,7 +219,7 @@ export interface PassThroughWorkerSelectorAttachment extends WorkerSelectorAttac * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperator; /** Describes how long the attached label selector is valid in seconds. */ expiresAfterSeconds?: number; /** The type discriminator describing the type of worker selector attachment. */ @@ -220,7 +227,8 @@ export interface PassThroughWorkerSelectorAttachment extends WorkerSelectorAttac } /** Attaches worker selectors to a job when a RouterRule is resolved. */ -export interface RuleEngineWorkerSelectorAttachment extends WorkerSelectorAttachmentParent { +export interface RuleEngineWorkerSelectorAttachment + extends WorkerSelectorAttachmentParent { /** A RouterRule that resolves a collection of worker selectors to attach. */ rule: RouterRule; /** The type discriminator describing the type of worker selector attachment. */ @@ -228,7 +236,8 @@ export interface RuleEngineWorkerSelectorAttachment extends WorkerSelectorAttach } /** Describes a worker selector that will be attached to a job. */ -export interface StaticWorkerSelectorAttachment extends WorkerSelectorAttachmentParent { +export interface StaticWorkerSelectorAttachment + extends WorkerSelectorAttachmentParent { /** The worker selector to attach. */ workerSelector: RouterWorkerSelector; /** The type discriminator describing the type of worker selector attachment. */ @@ -236,7 +245,8 @@ export interface StaticWorkerSelectorAttachment extends WorkerSelectorAttachment } /** Describes multiple sets of worker selectors, of which one will be selected and attached according to a weighting. */ -export interface WeightedAllocationWorkerSelectorAttachment extends WorkerSelectorAttachmentParent { +export interface WeightedAllocationWorkerSelectorAttachment + extends WorkerSelectorAttachmentParent { /** A collection of percentage based weighted allocations. */ allocations: Array; /** The type discriminator describing the type of worker selector attachment. */ @@ -269,7 +279,7 @@ export interface DistributionModeParent { maxConcurrentOffers?: number; /** If set to true, then router will match workers to jobs even if they don't match label selectors. Warning: You may get workers that are not qualified for a job they are matched with if you set this variable to true. This flag is intended more for temporary usage. By default, set to false. */ bypassSelectors?: boolean; - kind: string; + kind: DistributionModeKind; } /** Jobs are distributed to the worker with the strongest abilities available. */ @@ -287,7 +297,7 @@ export interface ScoringRuleOptions { /** Set batch size when 'isBatchScoringEnabled' is set to true. Defaults to 20 if not configured. */ batchSize?: number; /** List of extra parameters from a job that will be sent as part of the payload to scoring rule. If not set, a job's labels (sent in the payload as `job`) and a job's worker selectors (sent in the payload as `selectors`) are added to the payload of the scoring rule by default. Note: Worker labels are always sent with scoring payload. */ - scoringParameters?: string[]; + scoringParameters?: ScoringRuleParameterSelector[]; /** If set to true, will score workers in batches, and the parameter name of the worker labels will be sent as `workers`. By default, set to false and the parameter name for the worker labels will be sent as `worker`. Note: If enabled, use 'batchSize' to set batch size. */ isBatchScoringEnabled?: boolean; /** If false, will sort scores by ascending order. By default, set to true. */ @@ -326,7 +336,7 @@ export interface ExceptionRule { /** Abstract base class for defining a trigger for exception rules. */ export interface ExceptionTriggerParent { - kind: string; + kind: ExceptionTriggerKind; } /** Trigger for an exception action on exceeding queue length. */ @@ -349,7 +359,7 @@ export interface WaitTimeExceptionTrigger extends ExceptionTriggerParent { export interface ExceptionActionParent { /** Unique Id of the exception action. */ id?: string; - kind: string; + kind: ExceptionActionKind; } /** An action that marks a job as cancelled. */ @@ -406,7 +416,7 @@ export interface RouterJob { classificationPolicyId?: string; /** Id of a queue that this job is queued to. */ queueId?: string; - /** Priority of this job. */ + /** Priority of this job. Value must be between -100 to 100. */ priority?: number; /** Reason code for cancelled or closed jobs. */ dispositionCode?: string; @@ -449,7 +459,7 @@ export interface RouterJobNote { * SuspendMode: Used when matching workers to a job needs to be suspended. */ export interface JobMatchingModeParent { - kind: string; + kind: JobMatchingModeKind; } /** Describes a matching mode used for scheduling jobs to be queued at a future time. At the specified time, matching worker to a job will not start automatically. */ @@ -535,7 +545,7 @@ export interface RouterChannel { channelId: string; /** The amount of capacity that an instance of a job of this channel will consume of the total worker capacity. */ capacityCostPerJob: number; - /** The maximum number of jobs that can be supported concurrently for this channel. */ + /** The maximum number of jobs that can be supported concurrently for this channel. Value must be greater than zero. */ maxNumberOfJobs?: number; } @@ -622,3 +632,33 @@ export type JobMatchingMode = | ScheduleAndSuspendMode | QueueAndMatchMode | SuspendMode; +/** Alias for QueueSelectorAttachmentKind */ +export type QueueSelectorAttachmentKind = string; +/** Alias for RouterRuleKind */ +export type RouterRuleKind = string; +/** Alias for ExpressionRouterRuleLanguage */ +export type ExpressionRouterRuleLanguage = string; +/** Alias for LabelOperator */ +export type LabelOperator = string; +/** Alias for WorkerSelectorAttachmentKind */ +export type WorkerSelectorAttachmentKind = string; +/** Alias for RouterWorkerSelectorStatus */ +export type RouterWorkerSelectorStatus = string; +/** Alias for DistributionModeKind */ +export type DistributionModeKind = string; +/** Alias for ScoringRuleParameterSelector */ +export type ScoringRuleParameterSelector = string; +/** Alias for ExceptionTriggerKind */ +export type ExceptionTriggerKind = string; +/** Alias for ExceptionActionKind */ +export type ExceptionActionKind = string; +/** Alias for RouterJobStatus */ +export type RouterJobStatus = string; +/** Alias for JobMatchingModeKind */ +export type JobMatchingModeKind = string; +/** Alias for RouterJobStatusSelector */ +export type RouterJobStatusSelector = string; +/** Alias for RouterWorkerState */ +export type RouterWorkerState = string; +/** Alias for RouterWorkerStateSelector */ +export type RouterWorkerStateSelector = string; diff --git a/sdk/communication/communication-job-router-rest/src/outputModels.ts b/sdk/communication/communication-job-router-rest/src/outputModels.ts index 25452a0caf89..0ea7e14009bc 100644 --- a/sdk/communication/communication-job-router-rest/src/outputModels.ts +++ b/sdk/communication/communication-job-router-rest/src/outputModels.ts @@ -23,7 +23,7 @@ export interface ClassificationPolicyOutput { /** An attachment of queue selectors to resolve a queue to a job from a classification policy. */ export interface QueueSelectorAttachmentOutputParent { - kind: string; + kind: QueueSelectorAttachmentKindOutput; } /** Describes a set of queue selectors that will be attached if the given condition resolves to true. */ @@ -46,7 +46,7 @@ export interface ConditionalQueueSelectorAttachmentOutput * WebhookRule: A rule providing a binding to a webserver following OAuth2.0 authentication protocol. */ export interface RouterRuleOutputParent { - kind: string; + kind: RouterRuleKindOutput; } /** A rule that return the same labels as the input labels. */ @@ -62,7 +62,7 @@ export interface ExpressionRouterRuleOutput extends RouterRuleOutputParent { * * Possible values: "powerFx" */ - language?: string; + language?: ExpressionRouterRuleLanguageOutput; /** An expression to evaluate. Should contain return statement with calculated values. */ expression: string; /** The type discriminator describing a sub-type of Rule. */ @@ -126,7 +126,7 @@ export interface RouterQueueSelectorOutput { * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperatorOutput; /** The value to compare against the actual label value with the given operator. Values must be primitive values - number, string, boolean. */ value?: any; } @@ -141,7 +141,7 @@ export interface PassThroughQueueSelectorAttachmentOutput * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperatorOutput; /** The type discriminator describing the type of queue selector attachment. */ kind: "passThrough"; } @@ -156,7 +156,8 @@ export interface RuleEngineQueueSelectorAttachmentOutput } /** Describes a queue selector that will be attached to a job. */ -export interface StaticQueueSelectorAttachmentOutput extends QueueSelectorAttachmentOutputParent { +export interface StaticQueueSelectorAttachmentOutput + extends QueueSelectorAttachmentOutputParent { /** The queue selector to attach. */ queueSelector: RouterQueueSelectorOutput; /** The type discriminator describing the type of queue selector attachment. */ @@ -182,7 +183,7 @@ export interface QueueWeightedAllocationOutput { /** An attachment which attaches worker selectors to a job. */ export interface WorkerSelectorAttachmentOutputParent { - kind: string; + kind: WorkerSelectorAttachmentKindOutput; } /** Describes a set of worker selectors that will be attached if the given condition resolves to true. */ @@ -205,7 +206,7 @@ export interface RouterWorkerSelectorOutput { * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperatorOutput; /** The value to compare against the actual label value with the given operator. Values must be primitive values - number, string, boolean. */ value?: any; /** Describes how long this label selector is valid in seconds. */ @@ -217,7 +218,7 @@ export interface RouterWorkerSelectorOutput { * * Possible values: "active", "expired" */ - readonly status?: string; + readonly status?: RouterWorkerSelectorStatusOutput; /** The time at which this worker selector expires in UTC. */ readonly expiresAt?: string; } @@ -232,7 +233,7 @@ export interface PassThroughWorkerSelectorAttachmentOutput * * Possible values: "equal", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual" */ - labelOperator: string; + labelOperator: LabelOperatorOutput; /** Describes how long the attached label selector is valid in seconds. */ expiresAfterSeconds?: number; /** The type discriminator describing the type of worker selector attachment. */ @@ -249,7 +250,8 @@ export interface RuleEngineWorkerSelectorAttachmentOutput } /** Describes a worker selector that will be attached to a job. */ -export interface StaticWorkerSelectorAttachmentOutput extends WorkerSelectorAttachmentOutputParent { +export interface StaticWorkerSelectorAttachmentOutput + extends WorkerSelectorAttachmentOutputParent { /** The worker selector to attach. */ workerSelector: RouterWorkerSelectorOutput; /** The type discriminator describing the type of worker selector attachment. */ @@ -273,9 +275,6 @@ export interface WorkerWeightedAllocationOutput { workerSelectors: Array; } -/** Provides the 'If-*' headers to enable conditional (cached) responses for JobRouter. */ -export interface RouterConditionalRequestHeadersOutput {} - /** Policy governing how jobs are distributed to workers */ export interface DistributionPolicyOutput { /** The entity tag for this resource. */ @@ -298,7 +297,7 @@ export interface DistributionModeOutputParent { maxConcurrentOffers?: number; /** If set to true, then router will match workers to jobs even if they don't match label selectors. Warning: You may get workers that are not qualified for a job they are matched with if you set this variable to true. This flag is intended more for temporary usage. By default, set to false. */ bypassSelectors?: boolean; - kind: string; + kind: DistributionModeKindOutput; } /** Jobs are distributed to the worker with the strongest abilities available. */ @@ -316,7 +315,7 @@ export interface ScoringRuleOptionsOutput { /** Set batch size when 'isBatchScoringEnabled' is set to true. Defaults to 20 if not configured. */ batchSize?: number; /** List of extra parameters from a job that will be sent as part of the payload to scoring rule. If not set, a job's labels (sent in the payload as `job`) and a job's worker selectors (sent in the payload as `selectors`) are added to the payload of the scoring rule by default. Note: Worker labels are always sent with scoring payload. */ - scoringParameters?: string[]; + scoringParameters?: ScoringRuleParameterSelectorOutput[]; /** If set to true, will score workers in batches, and the parameter name of the worker labels will be sent as `workers`. By default, set to false and the parameter name for the worker labels will be sent as `worker`. Note: If enabled, use 'batchSize' to set batch size. */ isBatchScoringEnabled?: boolean; /** If false, will sort scores by ascending order. By default, set to true. */ @@ -359,11 +358,12 @@ export interface ExceptionRuleOutput { /** Abstract base class for defining a trigger for exception rules. */ export interface ExceptionTriggerOutputParent { - kind: string; + kind: ExceptionTriggerKindOutput; } /** Trigger for an exception action on exceeding queue length. */ -export interface QueueLengthExceptionTriggerOutput extends ExceptionTriggerOutputParent { +export interface QueueLengthExceptionTriggerOutput + extends ExceptionTriggerOutputParent { /** Threshold of number of jobs ahead in the queue to for this trigger to fire. */ threshold: number; /** The type discriminator describing a sub-type of ExceptionTrigger. */ @@ -371,7 +371,8 @@ export interface QueueLengthExceptionTriggerOutput extends ExceptionTriggerOutpu } /** Trigger for an exception action on exceeding wait time. */ -export interface WaitTimeExceptionTriggerOutput extends ExceptionTriggerOutputParent { +export interface WaitTimeExceptionTriggerOutput + extends ExceptionTriggerOutputParent { /** Threshold for wait time for this trigger. */ thresholdSeconds: number; /** The type discriminator describing a sub-type of ExceptionTrigger. */ @@ -382,11 +383,12 @@ export interface WaitTimeExceptionTriggerOutput extends ExceptionTriggerOutputPa export interface ExceptionActionOutputParent { /** Unique Id of the exception action. */ id?: string; - kind: string; + kind: ExceptionActionKindOutput; } /** An action that marks a job as cancelled. */ -export interface CancelExceptionActionOutput extends ExceptionActionOutputParent { +export interface CancelExceptionActionOutput + extends ExceptionActionOutputParent { /** A note that will be appended to a job's notes collection with the current timestamp. */ note?: string; /** Indicates the outcome of a job, populate this field with your own custom values. */ @@ -396,7 +398,8 @@ export interface CancelExceptionActionOutput extends ExceptionActionOutputParent } /** An action that manually reclassifies a job by providing the queue, priority and worker selectors. */ -export interface ManualReclassifyExceptionActionOutput extends ExceptionActionOutputParent { +export interface ManualReclassifyExceptionActionOutput + extends ExceptionActionOutputParent { /** Updated QueueId. */ queueId?: string; /** Updated Priority. */ @@ -408,7 +411,8 @@ export interface ManualReclassifyExceptionActionOutput extends ExceptionActionOu } /** An action that modifies labels on a job and then reclassifies it. */ -export interface ReclassifyExceptionActionOutput extends ExceptionActionOutputParent { +export interface ReclassifyExceptionActionOutput + extends ExceptionActionOutputParent { /** The new classification policy that will determine queue, priority and worker selectors. */ classificationPolicyId?: string; /** Dictionary containing the labels to update (or add if not existing) in key-value pairs. Values must be primitive values - number, string, boolean. */ @@ -446,7 +450,7 @@ export interface RouterJobOutput { * * Possible values: "pendingClassification", "queued", "assigned", "completed", "closed", "cancelled", "classificationFailed", "created", "pendingSchedule", "scheduled", "scheduleFailed", "waitingForActivation" */ - readonly status?: string; + readonly status?: RouterJobStatusOutput; /** Timestamp a job was queued in UTC. */ readonly enqueuedAt?: string; /** The channel identifier. eg. voice, chat, etc. */ @@ -455,7 +459,7 @@ export interface RouterJobOutput { classificationPolicyId?: string; /** Id of a queue that this job is queued to. */ queueId?: string; - /** Priority of this job. */ + /** Priority of this job. Value must be between -100 to 100. */ priority?: number; /** Reason code for cancelled or closed jobs. */ dispositionCode?: string; @@ -506,11 +510,12 @@ export interface RouterJobNoteOutput { * SuspendMode: Used when matching workers to a job needs to be suspended. */ export interface JobMatchingModeOutputParent { - kind: string; + kind: JobMatchingModeKindOutput; } /** Describes a matching mode used for scheduling jobs to be queued at a future time. At the specified time, matching worker to a job will not start automatically. */ -export interface ScheduleAndSuspendModeOutput extends JobMatchingModeOutputParent { +export interface ScheduleAndSuspendModeOutput + extends JobMatchingModeOutputParent { /** Requested schedule time. */ scheduleAt: string; /** The type discriminator describing ScheduleAndSuspendMode */ @@ -599,7 +604,7 @@ export interface RouterWorkerOutput { * * Possible values: "active", "draining", "inactive" */ - readonly state?: string; + readonly state?: RouterWorkerStateOutput; /** Collection of queue(s) that this worker can receive work from. */ queues?: string[]; /** The total capacity score this worker has to manage multiple concurrent jobs. */ @@ -628,7 +633,7 @@ export interface RouterChannelOutput { channelId: string; /** The amount of capacity that an instance of a job of this channel will consume of the total worker capacity. */ capacityCostPerJob: number; - /** The maximum number of jobs that can be supported concurrently for this channel. */ + /** The maximum number of jobs that can be supported concurrently for this channel. Value must be greater than zero. */ maxNumberOfJobs?: number; } @@ -717,15 +722,41 @@ export type JobMatchingModeOutput = | ScheduleAndSuspendModeOutput | QueueAndMatchModeOutput | SuspendModeOutput; +/** Alias for QueueSelectorAttachmentKindOutput */ +export type QueueSelectorAttachmentKindOutput = string; +/** Alias for RouterRuleKindOutput */ +export type RouterRuleKindOutput = string; +/** Alias for ExpressionRouterRuleLanguageOutput */ +export type ExpressionRouterRuleLanguageOutput = string; +/** Alias for LabelOperatorOutput */ +export type LabelOperatorOutput = string; +/** Alias for WorkerSelectorAttachmentKindOutput */ +export type WorkerSelectorAttachmentKindOutput = string; +/** Alias for RouterWorkerSelectorStatusOutput */ +export type RouterWorkerSelectorStatusOutput = string; /** Paged collection of ClassificationPolicy items */ export type PagedClassificationPolicyOutput = Paged; +/** Alias for DistributionModeKindOutput */ +export type DistributionModeKindOutput = string; +/** Alias for ScoringRuleParameterSelectorOutput */ +export type ScoringRuleParameterSelectorOutput = string; /** Paged collection of DistributionPolicy items */ export type PagedDistributionPolicyOutput = Paged; +/** Alias for ExceptionTriggerKindOutput */ +export type ExceptionTriggerKindOutput = string; +/** Alias for ExceptionActionKindOutput */ +export type ExceptionActionKindOutput = string; /** Paged collection of ExceptionPolicy items */ export type PagedExceptionPolicyOutput = Paged; /** Paged collection of RouterQueue items */ export type PagedRouterQueueOutput = Paged; +/** Alias for RouterJobStatusOutput */ +export type RouterJobStatusOutput = string; +/** Alias for JobMatchingModeKindOutput */ +export type JobMatchingModeKindOutput = string; /** Paged collection of RouterJob items */ export type PagedRouterJobOutput = Paged; +/** Alias for RouterWorkerStateOutput */ +export type RouterWorkerStateOutput = string; /** Paged collection of RouterWorker items */ export type PagedRouterWorkerOutput = Paged; diff --git a/sdk/communication/communication-job-router-rest/src/paginateHelper.ts b/sdk/communication/communication-job-router-rest/src/paginateHelper.ts index f0d91c952cda..3aac141db0e7 100644 --- a/sdk/communication/communication-job-router-rest/src/paginateHelper.ts +++ b/sdk/communication/communication-job-router-rest/src/paginateHelper.ts @@ -1,8 +1,16 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { getPagedAsyncIterator, PagedAsyncIterableIterator, PagedResult } from "@azure/core-paging"; -import { Client, createRestError, PathUncheckedResponse } from "@azure-rest/core-client"; +import { + getPagedAsyncIterator, + PagedAsyncIterableIterator, + PagedResult, +} from "@azure/core-paging"; +import { + Client, + createRestError, + PathUncheckedResponse, +} from "@azure-rest/core-client"; /** * Helper type to extract the type of an array @@ -67,7 +75,9 @@ export function paginate( typeof customGetPage === "function" ? customGetPage : async (pageLink: string) => { - const result = firstRun ? initialResponse : await client.pathUnchecked(pageLink).get(); + const result = firstRun + ? initialResponse + : await client.pathUnchecked(pageLink).get(); firstRun = false; checkPagingRequest(result); const nextLink = getNextLink(result.body, nextLinkName); @@ -93,7 +103,9 @@ function getNextLink(body: unknown, nextLinkName?: string): string | undefined { const nextLink = (body as Record)[nextLinkName]; if (typeof nextLink !== "string" && typeof nextLink !== "undefined") { - throw new Error(`Body Property ${nextLinkName} should be a string or undefined`); + throw new Error( + `Body Property ${nextLinkName} should be a string or undefined`, + ); } return nextLink; @@ -121,7 +133,18 @@ function getElements(body: unknown, itemName: string): T[] { * Checks if a request failed */ function checkPagingRequest(response: PathUncheckedResponse): void { - const Http2xxStatusCodes = ["200", "201", "202", "203", "204", "205", "206", "207", "208", "226"]; + const Http2xxStatusCodes = [ + "200", + "201", + "202", + "203", + "204", + "205", + "206", + "207", + "208", + "226", + ]; if (!Http2xxStatusCodes.includes(response.status)) { throw createRestError( `Pagination failed with unexpected statusCode ${response.status}`, diff --git a/sdk/communication/communication-job-router-rest/src/parameters.ts b/sdk/communication/communication-job-router-rest/src/parameters.ts index ad980d8be7e7..0c0fb77cb8a0 100644 --- a/sdk/communication/communication-job-router-rest/src/parameters.ts +++ b/sdk/communication/communication-job-router-rest/src/parameters.ts @@ -13,10 +13,12 @@ import { CancelJobOptions, CompleteJobOptions, CloseJobOptions, + RouterJobStatusSelector, UnassignJobOptions, DeclineJobOfferOptions, RouterWorker, -} from "./models"; + RouterWorkerStateSelector, +} from "./models.js"; export interface UpsertClassificationPolicyHeaders { /** The request should only proceed if an entity matches this string. */ @@ -26,7 +28,8 @@ export interface UpsertClassificationPolicyHeaders { } /** The resource instance. */ -export type ClassificationPolicyResourceMergeAndPatch = Partial; +export type ClassificationPolicyResourceMergeAndPatch = + Partial; export interface UpsertClassificationPolicyBodyParam { /** The resource instance. */ @@ -42,10 +45,11 @@ export interface UpsertClassificationPolicyMediaTypesParam { contentType: "application/merge-patch+json"; } -export type UpsertClassificationPolicyParameters = UpsertClassificationPolicyHeaderParam & - UpsertClassificationPolicyMediaTypesParam & - UpsertClassificationPolicyBodyParam & - RequestParameters; +export type UpsertClassificationPolicyParameters = + UpsertClassificationPolicyHeaderParam & + UpsertClassificationPolicyMediaTypesParam & + UpsertClassificationPolicyBodyParam & + RequestParameters; export type GetClassificationPolicyParameters = RequestParameters; export type DeleteClassificationPolicyParameters = RequestParameters; @@ -58,8 +62,8 @@ export interface ListClassificationPoliciesQueryParam { queryParameters?: ListClassificationPoliciesQueryParamProperties; } -export type ListClassificationPoliciesParameters = ListClassificationPoliciesQueryParam & - RequestParameters; +export type ListClassificationPoliciesParameters = + ListClassificationPoliciesQueryParam & RequestParameters; export interface UpsertDistributionPolicyHeaders { /** The request should only proceed if an entity matches this string. */ @@ -69,7 +73,8 @@ export interface UpsertDistributionPolicyHeaders { } /** The resource instance. */ -export type DistributionPolicyResourceMergeAndPatch = Partial; +export type DistributionPolicyResourceMergeAndPatch = + Partial; export interface UpsertDistributionPolicyBodyParam { /** The resource instance. */ @@ -85,10 +90,11 @@ export interface UpsertDistributionPolicyMediaTypesParam { contentType: "application/merge-patch+json"; } -export type UpsertDistributionPolicyParameters = UpsertDistributionPolicyHeaderParam & - UpsertDistributionPolicyMediaTypesParam & - UpsertDistributionPolicyBodyParam & - RequestParameters; +export type UpsertDistributionPolicyParameters = + UpsertDistributionPolicyHeaderParam & + UpsertDistributionPolicyMediaTypesParam & + UpsertDistributionPolicyBodyParam & + RequestParameters; export type GetDistributionPolicyParameters = RequestParameters; export type DeleteDistributionPolicyParameters = RequestParameters; @@ -101,8 +107,8 @@ export interface ListDistributionPoliciesQueryParam { queryParameters?: ListDistributionPoliciesQueryParamProperties; } -export type ListDistributionPoliciesParameters = ListDistributionPoliciesQueryParam & - RequestParameters; +export type ListDistributionPoliciesParameters = + ListDistributionPoliciesQueryParam & RequestParameters; export interface UpsertExceptionPolicyHeaders { /** The request should only proceed if an entity matches this string. */ @@ -144,7 +150,8 @@ export interface ListExceptionPoliciesQueryParam { queryParameters?: ListExceptionPoliciesQueryParamProperties; } -export type ListExceptionPoliciesParameters = ListExceptionPoliciesQueryParam & RequestParameters; +export type ListExceptionPoliciesParameters = ListExceptionPoliciesQueryParam & + RequestParameters; export interface UpsertQueueHeaders { /** The request should only proceed if an entity matches this string. */ @@ -255,7 +262,7 @@ export interface ListJobsQueryParamProperties { * * Possible values: "all", "pendingClassification", "queued", "assigned", "completed", "closed", "cancelled", "classificationFailed", "created", "pendingSchedule", "scheduled", "scheduleFailed", "waitingForActivation", "active" */ - status?: string; + status?: RouterJobStatusSelector; /** If specified, filter jobs by queue. */ queueId?: string; /** If specified, filter jobs by channel. */ @@ -330,7 +337,7 @@ export interface ListWorkersQueryParamProperties { * * Possible values: "active", "draining", "inactive", "all" */ - state?: string; + state?: RouterWorkerStateSelector; /** If specified, select workers who have a channel configuration with this channel. */ channelId?: string; /** If specified, select workers who are assigned to this queue. */ diff --git a/sdk/communication/communication-job-router-rest/src/responses.ts b/sdk/communication/communication-job-router-rest/src/responses.ts index 30419fb969e0..bca2cec2f77d 100644 --- a/sdk/communication/communication-job-router-rest/src/responses.ts +++ b/sdk/communication/communication-job-router-rest/src/responses.ts @@ -25,7 +25,7 @@ import { RouterQueueStatisticsOutput, RouterWorkerOutput, PagedRouterWorkerOutput, -} from "./outputModels"; +} from "./outputModels.js"; export interface UpsertClassificationPolicy200Headers { /** The entity tag for the response. */ @@ -60,7 +60,8 @@ export interface UpsertClassificationPolicyDefaultHeaders { "x-ms-error-code"?: string; } -export interface UpsertClassificationPolicyDefaultResponse extends HttpResponse { +export interface UpsertClassificationPolicyDefaultResponse + extends HttpResponse { status: string; body: ErrorResponse; headers: RawHttpHeaders & UpsertClassificationPolicyDefaultHeaders; @@ -101,7 +102,8 @@ export interface DeleteClassificationPolicyDefaultHeaders { "x-ms-error-code"?: string; } -export interface DeleteClassificationPolicyDefaultResponse extends HttpResponse { +export interface DeleteClassificationPolicyDefaultResponse + extends HttpResponse { status: string; body: ErrorResponse; headers: RawHttpHeaders & DeleteClassificationPolicyDefaultHeaders; @@ -118,7 +120,8 @@ export interface ListClassificationPoliciesDefaultHeaders { "x-ms-error-code"?: string; } -export interface ListClassificationPoliciesDefaultResponse extends HttpResponse { +export interface ListClassificationPoliciesDefaultResponse + extends HttpResponse { status: string; body: ErrorResponse; headers: RawHttpHeaders & ListClassificationPoliciesDefaultHeaders; diff --git a/sdk/communication/communication-job-router-rest/test/internal/utils/mockClient.ts b/sdk/communication/communication-job-router-rest/test/internal/utils/mockClient.ts deleted file mode 100644 index 9d3c95c05a82..000000000000 --- a/sdk/communication/communication-job-router-rest/test/internal/utils/mockClient.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { ClientOptions } from "@azure-rest/core-client"; -import * as dotenv from "dotenv"; -import { Recorder, env, RecorderStartOptions } from "@azure-tools/test-recorder"; -import JobRouter from "../../../src"; -import { AzureCommunicationRoutingServiceClient } from "../../../src"; -import { Context, Test } from "mocha"; -import { isNode } from "@azure/core-util"; -import { generateToken } from "../../public/utils/connection"; - -if (isNode) { - dotenv.config(); -} - -const envSetupForPlayback: { [k: string]: string } = { - COMMUNICATION_CONNECTION_STRING: "endpoint=https://endpoint/;accesskey=banana", -}; - -const fakeToken = generateToken(); -export const recorderOptions: RecorderStartOptions = { - envSetupForPlayback, - sanitizerOptions: { - bodyKeySanitizers: [{ jsonPath: "$.accessToken.token", value: fakeToken }], - }, - removeCentralSanitizers: [ - "AZSDK3493", // .name in the body is not a secret and is listed below in the beforeEach section - "AZSDK3430", // .id in the body is not a secret and is listed below in the beforeEach section - ], -}; - -export async function createRecorder(context: Test | undefined): Promise { - const recorder = new Recorder(context); - await recorder.start(recorderOptions); - await recorder.addSanitizers(recorderOptions.sanitizerOptions!, ["record", "playback"]); - await recorder.setMatcher("HeaderlessMatcher"); - return recorder; -} - -export interface RecordedRouterClient { - routerClient: AzureCommunicationRoutingServiceClient; - recorder: Recorder; -} - -export async function createRecordedRouterClientWithConnectionString( - context: Context, -): Promise { - const recorder = await createRecorder(context.currentTest); - - return { - routerClient: JobRouter( - env.COMMUNICATION_CONNECTION_STRING as string, - recorder.configureClientOptions({}) as ClientOptions, - ), - recorder, - }; -} diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/classificationPolicies.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/classificationPolicies.spec.ts deleted file mode 100644 index c1c75ed3a38d..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/classificationPolicies.spec.ts +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { Context } from "mocha"; -import { - AzureCommunicationRoutingServiceClient, - ClassificationPolicyOutput, - paginate, -} from "../../../src"; -import { - getClassificationPolicyRequest, - getDistributionPolicyRequest, - getExceptionPolicyRequest, - getQueueRequest, -} from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { timeoutMs } from "../utils/constants"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-d-policies"; - - const { classificationPolicyId, classificationPolicyRequest } = - getClassificationPolicyRequest(testRunId); - - const { distributionPolicyId, distributionPolicyRequest } = - getDistributionPolicyRequest(testRunId); - - const { exceptionPolicyId, exceptionPolicyRequest } = getExceptionPolicyRequest(testRunId); - - const { queueId, queueRequest } = getQueueRequest(testRunId); - - describe("classification Policy Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: distributionPolicyRequest, - }); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: exceptionPolicyRequest, - }); - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: queueRequest, - }); - }); - - this.afterEach(async function (this: Context) { - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .delete(); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .delete(); - await routerClient.path("/routing/queues/{queueId}", queueId).delete(); - - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a classification policy", async function () { - const response = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: classificationPolicyRequest, - }); - - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as ClassificationPolicyOutput; - - assert.isDefined(result); - assert.isDefined(result?.id); - assert.equal(result.name, classificationPolicyRequest.name); - }).timeout(timeoutMs); - - it("should get a classification policy", async function () { - const response = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as ClassificationPolicyOutput; - - assert.equal(result.id, classificationPolicyId); - assert.equal(result.name, classificationPolicyRequest.name); - }).timeout(timeoutMs); - - it("should update a classification policy", async function () { - const updatePatch = { ...classificationPolicyRequest, name: "new-name" }; - let response = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as ClassificationPolicyOutput; - - const removePatch = { ...classificationPolicyRequest, name: null! }; - response = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as ClassificationPolicyOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.name, updatePatch.name); - assert.isUndefined(removeResult.name); - }).timeout(timeoutMs); - - it("should list classification policies", async function () { - const result: ClassificationPolicyOutput[] = []; - const response = await routerClient - .path("/routing/classificationPolicies") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as ClassificationPolicyOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - it("should delete a classification policy", async function () { - const response = await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .delete(); - - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - }).timeout(timeoutMs); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/distributionPolicies.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/distributionPolicies.spec.ts deleted file mode 100644 index 7a9c26e751bf..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/distributionPolicies.spec.ts +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { Context } from "mocha"; -import { - AzureCommunicationRoutingServiceClient, - DistributionPolicyOutput, - paginate, -} from "../../../src"; -import { getDistributionPolicyRequest } from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { timeoutMs } from "../utils/constants"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-d-policies"; - - const { distributionPolicyIdForCreationAndDeletionTest, distributionPolicyRequest } = - getDistributionPolicyRequest(testRunId); - - describe("Distribution Policy Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - }); - - this.afterEach(async function (this: Context) { - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a distribution policy", async function () { - const response = await routerClient - .path( - "/routing/distributionPolicies/{distributionPolicyId}", - distributionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: distributionPolicyRequest, - }); - - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as DistributionPolicyOutput; - - assert.isDefined(result); - assert.isDefined(result?.id); - assert.equal(result.name, distributionPolicyRequest.name); - }).timeout(timeoutMs); - - it("should get a distribution policy", async function () { - const response = await routerClient - .path( - "/routing/distributionPolicies/{distributionPolicyId}", - distributionPolicyIdForCreationAndDeletionTest, - ) - .get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as DistributionPolicyOutput; - - assert.equal(result.id, distributionPolicyIdForCreationAndDeletionTest); - assert.equal(result.name, distributionPolicyRequest.name); - assert.equal( - result.offerExpiresAfterSeconds, - distributionPolicyRequest.offerExpiresAfterSeconds, - ); - assert.deepEqual(result.mode, distributionPolicyRequest.mode); - }).timeout(timeoutMs); - - it("should update a distribution policy", async function () { - const updatePatch = { ...distributionPolicyRequest, name: "new-name" }; - let response = await routerClient - .path( - "/routing/distributionPolicies/{distributionPolicyId}", - distributionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as DistributionPolicyOutput; - - const removePatch = { ...distributionPolicyRequest, name: null! }; - response = await routerClient - .path( - "/routing/distributionPolicies/{distributionPolicyId}", - distributionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as DistributionPolicyOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.name, updatePatch.name); - assert.isUndefined(removeResult.name); - }).timeout(timeoutMs); - - it("should list distribution policies", async function () { - const result: DistributionPolicyOutput[] = []; - const response = await routerClient - .path("/routing/distributionPolicies") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as DistributionPolicyOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - it("should delete a distribution policy", async function () { - const response = await routerClient - .path( - "/routing/distributionPolicies/{distributionPolicyId}", - distributionPolicyIdForCreationAndDeletionTest, - ) - .delete(); - - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - }).timeout(timeoutMs); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/exceptionPolicies.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/exceptionPolicies.spec.ts deleted file mode 100644 index 82fbefee3cb8..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/exceptionPolicies.spec.ts +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { Context } from "mocha"; -import { - AzureCommunicationRoutingServiceClient, - ExceptionPolicyOutput, - paginate, -} from "../../../src"; -import { getExceptionPolicyRequest } from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { timeoutMs } from "../utils/constants"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-d-policies"; - - const { exceptionPolicyIdForCreationAndDeletionTest, exceptionPolicyRequest } = - getExceptionPolicyRequest(testRunId); - - describe("exception Policy Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - }); - - this.afterEach(async function (this: Context) { - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a exception policy", async function () { - // TODO. we have a transient bug for creating existed exception policy return 400, try rotate the id for Record testing if this fails - const response = await routerClient - .path( - "/routing/exceptionPolicies/{exceptionPolicyId}", - exceptionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: exceptionPolicyRequest, - }); - - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as ExceptionPolicyOutput; - - assert.isDefined(result); - assert.isDefined(result?.id); - assert.equal(result.name, exceptionPolicyRequest.name); - }).timeout(timeoutMs); - - it("should get a exception policy", async function () { - const response = await routerClient - .path( - "/routing/exceptionPolicies/{exceptionPolicyId}", - exceptionPolicyIdForCreationAndDeletionTest, - ) - .get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as ExceptionPolicyOutput; - - assert.equal(result.id, exceptionPolicyIdForCreationAndDeletionTest); - assert.equal(result.name, exceptionPolicyRequest.name); - // TODO. Minor. need to fix "id" in actions in exceptionRules on service repo - // assert.deepEqual(result.exceptionRules, exceptionPolicyRequest.exceptionRules); - }).timeout(timeoutMs); - - it("should update a exception policy", async function () { - const updatePatch = { ...exceptionPolicyRequest, name: "new-name" }; - let response = await routerClient - .path( - "/routing/exceptionPolicies/{exceptionPolicyId}", - exceptionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as ExceptionPolicyOutput; - - const removePatch = { ...exceptionPolicyRequest, name: null! }; - response = await routerClient - .path( - "/routing/exceptionPolicies/{exceptionPolicyId}", - exceptionPolicyIdForCreationAndDeletionTest, - ) - .patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as ExceptionPolicyOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.name, updatePatch.name); - assert.isUndefined(removeResult.name); - }).timeout(timeoutMs); - - it("should list exception policies", async function () { - const result: ExceptionPolicyOutput[] = []; - const response = await routerClient - .path("/routing/exceptionPolicies") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as ExceptionPolicyOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - it("should delete a exception policy", async function () { - const response = await routerClient - .path( - "/routing/exceptionPolicies/{exceptionPolicyId}", - exceptionPolicyIdForCreationAndDeletionTest, - ) - .delete(); - - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - }).timeout(timeoutMs); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/jobs.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/jobs.spec.ts deleted file mode 100644 index fa00dbfbd2cd..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/jobs.spec.ts +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { - AzureCommunicationRoutingServiceClient, - paginate, - RouterJob, - RouterJobOutput, - RouterJobPositionDetailsOutput, -} from "../../../src"; -import { Context } from "mocha"; -import { - getClassificationPolicyRequest, - getDistributionPolicyRequest, - getExceptionPolicyRequest, - getJobRequest, - getQueueRequest, -} from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { timeoutMs } from "../utils/constants"; -import { pollForJobQueued, retry } from "../utils/polling"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-jobs"; - - const { distributionPolicyId, distributionPolicyRequest } = - getDistributionPolicyRequest(testRunId); - const { exceptionPolicyId, exceptionPolicyRequest } = getExceptionPolicyRequest(testRunId); - const { queueId, queueRequest } = getQueueRequest(testRunId); - const { classificationPolicyId, classificationPolicyRequest } = - getClassificationPolicyRequest(testRunId); - const { jobId, jobRequest } = getJobRequest(testRunId); - - // function getScheduledJob(scheduledTime: string) { - // const matchingMode: ScheduleAndSuspendMode = { - // kind: "schedule-and-suspend", - // scheduleAt: new Date(scheduledTime) - // } - // return { - // ...jobRequest, - // notes: [], - // matchingMode: matchingMode, - // }; - // } - - describe("Job Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: distributionPolicyRequest, - }); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: exceptionPolicyRequest, - }); - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: queueRequest, - }); - await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: classificationPolicyRequest, - }); - }); - - this.afterEach(async function (this: Context) { - await routerClient - .path("/routing/classificationPolicies/{classificationPolicyId}", classificationPolicyId) - .delete(); - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .delete(); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .delete(); - await routerClient.path("/routing/queues/{queueId}", queueId).delete(); - - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a job", async function () { - const response = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: jobRequest, - }); - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as RouterJobOutput; - - assert.isDefined(result); - assert.isDefined(result.id); - assert.equal(result.id, jobId); - }).timeout(timeoutMs); - - // TODO. Fix the transient bug on existing job - // it("should create a scheduled job", async function () { - // const currentTime: Date = new Date(); - // currentTime.setSeconds(currentTime.getSeconds() + 5); - // const scheduledTime: string = recorder.variable("scheduledTime", currentTime.toISOString()); - // - // const scheduledJob = getScheduledJob(scheduledTime); - // - // - // const response = await routerClient.path("/routing/jobs/{jobId}", scheduledJobId).patch({ - // contentType: "application/merge-patch+json", - // body: scheduledJob - // }) - // if (response.status !== "201") { - // throw new Error("request fails") - // } - // const result = (response.body as RouterJobOutput) - // - // assert.isDefined(result); - // assert.isDefined(result.id); - // assert.isDefined(result.matchingMode); - // assert.equal(result.id, scheduledJobId); - // assert.equal( - // (result.matchingMode as ScheduleAndSuspendModeOutput).scheduleAt, - // scheduledTime - // ); - // }).timeout(timeoutMs); - - it("should get a job", async function () { - const response = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as RouterJobOutput; - - assert.isDefined(result); - assert.isDefined(result.id); - assert.equal(result.id, jobId); - }).timeout(timeoutMs); - - it("should update a job", async function () { - const updatePatch = { ...jobRequest, priority: 25, dispositionCode: "testCode" }; - let response = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as RouterJobOutput; - - const removePatch = { ...jobRequest, priority: null!, dispositionCode: null! }; - response = await routerClient.path("/routing/jobs/{jobId}", jobId).patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as RouterJobOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.id, jobId); - assert.equal(removeResult.id, jobId); - assert.equal(updateResult.priority, updatePatch.priority); - assert.equal(removeResult.priority, 1); - assert.isUndefined(removeResult.dispositionCode); - }).timeout(timeoutMs); - - it("should get queue position for a job", async function () { - await pollForJobQueued(jobId, routerClient); - const response = await routerClient.path("/routing/jobs/{jobId}/position", jobId).get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as RouterJobPositionDetailsOutput; - - assert.isDefined(result); - assert.isDefined(result.position); - assert.equal(jobId, result.jobId); - }).timeout(timeoutMs); - - it("should reclassify a job", async function () { - let result; - await retry( - async () => { - const response = await routerClient - .path("/routing/jobs/{jobId}:reclassify", jobId) - .post(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - result = response.body; - }, - { retries: 3, retryIntervalMs: 1500 }, - ); - - assert.isDefined(result); - }).timeout(timeoutMs); - - it("should list jobs", async function () { - const result: RouterJob[] = []; - const response = await routerClient - .path("/routing/jobs") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as RouterJobOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - // it("should list scheduled jobs", async function () { - // const currentTime: Date = new Date(); - // currentTime.setSeconds(currentTime.getSeconds() + 30); - // const scheduledTime: string = recorder.variable("scheduledTime", currentTime.toISOString()); - // const result: RouterJob[] = []; - // - // const response = await routerClient.path("/routing/jobs").get({ - // queryParameters: { - // maxpagesize: 20, - // scheduledBefore: new Date(scheduledTime), - // }, - // }); - // - // if (response.status === "200") { - // // The paginate helper creates a paged async iterator using metadata from the first page. - // const items = paginate(routerClient, response); - // - // // We get an PageableAsyncIterator so we need to do `for await`. - // for await (const item of items) { - // result.push(item as RouterJobOutput); - // } - // } - // - // assert.isNotEmpty(result); - // }).timeout(timeoutMs); - - it("should cancel a job", async function () { - let result; - await retry( - async () => { - const response = await routerClient.path("/routing/jobs/{jobId}:cancel", jobId).post(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - result = response.body; - }, - { retries: 3, retryIntervalMs: 1500 }, - ); - - assert.isDefined(result); - }).timeout(timeoutMs); - - it("should delete a job", async function () { - let deleted = false; - await retry( - async () => { - const interResponse = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (interResponse.status !== "200") { - throw new Error("request fails"); - } - const job = interResponse.body as RouterJobOutput; - - if (job.status !== "cancelled") { - await routerClient.path("/routing/jobs/{jobId}:cancel", jobId).post(); - } else { - const response = await routerClient.path("/routing/jobs/{jobId}", jobId).delete(); - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - deleted = true; - } - }, - { retries: 5, retryIntervalMs: 1500 }, - ); - - assert.isTrue(deleted); - }).timeout(timeoutMs * 4); - - // TODO. Fix the transient bug on existing job - // it("should delete a scheduled job", async function () { - // let deleted = false; - // await retry( - // async () => { - // const interResponse = await routerClient.path("/routing/jobs/{jobId}", scheduledJobId).get() - // if (interResponse.status !== "200") { - // throw new Error("request fails") - // } - // const job = (interResponse.body as RouterJobOutput) - // - // if (job.status !== "cancelled") { - // await routerClient.path("/routing/jobs/{jobId}:cancel", scheduledJobId).post() - // } else { - // const response = await routerClient.path("/routing/jobs/{jobId}", scheduledJobId).delete() - // if (response.status !== "204") { - // throw new Error("request fails") - // } - // - // assert.isDefined(response); - // deleted = true; - // } - // }, - // { retries: 5, retryIntervalMs: 1500 } - // ); - // - // assert.isTrue(deleted) - // }).timeout(timeoutMs * 4); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/queues.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/queues.spec.ts deleted file mode 100644 index 556583c296d0..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/queues.spec.ts +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { AzureCommunicationRoutingServiceClient, paginate, RouterQueueOutput } from "../../../src"; -import { Context } from "mocha"; -import { - getQueueRequest, - getExceptionPolicyRequest, - getDistributionPolicyRequest, -} from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { timeoutMs } from "../utils/constants"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-queues"; - - const { distributionPolicyId, distributionPolicyRequest } = - getDistributionPolicyRequest(testRunId); - const { exceptionPolicyId, exceptionPolicyRequest } = getExceptionPolicyRequest(testRunId); - const { queueId, queueRequest } = getQueueRequest(testRunId); - - describe("Queue Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: distributionPolicyRequest, - }); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: exceptionPolicyRequest, - }); - }); - - this.afterEach(async function (this: Context) { - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .delete(); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .delete(); - - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a queue", async function () { - const response = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: queueRequest, - }); - - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as RouterQueueOutput; - - assert.isDefined(result); - assert.isDefined(result?.id); - assert.equal(result.name, queueRequest.name); - }).timeout(timeoutMs); - - it("should get a queue", async function () { - const response = await routerClient.path("/routing/queues/{queueId}", queueId).get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as RouterQueueOutput; - - assert.equal(result.id, queueId); - assert.equal(result.name, queueRequest.name); - }).timeout(timeoutMs); - - it("should update a queue", async function () { - const updatePatch = { ...queueRequest, name: "new-name" }; - let response = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as RouterQueueOutput; - - const removePatch = { ...queueRequest, name: null! }; - response = await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as RouterQueueOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.name, updatePatch.name); - assert.isUndefined(removeResult.name); - }).timeout(timeoutMs); - - it("should list queues", async function () { - const result: RouterQueueOutput[] = []; - const response = await routerClient - .path("/routing/queues") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as RouterQueueOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - it("should delete a queue", async function () { - const response = await routerClient.path("/routing/queues/{queueId}", queueId).delete(); - - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - }).timeout(timeoutMs); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/methods/workers.spec.ts b/sdk/communication/communication-job-router-rest/test/public/methods/workers.spec.ts deleted file mode 100644 index 0d5d2e1fa05f..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/methods/workers.spec.ts +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { Context } from "mocha"; -import { AzureCommunicationRoutingServiceClient, paginate, RouterWorkerOutput } from "../../../src"; -import { - getDistributionPolicyRequest, - getExceptionPolicyRequest, - getQueueRequest, - getWorkerRequest, -} from "../utils/testData"; -import { createRecordedRouterClientWithConnectionString } from "../../internal/utils/mockClient"; -import { sleep, timeoutMs } from "../utils/constants"; - -describe("JobRouterClient", function () { - let routerClient: AzureCommunicationRoutingServiceClient; - let recorder: Recorder; - - const testRunId = "recorded-workers"; - - const { distributionPolicyId, distributionPolicyRequest } = - getDistributionPolicyRequest(testRunId); - const { exceptionPolicyId, exceptionPolicyRequest } = getExceptionPolicyRequest(testRunId); - const { queueId, queueRequest } = getQueueRequest(testRunId); - const { workerId, workerRequest } = getWorkerRequest(testRunId); - - describe("Worker Operations", function () { - this.beforeEach(async function (this: Context) { - ({ routerClient, recorder } = await createRecordedRouterClientWithConnectionString(this)); - - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: distributionPolicyRequest, - }); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .patch({ - contentType: "application/merge-patch+json", - body: exceptionPolicyRequest, - }); - await routerClient.path("/routing/queues/{queueId}", queueId).patch({ - contentType: "application/merge-patch+json", - body: queueRequest, - }); - }); - - this.afterEach(async function (this: Context) { - await routerClient - .path("/routing/distributionPolicies/{distributionPolicyId}", distributionPolicyId) - .delete(); - await routerClient - .path("/routing/exceptionPolicies/{exceptionPolicyId}", exceptionPolicyId) - .delete(); - await routerClient.path("/routing/queues/{queueId}", queueId).delete(); - - if (!this.currentTest?.isPending() && recorder) { - await recorder.stop(); - } - }); - - it("should create a worker", async function () { - const response = await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: workerRequest, - }); - - if (response.status !== "201") { - throw new Error("request fails"); - } - const result = response.body as RouterWorkerOutput; - - assert.isDefined(result); - assert.isDefined(result?.id); - assert.equal(result.capacity, workerRequest.capacity); - }).timeout(timeoutMs); - - it("should get a worker", async function () { - const response = await routerClient.path("/routing/workers/{workerId}", workerId).get(); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const result = response.body as RouterWorkerOutput; - - assert.equal(result.id, workerId); - assert.equal(result.capacity, workerRequest.capacity); - assert.deepEqual(result.channels, workerRequest.channels); - }).timeout(timeoutMs); - - it("should update a worker", async function () { - const updatePatch = { - ...workerRequest, - capacity: 100, - labels: { label1: "label1value" }, - tags: { tag1: "tag1value" }, - }; - let response = await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: updatePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const updateResult = response.body as RouterWorkerOutput; - - const removePatch = { ...workerRequest, tags: null! }; - response = await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: removePatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const removeResult = response.body as RouterWorkerOutput; - - assert.isDefined(updateResult); - assert.isDefined(updateResult.id); - assert.isDefined(removeResult); - assert.isDefined(removeResult.id); - assert.equal(updateResult.capacity, updatePatch.capacity); - assert.isEmpty(removeResult.tags); - }).timeout(timeoutMs); - - it("should register and deregister a worker", async function () { - const registerPatch = { ...workerRequest, availableForOffers: true }; - let response = await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: registerPatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const registerResult = response.body as RouterWorkerOutput; - - await sleep(2000); - const deregisterPatch = { ...workerRequest, availableForOffers: false }; - response = await routerClient.path("/routing/workers/{workerId}", workerId).patch({ - contentType: "application/merge-patch+json", - body: deregisterPatch, - }); - - if (response.status !== "200") { - throw new Error("request fails"); - } - const deregisterResult = response.body as RouterWorkerOutput; - - assert.isDefined(registerResult); - assert.isDefined(registerResult?.id); - assert.equal(registerResult.availableForOffers, true); - - assert.isDefined(deregisterResult); - assert.isDefined(deregisterResult?.id); - assert.equal(deregisterResult.availableForOffers, false); - }).timeout(timeoutMs); - - it("should list workers", async function () { - const result: RouterWorkerOutput[] = []; - const response = await routerClient - .path("/routing/workers") - .get({ queryParameters: { maxpagesize: 20 } }); - - if (response.status === "200") { - // The paginate helper creates a paged async iterator using metadata from the first page. - const items = paginate(routerClient, response); - - // We get an PageableAsyncIterator so we need to do `for await`. - for await (const item of items) { - result.push(item as RouterWorkerOutput); - } - } - - assert.isNotEmpty(result); - }).timeout(timeoutMs); - - it("should delete a worker", async function () { - const response = await routerClient.path("/routing/workers/{workerId}", workerId).delete(); - - if (response.status !== "204") { - throw new Error("request fails"); - } - - assert.isDefined(response); - }).timeout(timeoutMs); - }); -}); diff --git a/sdk/communication/communication-job-router-rest/test/public/sampleTest.spec.ts b/sdk/communication/communication-job-router-rest/test/public/sampleTest.spec.ts index bce68e428645..344657d6f17e 100644 --- a/sdk/communication/communication-job-router-rest/test/public/sampleTest.spec.ts +++ b/sdk/communication/communication-job-router-rest/test/public/sampleTest.spec.ts @@ -1,20 +1,18 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { Recorder } from "@azure-tools/test-recorder"; -import { assert } from "chai"; -import { createRecorder } from "./utils/recordedClient"; -import { Context } from "mocha"; +import { createRecorder } from "./utils/recordedClient.js"; +import { assert, beforeEach, afterEach, it, describe } from "vitest"; describe("My test", () => { - let recorder: Recorder; + // let recorder: Recorder; - beforeEach(async function (this: Context) { - recorder = await createRecorder(this); + beforeEach(async function () { + // recorder = await createRecorder(this); }); afterEach(async function () { - await recorder.stop(); + // await recorder.stop(); }); it("sample test", async function () { diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/connection.ts b/sdk/communication/communication-job-router-rest/test/public/utils/connection.ts deleted file mode 100644 index 829a6230cfdb..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/connection.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { isNode } from "@azure/core-util"; - -export const baseUri = "https://contoso.api.fake"; - -declare function btoa(stringToEncode: string): string; - -export const generateToken = (): string => { - const validForMinutes = 60; - const expiresOn = (Date.now() + validForMinutes * 60 * 1000) / 1000; - const tokenString = JSON.stringify({ exp: expiresOn }); - const base64Token = isNode ? Buffer.from(tokenString).toString("base64") : btoa(tokenString); - return `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.${base64Token}.adM-ddBZZlQ1WlN3pdPBOF5G4Wh9iZpxNP_fSvpF4cWs`; -}; diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/constants.ts b/sdk/communication/communication-job-router-rest/test/public/utils/constants.ts deleted file mode 100644 index ec0b16aa31aa..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/constants.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// // Copyright (c) Microsoft Corporation. -// // Licensed under the MIT license. -// import { v4 as uuid } from "uuid"; -// import { env } from "@azure-tools/test-recorder"; -// -// // HACK: Intentionally block to: -// // * avoid 'duplicate sequence number' error from service (calling commands too fast?) -export function sleep(ms: number): Promise { - return new Promise((resolve) => setTimeout(resolve, ms)); -} -// -export const timeoutMs: number = 15000; -// -// export const getTestRunId = (staticId: string): string => { -// return ["record", "playback", "undefined"].includes(env.TEST_MODE!) ? staticId : uuid(); -// }; diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/env.browser.ts b/sdk/communication/communication-job-router-rest/test/public/utils/env.browser.ts deleted file mode 100644 index fd2aca680c7b..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/env.browser.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/env.ts b/sdk/communication/communication-job-router-rest/test/public/utils/env.ts deleted file mode 100644 index 0e06855b73ae..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/env.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import * as dotenv from "dotenv"; - -dotenv.config(); diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/polling.ts b/sdk/communication/communication-job-router-rest/test/public/utils/polling.ts deleted file mode 100644 index 5cd6c299c54d..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/polling.ts +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { AzureCommunicationRoutingServiceClient, RouterJobOutput } from "../../../src"; -import { RouterJob } from "../../../src"; - -// export async function pollForJobOffer( -// workerId: string, -// client: JobRouterClient -// ): Promise { -// let worker: RouterWorker = {}; -// while (worker.offers?.length === undefined || worker.offers.length < 1) { -// worker = await client.getWorker(workerId); -// } -// -// return worker.offers[0]; -// } -// -// export async function pollForJobAssignment( -// jobId: string, -// client: JobRouterClient -// ): Promise { -// let job: RouterJob = {}; -// while (job.assignments === undefined || Object.keys(job.assignments).length < 1) { -// job = await client.getJob(jobId); -// } -// -// return Object.values(job.assignments)[0]; -// } - -export async function pollForJobQueued( - jobId: string, - routerClient: AzureCommunicationRoutingServiceClient, -): Promise { - let job: RouterJobOutput = { - id: "dummy", - etag: "dummy", - }; - while (job.status !== "queued") { - const response = await routerClient.path("/routing/jobs/{jobId}", jobId).get(); - if (response.status !== "200") { - throw new Error("request fails"); - } - job = response.body as RouterJobOutput; - } - - return job; -} - -// export async function pollForJobCancelled( -// jobId: string, -// client: JobRouterClient -// ): Promise { -// let job: RouterJob = {}; -// while (job.status !== "cancelled") { -// job = await client.getJob(jobId); -// } -// -// return job; -// } - -/** - * Runs the function `fn` - * and retries automatically if it fails. - * - * Tries max `1 + retries` times - * with `retryIntervalMs` milliseconds between retries. - * - * From https://mtsknn.fi/blog/js-retry-on-fail/ - */ -export const retry = async ( - fn: () => Promise | T, - { retries, retryIntervalMs }: { retries: number; retryIntervalMs: number }, -): Promise => { - const sleep = (ms = 0) => new Promise((resolve) => setTimeout(resolve, ms)); - try { - return await fn(); - } catch (error) { - if (retries <= 0) { - throw error; - } - await sleep(retryIntervalMs); - return retry(fn, { retries: retries - 1, retryIntervalMs }); - } -}; diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/recordedClient.ts b/sdk/communication/communication-job-router-rest/test/public/utils/recordedClient.ts index b8fe1be96f40..a4d8acf86259 100644 --- a/sdk/communication/communication-job-router-rest/test/public/utils/recordedClient.ts +++ b/sdk/communication/communication-job-router-rest/test/public/utils/recordedClient.ts @@ -1,24 +1,18 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { Context } from "mocha"; -import { Recorder, RecorderStartOptions } from "@azure-tools/test-recorder"; -import "./env"; +import { + Recorder, + RecorderStartOptions, + VitestTestContext, +} from "@azure-tools/test-recorder"; -const envSetupForPlayback: Record = { - ENDPOINT: "https://endpoint", - AZURE_CLIENT_ID: "azure_client_id", - AZURE_CLIENT_SECRET: "azure_client_secret", - AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888", +const replaceableVariables: Record = { SUBSCRIPTION_ID: "azure_subscription_id", }; const recorderEnvSetup: RecorderStartOptions = { - envSetupForPlayback, - removeCentralSanitizers: [ - "AZSDK3493", // .name in the body is not a secret and is listed below in the beforeEach section - "AZSDK3430", // .id in the body is not a secret and is listed below in the beforeEach section - ], + envSetupForPlayback: replaceableVariables, }; /** @@ -26,8 +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: Context): Promise { - const recorder = new Recorder(context.currentTest); +export async function createRecorder( + context: VitestTestContext, +): Promise { + const recorder = new Recorder(context); await recorder.start(recorderEnvSetup); return recorder; } diff --git a/sdk/communication/communication-job-router-rest/test/public/utils/testData.ts b/sdk/communication/communication-job-router-rest/test/public/utils/testData.ts deleted file mode 100644 index 8d126f96fe78..000000000000 --- a/sdk/communication/communication-job-router-rest/test/public/utils/testData.ts +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -import { - ClassificationPolicy, - ConditionalQueueSelectorAttachment, - DistributionPolicy, - ExceptionPolicy, - ExceptionRule, - ExpressionRouterRule, - RouterQueue, - PassThroughQueueSelectorAttachment, - RouterQueueSelector, - RouterWorker, - StaticQueueSelectorAttachment, - RouterJob, -} from "../../../src"; - -const queueId = "test-a-queue"; -const exceptionPolicyId = "test-e-policy"; -const exceptionPolicyId2 = "test-h-policy"; -const distributionPolicyId = "test-d-policy"; -const distributionPolicyId2 = "test-p-policy"; -const classificationPolicyId = "test-c-policy"; -const jobId = "test-job"; -const jobId2 = "test-8-job"; -const workerId = "test-worker"; - -const product = "O365"; -const region = "NA"; -const english = "EN"; -const french = "FR"; - -const isO365: ExpressionRouterRule = { - kind: "expression", - language: "powerFx", - expression: `If(job.Product = "${product}", true, false)`, -}; - -const isEnglish: ExpressionRouterRule = { - kind: "expression", - language: "powerFx", - expression: `If(job.Language = "${english}", true, false)`, -}; - -const isFrench: ExpressionRouterRule = { - kind: "expression", - language: "powerFx", - expression: `If(job.Language = "${french}", true, false)`, -}; - -function getQueueIdSelector(guid: string): RouterQueueSelector { - return { - key: "Id", - labelOperator: "equal", - value: { [`${queueId}-${guid}`]: `${queueId}-${guid}` }, - }; -} - -const queueDoesNotExistSelector: RouterQueueSelector = { - key: "Id", - labelOperator: "equal", - value: { queueDoesNotExist: "queueDoesNotExist" }, -}; - -const englishSelector: RouterQueueSelector = { - key: "Language", - labelOperator: "equal", - value: english, -}; - -const frenchSelector: RouterQueueSelector = { - key: "Language", - labelOperator: "equal", - value: french, -}; - -const staticQueueDoesNotExistSelector: StaticQueueSelectorAttachment = { - kind: "static", - queueSelector: queueDoesNotExistSelector, -}; - -const passThroughRegionSelector: PassThroughQueueSelectorAttachment = { - kind: "passThrough", - key: "Region", - labelOperator: "equal", -}; - -const passThroughProductSelector: PassThroughQueueSelectorAttachment = { - kind: "passThrough", - key: "Product", - labelOperator: "equal", -}; - -function getConditionalProductSelector(guid: string): ConditionalQueueSelectorAttachment { - return { - kind: "conditional", - condition: isO365, - queueSelectors: [getQueueIdSelector(guid)], - }; -} - -const conditionalEnglishSelector: ConditionalQueueSelectorAttachment = { - kind: "conditional", - condition: isEnglish, - queueSelectors: [englishSelector], -}; - -const conditionalFrenchSelector: ConditionalQueueSelectorAttachment = { - kind: "conditional", - condition: isFrench, - queueSelectors: [frenchSelector], -}; - -/** An extended model for id. */ -export interface WithId { - /** The id of model. */ - id: string; -} - -export function getQueueEnglish(guid: string): RouterQueue & WithId { - return { - id: `${queueId}-english-${guid}`, - name: `${queueId}-english-${guid}`, - distributionPolicyId: `${distributionPolicyId}-${guid}`, - labels: { Region: region, Product: product, Language: english }, - }; -} - -export function getQueueFrench(guid: string): RouterQueue & WithId { - return { - id: `${queueId}-french-${guid}`, - name: `${queueId}-french-${guid}`, - distributionPolicyId: `${distributionPolicyId}-${guid}`, - labels: { Region: region, Product: product, Language: french }, - }; -} - -export function getClassificationPolicyFallback(guid: string): ClassificationPolicy & WithId { - return { - id: `${classificationPolicyId}-fallback-${guid}`, - name: `${classificationPolicyId}-fallback`, - fallbackQueueId: `${queueId}-${guid}`, - queueSelectorAttachments: [staticQueueDoesNotExistSelector], - }; -} - -export function getClassificationPolicyConditional(guid: string): ClassificationPolicy & WithId { - return { - id: `${classificationPolicyId}-conditional-${guid}`, - name: `${classificationPolicyId}-conditional`, - fallbackQueueId: `${queueId}-${guid}`, - queueSelectorAttachments: [getConditionalProductSelector(guid)], - }; -} - -export function getClassificationPolicyPassthrough(guid: string): ClassificationPolicy & WithId { - return { - id: `${classificationPolicyId}-passthrough-${guid}`, - name: `${classificationPolicyId}-passthrough`, - fallbackQueueId: `${queueId}-${guid}`, - queueSelectorAttachments: [passThroughRegionSelector, passThroughProductSelector], - }; -} - -export function getClassificationPolicyCombined(guid: string): ClassificationPolicy & WithId { - return { - id: `${classificationPolicyId}-combined-${guid}`, - name: `${classificationPolicyId}-combined`, - fallbackQueueId: `${queueId}-${guid}`, - queueSelectorAttachments: [ - passThroughRegionSelector, - passThroughProductSelector, - conditionalEnglishSelector, - conditionalFrenchSelector, - ], - }; -} - -export interface TestJobRequest { - id: string; - options: RouterJob; -} -export function getJobFallback(guid: string): TestJobRequest { - return { - id: `${jobId}-fallback-${guid}`, - options: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-fallback-${guid}`, - }, - }; -} - -export function getJobConditional(guid: string): TestJobRequest { - return { - id: `${jobId}-conditional-${guid}`, - options: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-conditional-${guid}`, - labels: { Product: product }, - }, - }; -} - -export function getJobPassthrough(guid: string): TestJobRequest { - return { - id: `${jobId}-passthrough-${guid}`, - options: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-passthrough-${guid}`, - labels: { Region: region, Language: english }, - }, - }; -} - -export function getJobEnglish(guid: string): TestJobRequest { - return { - id: `${jobId}-english-${guid}`, - options: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-combined-${guid}`, - labels: { Product: product, Region: region, Language: english }, - }, - }; -} - -export function getJobFrench(guid: string): TestJobRequest { - return { - id: `${jobId}-french-${guid}`, - options: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-combined-${guid}`, - labels: { Product: product, Region: region, Language: "FR" }, - }, - }; -} - -export interface QueueRequest { - queueId: string; - queueRequest: RouterQueue & WithId; -} -export function getQueueRequest(guid: string): QueueRequest { - const id = `${queueId}-${guid}`; - return { - queueId: id, - queueRequest: { - id, - name: queueId, - exceptionPolicyId: `${exceptionPolicyId}-${guid}`, - distributionPolicyId: `${distributionPolicyId}-${guid}`, - labels: {}, - }, - }; -} - -export interface ExceptionPolicyRequest { - exceptionPolicyId: string; - exceptionPolicyIdForCreationAndDeletionTest: string; - exceptionPolicyRequest: ExceptionPolicy; -} -export function getExceptionPolicyRequestWithReclassifyAction( - guid: string, -): ExceptionPolicyRequest { - return getExceptionPolicyRequestInternal(guid, true); -} -export function getExceptionPolicyRequest(guid: string): ExceptionPolicyRequest { - return getExceptionPolicyRequestInternal(guid, false); -} -function getExceptionPolicyRequestInternal( - guid: string, - addReclassifyAction: boolean, -): ExceptionPolicyRequest { - const id = `${exceptionPolicyId}-${guid}`; - const id2 = `${exceptionPolicyId2}-${guid}`; - const exceptionRules = getExceptionRules(guid, addReclassifyAction); - return { - exceptionPolicyId: id, - exceptionPolicyIdForCreationAndDeletionTest: id2, - exceptionPolicyRequest: { - name: exceptionPolicyId, - exceptionRules, - }, - }; -} - -function getExceptionRules(guid: string, addReclassifyAction: boolean): Array { - const exceptionRules: Array = [ - { - id: "MaxWaitTimeExceededCancel", - actions: [ - { - kind: "cancel", - note: "wait time exceeded; cancelling", - }, - ], - trigger: { - kind: "waitTime", - thresholdSeconds: 10, - }, - }, - ]; - - if (addReclassifyAction) { - exceptionRules.push({ - id: "MaxWaitTimeExceededReclassify", - actions: [ - { - kind: "reclassify", - classificationPolicyId: `${classificationPolicyId}-${guid}`, - labelsToUpsert: { - escalated: true, - }, - }, - ], - trigger: { - kind: "waitTime", - thresholdSeconds: 10, - }, - }); - } - - return exceptionRules; -} - -export interface DistributionPolicyRequest { - distributionPolicyId: string; - distributionPolicyIdForCreationAndDeletionTest: string; - distributionPolicyRequest: DistributionPolicy; -} -export function getDistributionPolicyRequest(guid: string): DistributionPolicyRequest { - const id = `${distributionPolicyId}-${guid}`; - const id2 = `${distributionPolicyId2}-${guid}`; - return { - distributionPolicyId: id, - distributionPolicyIdForCreationAndDeletionTest: id2, - distributionPolicyRequest: { - name: distributionPolicyId, - offerExpiresAfterSeconds: 60, - mode: { - kind: "longestIdle", - minConcurrentOffers: 1, - maxConcurrentOffers: 5, - bypassSelectors: false, - }, - }, - }; -} - -export interface ClassificationPolicyRequest { - classificationPolicyId: string; - classificationPolicyRequest: ClassificationPolicy; -} -export function getClassificationPolicyRequest(guid: string): ClassificationPolicyRequest { - const id = `${classificationPolicyId}-${guid}`; - return { - classificationPolicyId: id, - classificationPolicyRequest: { - name: classificationPolicyId, - fallbackQueueId: `${queueId}-${guid}`, - }, - }; -} - -export interface JobRequest { - jobId: string; - scheduledJobId: string; - jobRequest: RouterJob; -} -export function getJobRequest(guid: string): JobRequest { - const id = `${jobId}-${guid}`; - const id2 = `${jobId2}-${guid}`; - return { - jobId: id, - scheduledJobId: id2, - jobRequest: { - channelId: "test-channel", - priority: 1, - classificationPolicyId: `${classificationPolicyId}-${guid}`, - queueId: `${queueId}-${guid}`, - labels: {}, - notes: [], - matchingMode: { - kind: "queueAndMatch", - }, - }, - }; -} - -export interface WorkerRequest { - workerId: string; - workerRequest: RouterWorker & WithId; -} -export function getWorkerRequest(guid: string): WorkerRequest { - const id = `${workerId}-${guid}`; - return { - workerId: id, - workerRequest: { - id, - capacity: 1, - availableForOffers: false, - queues: [`${queueId}-${guid}`], - channels: [ - { - channelId: "test-channel", - capacityCostPerJob: 1, - }, - ], - labels: {}, - maxConcurrentOffers: 1, - }, - }; -} diff --git a/sdk/communication/communication-job-router-rest/tsconfig.browser.config.json b/sdk/communication/communication-job-router-rest/tsconfig.browser.config.json new file mode 100644 index 000000000000..1b37aebc5457 --- /dev/null +++ b/sdk/communication/communication-job-router-rest/tsconfig.browser.config.json @@ -0,0 +1,10 @@ +{ + "extends": "./.tshy/build.json", + "include": ["./src/**/*.ts", "./src/**/*.mts", "./test/**/*.spec.ts"], + "exclude": ["./test/**/node/**/*.ts"], + "compilerOptions": { + "outDir": "./dist-test/browser", + "rootDir": ".", + "skipLibCheck": true + } +} diff --git a/sdk/communication/communication-job-router-rest/tsconfig.json b/sdk/communication/communication-job-router-rest/tsconfig.json index a0d40848cb98..fa968e3bfdc6 100644 --- a/sdk/communication/communication-job-router-rest/tsconfig.json +++ b/sdk/communication/communication-job-router-rest/tsconfig.json @@ -1,5 +1,15 @@ { "extends": "../../../tsconfig", - "compilerOptions": { "outDir": "./dist-esm", "declarationDir": "./types" }, - "include": ["src/**/*.ts", "./test/**/*.ts"] -} + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "rootDir": "." + }, + "include": [ + "./src/**/*.ts", + "./src/**/*.mts", + "./src/**/*.cts", + "test/**/*.ts", + "./test/**/*.ts" + ] +} \ No newline at end of file diff --git a/sdk/communication/communication-job-router-rest/tsp-location.yaml b/sdk/communication/communication-job-router-rest/tsp-location.yaml index c741f834a73d..0ebf2191c602 100644 --- a/sdk/communication/communication-job-router-rest/tsp-location.yaml +++ b/sdk/communication/communication-job-router-rest/tsp-location.yaml @@ -1,7 +1,4 @@ -repo: - Azure/azure-rest-api-specs -additionalDirectories: [] -directory: - specification/communication/Communication.JobRouter -commit: - 1c04f51cbfa195fe177239cf63d00d3539006800 +directory: specification/communication/Communication.JobRouter +commit: 7594b7d0821b951429204ec732c6916d27ae5fdc +repo: /mnt/vss/_work/1/s/azure-rest-api-specs +additionalDirectories: diff --git a/sdk/communication/communication-job-router-rest/vitest.browser.config.ts b/sdk/communication/communication-job-router-rest/vitest.browser.config.ts new file mode 100644 index 000000000000..eda90c3ea96b --- /dev/null +++ b/sdk/communication/communication-job-router-rest/vitest.browser.config.ts @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { defineConfig } from "vitest/config"; +import { relativeRecordingsPath } from "@azure-tools/test-recorder"; + +process.env.RECORDINGS_RELATIVE_PATH = relativeRecordingsPath(); + +export default defineConfig({ + define: { + "process.env": process.env, + }, + test: { + reporters: ["basic", "junit"], + outputFile: { + junit: "test-results.browser.xml", + }, + browser: { + enabled: true, + headless: true, + name: "chromium", + provider: "playwright", + }, + fakeTimers: { + toFake: ["setTimeout", "Date"], + }, + watch: false, + include: ["dist-test/browser/**/*.spec.js"], + coverage: { + include: ["dist-test/browser/**/*.spec.js"], + provider: "istanbul", + reporter: ["text", "json", "html"], + reportsDirectory: "coverage-browser", + }, + testTimeout: 1200000, + }, +}); diff --git a/sdk/communication/communication-job-router-rest/vitest.config.ts b/sdk/communication/communication-job-router-rest/vitest.config.ts new file mode 100644 index 000000000000..7928f980b01c --- /dev/null +++ b/sdk/communication/communication-job-router-rest/vitest.config.ts @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { defineConfig } from "vitest/config"; +import { relativeRecordingsPath } from "@azure-tools/test-recorder"; + +export default defineConfig({ + test: { + reporters: ["basic", "junit"], + outputFile: { + junit: "test-results.browser.xml", + }, + fakeTimers: { + toFake: ["setTimeout", "Date"], + }, + watch: false, + include: ["test/**/*.spec.ts"], + exclude: ["test/**/browser/*.spec.ts"], + coverage: { + include: ["src/**/*.ts"], + exclude: [ + "src/**/*-browser.mts", + "src/**/*-react-native.mts", + "vitest*.config.ts", + "samples-dev/**/*.ts", + ], + provider: "istanbul", + reporter: ["text", "json", "html"], + reportsDirectory: "coverage", + }, + testTimeout: 1200000, + }, +});